mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-20 07:35:31 +08:00
netclient for ingress gateway now working
This commit is contained in:
@@ -275,6 +275,7 @@ func CreateExtClient(extclient models.ExtClient) error {
|
|||||||
}
|
}
|
||||||
extclient.Address = newAddress
|
extclient.Address = newAddress
|
||||||
}
|
}
|
||||||
|
|
||||||
if extclient.ClientID == "" {
|
if extclient.ClientID == "" {
|
||||||
clientid := StringWithCharset(7, charset)
|
clientid := StringWithCharset(7, charset)
|
||||||
clientname := "client-" + clientid
|
clientname := "client-" + clientid
|
||||||
@@ -314,7 +315,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
|
|||||||
extclient.Network = networkName
|
extclient.Network = networkName
|
||||||
extclient.IngressGatewayID = macaddress
|
extclient.IngressGatewayID = macaddress
|
||||||
node, err := functions.GetNodeByMacAddress(networkName, macaddress)
|
node, err := functions.GetNodeByMacAddress(networkName, macaddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
returnErrorResponse(w, r, formatError(err, "internal"))
|
returnErrorResponse(w, r, formatError(err, "internal"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -331,6 +332,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = CreateExtClient(extclient)
|
err = CreateExtClient(extclient)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
returnErrorResponse(w, r, formatError(err, "internal"))
|
returnErrorResponse(w, r, formatError(err, "internal"))
|
||||||
return
|
return
|
||||||
|
@@ -21,7 +21,7 @@ import (
|
|||||||
"github.com/skip2/go-qrcode"
|
"github.com/skip2/go-qrcode"
|
||||||
)
|
)
|
||||||
|
|
||||||
func serverClientHandlers(r *mux.Router) {
|
func intClientHandlers(r *mux.Router) {
|
||||||
|
|
||||||
r.HandleFunc("/api/wgconf/{macaddress}", securityCheck(http.HandlerFunc(getWGClientConf))).Methods("GET")
|
r.HandleFunc("/api/wgconf/{macaddress}", securityCheck(http.HandlerFunc(getWGClientConf))).Methods("GET")
|
||||||
r.HandleFunc("/api/register", securityCheck(http.HandlerFunc(registerClient))).Methods("POST")
|
r.HandleFunc("/api/register", securityCheck(http.HandlerFunc(registerClient))).Methods("POST")
|
||||||
@@ -116,7 +116,7 @@ Endpoint = %s
|
|||||||
json.NewEncoder(w).Encode(extclient)
|
json.NewEncoder(w).Encode(extclient)
|
||||||
}
|
}
|
||||||
|
|
||||||
func RegisterClient(client models.ServerClient) (models.ServerClient, error) {
|
func RegisterClient(client models.IntClient) (models.IntClient, error) {
|
||||||
if client.PrivateKey == "" {
|
if client.PrivateKey == "" {
|
||||||
privateKey, err := wgtypes.GeneratePrivateKey()
|
privateKey, err := wgtypes.GeneratePrivateKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -145,7 +145,7 @@ func RegisterClient(client models.ServerClient) (models.ServerClient, error) {
|
|||||||
client.ServerKey = server.ServerKey
|
client.ServerKey = server.ServerKey
|
||||||
|
|
||||||
|
|
||||||
collection := mongoconn.Client.Database("netmaker").Collection("serverclients")
|
collection := mongoconn.Client.Database("netmaker").Collection("intclients")
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
// insert our network into the network table
|
// insert our network into the network table
|
||||||
_, err = collection.InsertOne(ctx, client)
|
_, err = collection.InsertOne(ctx, client)
|
||||||
@@ -166,7 +166,7 @@ func registerClient(w http.ResponseWriter, r *http.Request) {
|
|||||||
Code: http.StatusInternalServerError, Message: "W1R3: It's not you it's me.",
|
Code: http.StatusInternalServerError, Message: "W1R3: It's not you it's me.",
|
||||||
}
|
}
|
||||||
|
|
||||||
var clientreq models.ServerClient
|
var clientreq models.IntClient
|
||||||
|
|
||||||
//get node from body of request
|
//get node from body of request
|
||||||
err := json.NewDecoder(r.Body).Decode(&clientreq)
|
err := json.NewDecoder(r.Body).Decode(&clientreq)
|
||||||
|
@@ -605,6 +605,7 @@ func UniqueAddress(networkName string) (string, error) {
|
|||||||
return ip.String(), err
|
return ip.String(), err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
err1 := errors.New("ERROR: No unique addresses available. Check network subnet.")
|
err1 := errors.New("ERROR: No unique addresses available. Check network subnet.")
|
||||||
return "W1R3: NO UNIQUE ADDRESSES AVAILABLE", err1
|
return "W1R3: NO UNIQUE ADDRESSES AVAILABLE", err1
|
||||||
@@ -693,7 +694,6 @@ func IsIPUniqueExtClients(network string, ip string) bool {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
|
||||||
return isunique
|
return isunique
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -722,7 +722,6 @@ func IsIPUnique(network string, ip string) bool {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
|
||||||
return isunique
|
return isunique
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -750,7 +749,6 @@ func IsIP6Unique(network string, ip string) bool {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
|
||||||
return isunique
|
return isunique
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -46,6 +46,7 @@ type Node struct {
|
|||||||
IsEgressGateway bool `json:"isegressgateway" bson:"isegressgateway"`
|
IsEgressGateway bool `json:"isegressgateway" bson:"isegressgateway"`
|
||||||
IsIngressGateway bool `json:"isingressgateway" bson:"isingressgateway"`
|
IsIngressGateway bool `json:"isingressgateway" bson:"isingressgateway"`
|
||||||
EgressGatewayRange string `json:"gatewayrange" bson:"gatewayrange"`
|
EgressGatewayRange string `json:"gatewayrange" bson:"gatewayrange"`
|
||||||
|
IngressGatewayRange string `json:"ingressgatewayrange" bson:"ingressgatewayrange"`
|
||||||
PostChanges string `json:"postchanges" bson:"postchanges"`
|
PostChanges string `json:"postchanges" bson:"postchanges"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,7 +25,7 @@ func CheckIn(network string) error {
|
|||||||
}
|
}
|
||||||
nodecfg := cfg.Node
|
nodecfg := cfg.Node
|
||||||
servercfg := cfg.Server
|
servercfg := cfg.Server
|
||||||
fmt.Println("Checking into server: " + servercfg.GRPCAddress)
|
fmt.Println("Checking into server at " + servercfg.GRPCAddress)
|
||||||
|
|
||||||
setupcheck := true
|
setupcheck := true
|
||||||
ipchange := false
|
ipchange := false
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package functions
|
package functions
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"bytes"
|
"bytes"
|
||||||
"github.com/gravitl/netmaker/netclient/config"
|
"github.com/gravitl/netmaker/netclient/config"
|
||||||
@@ -9,6 +10,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"errors"
|
"errors"
|
||||||
|
"github.com/davecgh/go-spew/spew"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Register(cfg config.GlobalConfig) error {
|
func Register(cfg config.GlobalConfig) error {
|
||||||
@@ -27,7 +29,9 @@ func Register(cfg config.GlobalConfig) error {
|
|||||||
}
|
}
|
||||||
jsonbytes := []byte(jsonstring)
|
jsonbytes := []byte(jsonstring)
|
||||||
body := bytes.NewBuffer(jsonbytes)
|
body := bytes.NewBuffer(jsonbytes)
|
||||||
res, err := http.Post("http:/"+cfg.Client.ServerEndpoint+"/api/register","application/json",body)
|
log.Println(jsonstring)
|
||||||
|
log.Println("http://"+cfg.Client.ServerEndpoint+"/api/client/register","application/json")
|
||||||
|
res, err := http.Post("http://"+cfg.Client.ServerEndpoint+"/api/intclient/register","application/json",body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -40,7 +44,8 @@ func Register(cfg config.GlobalConfig) error {
|
|||||||
}
|
}
|
||||||
var wgclient models.ServerClient
|
var wgclient models.ServerClient
|
||||||
json.Unmarshal(bodyBytes, &wgclient)
|
json.Unmarshal(bodyBytes, &wgclient)
|
||||||
err = config.ModGlobalConfig(wgclient)
|
spew.Dump(wgclient)
|
||||||
|
err = config.ModGlobalConfig(wgclient)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@@ -101,7 +101,7 @@ func ConfigureSystemD(network string) error {
|
|||||||
|
|
||||||
|
|
||||||
systemservice := `[Unit]
|
systemservice := `[Unit]
|
||||||
Description=Regularly checks for updates in peers and local config
|
Description=network check for remote peers and local config
|
||||||
Wants=netclient.timer
|
Wants=netclient.timer
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
@@ -49,7 +49,7 @@ func InitGRPCWireguard(client models.ServerClient) error {
|
|||||||
}
|
}
|
||||||
cmdIPDevLinkAdd := exec.Command("ip","link", "add", "dev", ifacename, "type", "wireguard" )
|
cmdIPDevLinkAdd := exec.Command("ip","link", "add", "dev", ifacename, "type", "wireguard" )
|
||||||
cmdIPAddrAdd := exec.Command("ip", "address", "add", "dev", ifacename, client.Address+"/24")
|
cmdIPAddrAdd := exec.Command("ip", "address", "add", "dev", ifacename, client.Address+"/24")
|
||||||
cmdIPAddr6Add := exec.Command("ip", "address", "add", "dev", ifacename, client.Address+"/24")
|
cmdIPAddr6Add := exec.Command("ip", "address", "add", "dev", ifacename, client.Address6+"/64")
|
||||||
currentiface, err := net.InterfaceByName(ifacename)
|
currentiface, err := net.InterfaceByName(ifacename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = cmdIPDevLinkAdd.Run()
|
err = cmdIPDevLinkAdd.Run()
|
||||||
@@ -58,6 +58,7 @@ func InitGRPCWireguard(client models.ServerClient) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
match := false
|
match := false
|
||||||
|
match6 := false
|
||||||
addrs, _ := currentiface.Addrs()
|
addrs, _ := currentiface.Addrs()
|
||||||
|
|
||||||
//Add IPv4Address (make into separate function)
|
//Add IPv4Address (make into separate function)
|
||||||
@@ -65,30 +66,28 @@ func InitGRPCWireguard(client models.ServerClient) error {
|
|||||||
if strings.Contains(a.String(), client.Address){
|
if strings.Contains(a.String(), client.Address){
|
||||||
match = true
|
match = true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if !match {
|
|
||||||
err = cmdIPAddrAdd.Run()
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Error adding address")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Add IPv6 Address (make into separate function)
|
|
||||||
for _, a := range addrs {
|
|
||||||
if strings.Contains(a.String(), client.Address6){
|
if strings.Contains(a.String(), client.Address6){
|
||||||
match = true
|
match6 = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !match {
|
if !match && client.Address != "" {
|
||||||
|
err = cmdIPAddrAdd.Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error adding ipv4 address")
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !match6 && client.Address6 !=""{
|
||||||
err = cmdIPAddr6Add.Run()
|
err = cmdIPAddr6Add.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Error adding address")
|
log.Println("Error adding ipv6 address")
|
||||||
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var peers []wgtypes.PeerConfig
|
var peers []wgtypes.PeerConfig
|
||||||
var peeraddr = net.IPNet{
|
var peeraddr = net.IPNet{
|
||||||
IP: net.ParseIP(client.ServerAddress),
|
IP: net.ParseIP(client.ServerAddress),
|
||||||
Mask: net.CIDRMask(32, 32),
|
Mask: net.CIDRMask(64, 128),
|
||||||
}
|
}
|
||||||
var allowedips []net.IPNet
|
var allowedips []net.IPNet
|
||||||
allowedips = append(allowedips, peeraddr)
|
allowedips = append(allowedips, peeraddr)
|
||||||
@@ -130,7 +129,6 @@ func InitGRPCWireguard(client models.ServerClient) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig, hasGateway bool, gateways []string) error {
|
func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig, hasGateway bool, gateways []string) error {
|
||||||
|
|
||||||
ipExec, err := exec.LookPath("ip")
|
ipExec, err := exec.LookPath("ip")
|
||||||
|
Reference in New Issue
Block a user