Browse Source

netclient grpc registration working

afeiszli 4 years ago
parent
commit
afa4f1e8bb

+ 1 - 0
models/intclient.go

@@ -9,6 +9,7 @@ type IntClient struct {
 	Address6        string             `json:"address6" bson:"address6"`
 	Network        string             `json:"network" bson:"network"`
 	ServerEndpoint  string             `json:"serverendpoint" bson:"serverendpoint"`
+        ServerAPIEndpoint  string             `json:"serverapiendpoint" bson:"serverapiendpoint"`
 	ServerAddress  string             `json:"serveraddress" bson:"serveraddress"`
 	ServerPort     string             `json:"serverport" bson:"serverport"`
 	ServerKey      string             `json:"serverkey" bson:"serverkey"`

+ 9 - 0
netclient/command/commands.go

@@ -103,3 +103,12 @@ func Uninstall(cfg config.GlobalConfig) error {
 	err = functions.Unregister(cfg)
         return err
 }
+func Reregister(cfg config.GlobalConfig) error {
+        err := functions.Reregister(cfg)
+        return err
+}
+func Unregister(cfg config.GlobalConfig) error {
+        err := functions.Unregister(cfg)
+        return err
+}
+

+ 2 - 1
netclient/functions/join.go

@@ -24,6 +24,7 @@ func JoinNetwork(cfg config.ClientConfig) error {
 		   err := errors.New("ALREADY_INSTALLED. Netclient appears to already be installed for cfg.Network " + cfg.Network + ". To re-install, please remove by executing 'sudo netclient -c remove -n " + cfg.Network + "'. Then re-run the install command.")
 		return err
 	}
+	log.Println("attempting to joining " + cfg.Network + " at " + cfg.Server.GRPCAddress)
 	err := config.Write(&cfg, cfg.Network)
 	if err != nil {
 		return err
@@ -42,7 +43,7 @@ func JoinNetwork(cfg config.ClientConfig) error {
                         return err
                 }
 		_, localrange, err := net.ParseCIDR(cfg.Node.LocalRange)
-                if err != nil {
+		if err != nil {
                         return err
                 }
 

+ 31 - 8
netclient/functions/register.go

@@ -2,6 +2,7 @@ package functions
 
 import (
 	"time"
+	"os"
 	"log"
 	"io/ioutil"
 	"bytes"
@@ -17,6 +18,14 @@ import (
 
 func Register(cfg config.GlobalConfig) error {
 
+	_, err := os.Stat("/etc/netclient")
+        if os.IsNotExist(err) {
+                os.Mkdir("/etc/netclient", 744)
+        } else if err != nil {
+                log.Println("couldnt find or create /etc/netclient")
+                return err
+        }
+
         postclient := &models.IntClient{
                 AccessKey: cfg.Client.AccessKey,
                 PublicKey: cfg.Client.PublicKey,
@@ -31,8 +40,7 @@ func Register(cfg config.GlobalConfig) error {
         }
 	jsonbytes := []byte(jsonstring)
 	body := bytes.NewBuffer(jsonbytes)
-	log.Println(jsonstring)
-	log.Println("http://"+cfg.Client.ServerEndpoint+"/api/client/register","application/json")
+	log.Println("registering to http://"+cfg.Client.ServerAPIEndpoint+"/api/client/register")
 	res, err := http.Post("http://"+cfg.Client.ServerEndpoint+"/api/intclient/register","application/json",body)
         if err != nil {
                 return err
@@ -62,21 +70,36 @@ func Register(cfg config.GlobalConfig) error {
 
 func Unregister(cfg config.GlobalConfig) error {
 	client := &http.Client{ Timeout: 7 * time.Second,}
-	req, err := http.NewRequest("DELETE", "http://"+cfg.Client.ServerEndpoint+"/api/intclient/"+cfg.Client.ClientID, nil)
+	req, err := http.NewRequest("DELETE", "http://"+cfg.Client.ServerAPIEndpoint+"/api/intclient/"+cfg.Client.ClientID, nil)
         if err != nil {
                 return err
         }
 	res, err := client.Do(req)
         if res == nil {
+                return errors.New("server not reachable at " + "http://"+cfg.Client.ServerAPIEndpoint+"/api/intclient/"+cfg.Client.ClientID)
+
+	} else if res.StatusCode != http.StatusOK {
+                return errors.New("request to server failed: " + res.Status)
+                defer res.Body.Close()
+	} else {
 	        err = local.WipeGRPCClient()
 		if err == nil {
 			log.Println("successfully removed grpc client interface")
 		}
-	} else {
-		if res.StatusCode != http.StatusOK {
-			return errors.New("request to server failed: " + res.Status)
-			defer res.Body.Close()
-		}
 	}
 	return err
 }
+
+func Reregister(cfg config.GlobalConfig) error {
+	err := Unregister(cfg)
+	if err != nil {
+		log.Println("failed to un-register")
+		return err
+	}
+	err = Register(cfg)
+	if err != nil {
+		log.Println("failed to re-register after unregistering")
+	}
+	return err
+}
+

+ 33 - 0
netclient/main.go

@@ -199,6 +199,22 @@ func main() {
                 return err
             },
         },
+        {
+            Name:  "reregister",
+            Usage: "Re-Register with Netmaker Server for secure GRPC communications.",
+            Flags: cliFlags,
+            Action: func(c *cli.Context) error {
+                cfg, err := config.ReadGlobalConfig()
+                if err != nil {
+                        return err
+                }
+                var gconf config.GlobalConfig
+                gconf = *cfg
+
+		err = command.Reregister(gconf)
+                return err
+            },
+        },
 	{
             Name:  "join",
             Usage: "Join a Netmaker network.",
@@ -312,6 +328,23 @@ func main() {
                 return err
             },
         },
+        {
+            Name:  "unregister",
+            Usage: "Unregister the netclient from secure server GRPC.",
+            Flags: cliFlags,
+            // the action, or code that will be executed when
+            // we execute our `ns` command
+            Action: func(c *cli.Context) error {
+                cfg, err := config.ReadGlobalConfig()
+                if err != nil {
+                        return err
+                }
+                var gconf config.GlobalConfig
+                gconf = *cfg
+                err = command.Unregister(gconf)
+                return err
+            },
+        },
     }
 
     // start our application

+ 13 - 4
netclient/wireguard/kernel.go

@@ -48,9 +48,9 @@ func InitGRPCWireguard(client models.IntClient) error {
                 return errors.New("no address to configure")
         }
         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.Address6+"/64")
-        currentiface, err := net.InterfaceByName(ifacename)
+	cmdIPAddrAdd := 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()
 	        if  err  !=  nil && !strings.Contains(err.Error(), "exists") {
@@ -87,7 +87,7 @@ func InitGRPCWireguard(client models.IntClient) error {
 	var peers []wgtypes.PeerConfig
         var peeraddr = net.IPNet{
                  IP: net.ParseIP(client.ServerAddress),
-                 Mask: net.CIDRMask(64, 128),
+                 Mask: net.CIDRMask(32, 32),
         }
 	var allowedips []net.IPNet
         allowedips = append(allowedips, peeraddr)
@@ -126,6 +126,15 @@ func InitGRPCWireguard(client models.IntClient) error {
                         log.Printf("This is inconvenient: %v", err)
                 }
         }
+
+        cmdIPLinkUp := exec.Command("ip", "link", "set", "up", "dev", ifacename)
+        cmdIPLinkDown := exec.Command("ip", "link", "set", "down", "dev", ifacename)
+        err = cmdIPLinkDown.Run()
+        err = cmdIPLinkUp.Run()
+        if  err  !=  nil {
+                return err
+        }
+
 	return err
 }