Browse Source

netclient for ingress gateway now working

afeiszli 4 years ago
parent
commit
c27c863d6a

+ 3 - 1
controllers/extClientHttpController.go

@@ -275,6 +275,7 @@ func CreateExtClient(extclient models.ExtClient) error {
 		}
 		extclient.Address = newAddress
 	}
+
         if extclient.ClientID == "" {
                 clientid := StringWithCharset(7, charset)
                 clientname := "client-" + clientid
@@ -314,7 +315,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
 	extclient.Network = networkName
 	extclient.IngressGatewayID = macaddress
 	node, err := functions.GetNodeByMacAddress(networkName, macaddress)
-        if err != nil {
+	if err != nil {
                 returnErrorResponse(w, r, formatError(err, "internal"))
                 return
         }
@@ -331,6 +332,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 	err = CreateExtClient(extclient)
+
 	if err != nil {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return

+ 4 - 4
controllers/serverClient.go

@@ -21,7 +21,7 @@ import (
 	"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/register", securityCheck(http.HandlerFunc(registerClient))).Methods("POST")
@@ -116,7 +116,7 @@ Endpoint = %s
         json.NewEncoder(w).Encode(extclient)
 }
 
-func RegisterClient(client models.ServerClient) (models.ServerClient, error) {
+func RegisterClient(client models.IntClient) (models.IntClient, error) {
 	if client.PrivateKey == "" {
 		privateKey, err := wgtypes.GeneratePrivateKey()
 		if err != nil {
@@ -145,7 +145,7 @@ func RegisterClient(client models.ServerClient) (models.ServerClient, error) {
 	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)
 	// insert our network into the network table
 	_, 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.",
         }
 
-        var clientreq models.ServerClient
+        var clientreq models.IntClient
 
         //get node from body of request
         err := json.NewDecoder(r.Body).Decode(&clientreq)

+ 1 - 3
functions/helpers.go

@@ -605,6 +605,7 @@ func UniqueAddress(networkName string) (string, error) {
 			return ip.String(), err
 		}
 	}
+
 	//TODO
 	err1 := errors.New("ERROR: No unique addresses available. Check network subnet.")
 	return "W1R3: NO UNIQUE ADDRESSES AVAILABLE", err1
@@ -693,7 +694,6 @@ func IsIPUniqueExtClients(network string, ip string) bool {
         defer cancel()
 
         if err != nil {
-                fmt.Println(err)
                 return isunique
         }
 
@@ -722,7 +722,6 @@ func IsIPUnique(network string, ip string) bool {
 	defer cancel()
 
 	if err != nil {
-		fmt.Println(err)
 		return isunique
 	}
 
@@ -750,7 +749,6 @@ func IsIP6Unique(network string, ip string) bool {
 	defer cancel()
 
 	if err != nil {
-		fmt.Println(err)
 		return isunique
 	}
 

+ 1 - 0
models/node.go

@@ -46,6 +46,7 @@ type Node struct {
 	IsEgressGateway           bool               `json:"isegressgateway" bson:"isegressgateway"`
 	IsIngressGateway           bool               `json:"isingressgateway" bson:"isingressgateway"`
 	EgressGatewayRange        string             `json:"gatewayrange" bson:"gatewayrange"`
+	IngressGatewayRange        string             `json:"ingressgatewayrange" bson:"ingressgatewayrange"`
 	PostChanges         string             `json:"postchanges" bson:"postchanges"`
 }
 

+ 1 - 1
netclient/functions/checkin.go

@@ -25,7 +25,7 @@ func CheckIn(network string) error {
         }
 	nodecfg := cfg.Node
 	servercfg := cfg.Server
-	fmt.Println("Checking into server: " + servercfg.GRPCAddress)
+	fmt.Println("Checking into server at " + servercfg.GRPCAddress)
 
 	setupcheck := true
 	ipchange := false

+ 7 - 2
netclient/functions/register.go

@@ -1,6 +1,7 @@
 package functions
 
 import (
+	"log"
 	"io/ioutil"
 	"bytes"
         "github.com/gravitl/netmaker/netclient/config"
@@ -9,6 +10,7 @@ import (
 	"encoding/json"
 	"net/http"
 	"errors"
+	"github.com/davecgh/go-spew/spew"
 )
 
 func Register(cfg config.GlobalConfig) error {
@@ -27,7 +29,9 @@ func Register(cfg config.GlobalConfig) error {
         }
 	jsonbytes := []byte(jsonstring)
 	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 {
                 return err
         }
@@ -40,7 +44,8 @@ func Register(cfg config.GlobalConfig) error {
 	}
 	var wgclient models.ServerClient
 	json.Unmarshal(bodyBytes, &wgclient)
-        err = config.ModGlobalConfig(wgclient)
+        spew.Dump(wgclient)
+	err = config.ModGlobalConfig(wgclient)
         if err != nil {
                 return err
         }

+ 1 - 1
netclient/local/local.go

@@ -101,7 +101,7 @@ func ConfigureSystemD(network string) error {
 
 
 	systemservice := `[Unit]
-Description=Regularly checks for updates in peers and local config
+Description=network check for remote peers and local config
 Wants=netclient.timer
 
 [Service]

+ 12 - 14
netclient/wireguard/kernel.go

@@ -49,7 +49,7 @@ func InitGRPCWireguard(client models.ServerClient) error {
         }
         cmdIPDevLinkAdd := exec.Command("ip","link", "add", "dev", ifacename, "type",  "wireguard" )
         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)
         if err != nil {
                 err = cmdIPDevLinkAdd.Run()
@@ -58,6 +58,7 @@ func InitGRPCWireguard(client models.ServerClient) error {
 	        }
         }
         match := false
+        match6 := false
         addrs, _ := currentiface.Addrs()
 
 	//Add IPv4Address (make into separate function)
@@ -65,30 +66,28 @@ func InitGRPCWireguard(client models.ServerClient) error {
                 if strings.Contains(a.String(), client.Address){
                         match = true
                 }
+                if strings.Contains(a.String(), client.Address6){
+                        match6 = true
+                }
         }
-        if !match {
+        if !match && client.Address != "" {
 		err = cmdIPAddrAdd.Run()
 	        if  err  !=  nil {
-	                log.Println("Error adding address")
+	                log.Println("Error adding ipv4 address")
+		fmt.Println(err)
 	        }
         }
-
-	//Add IPv6 Address (make into separate function)
-        for _, a := range addrs {
-                if strings.Contains(a.String(), client.Address6){
-                        match = true
-                }
-        }
-        if !match {
+        if !match6 && client.Address6 !=""{
                 err = cmdIPAddr6Add.Run()
                 if  err  !=  nil {
-                        log.Println("Error adding address")
+                        log.Println("Error adding ipv6 address")
+                fmt.Println(err)
                 }
         }
 	var peers []wgtypes.PeerConfig
         var peeraddr = net.IPNet{
                  IP: net.ParseIP(client.ServerAddress),
-                 Mask: net.CIDRMask(32, 32),
+                 Mask: net.CIDRMask(64, 128),
         }
 	var allowedips []net.IPNet
         allowedips = append(allowedips, peeraddr)
@@ -130,7 +129,6 @@ func InitGRPCWireguard(client models.ServerClient) error {
 	return err
 }
 
-
 func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig, hasGateway bool, gateways []string) error  {
 
 	ipExec, err := exec.LookPath("ip")