Browse Source

Merge pull request #166 from gravitl/feature_v0.5_clientgrpc

Feature v0.5 clientgrpc
Alex 4 years ago
parent
commit
4c3b7c1d2c

+ 1 - 1
compose/docker-compose.yml

@@ -44,7 +44,7 @@ services:
     ports:
     ports:
       - "80:80"
       - "80:80"
     environment:
     environment:
-      BACKEND_URL: "http://3.235.190.90:8081"
+      BACKEND_URL: "http://HOST_IP:8081"
   coredns:
   coredns:
     depends_on:
     depends_on:
       - netmaker 
       - netmaker 

+ 1 - 1
config/dnsconfig/netmaker.hosts

@@ -1 +1 @@
-10.10.10.1       nethub.default
+10.10.10.1       netmaker.default

+ 15 - 11
controllers/intClientHttpController.go

@@ -1,7 +1,8 @@
 package controller
 package controller
 
 
 import (
 import (
-//	"fmt"
+	//	"fmt"
+	// "github.com/davecgh/go-spew/spew"
 	"errors"
 	"errors"
 	"context"
 	"context"
 	"encoding/json"
 	"encoding/json"
@@ -21,7 +22,6 @@ func intClientHandlers(r *mux.Router) {
 	r.HandleFunc("/api/intclient/{clientid}", securityCheck(http.HandlerFunc(getIntClient))).Methods("GET")
 	r.HandleFunc("/api/intclient/{clientid}", securityCheck(http.HandlerFunc(getIntClient))).Methods("GET")
 	r.HandleFunc("/api/intclients", securityCheck(http.HandlerFunc(getAllIntClients))).Methods("GET")
 	r.HandleFunc("/api/intclients", securityCheck(http.HandlerFunc(getAllIntClients))).Methods("GET")
         r.HandleFunc("/api/intclients/deleteall", securityCheck(http.HandlerFunc(deleteAllIntClients))).Methods("DELETE")
         r.HandleFunc("/api/intclients/deleteall", securityCheck(http.HandlerFunc(deleteAllIntClients))).Methods("DELETE")
-        r.HandleFunc("/api/intclient/{clientid}", securityCheck(http.HandlerFunc(deleteIntClient))).Methods("DELETE")
         r.HandleFunc("/api/intclient/{clientid}", securityCheck(http.HandlerFunc(updateIntClient))).Methods("PUT")
         r.HandleFunc("/api/intclient/{clientid}", securityCheck(http.HandlerFunc(updateIntClient))).Methods("PUT")
 	r.HandleFunc("/api/intclient/register", http.HandlerFunc(registerIntClient)).Methods("POST")
 	r.HandleFunc("/api/intclient/register", http.HandlerFunc(registerIntClient)).Methods("POST")
 	r.HandleFunc("/api/intclient/{clientid}", http.HandlerFunc(deleteIntClient)).Methods("DELETE")
 	r.HandleFunc("/api/intclient/{clientid}", http.HandlerFunc(deleteIntClient)).Methods("DELETE")
@@ -138,13 +138,17 @@ func RegisterIntClient(client models.IntClient) (models.IntClient, error) {
 		client.Address = newAddress
 		client.Address = newAddress
 	}
 	}
         if client.Network == "" { client.Network = "comms" }
         if client.Network == "" { client.Network = "comms" }
-
-	wgconfig := servercfg.GetWGConfig()
-        client.ServerPublicEndpoint = servercfg.GetAPIHost()
-        client.ServerAPIPort = servercfg.GetAPIPort()
-        client.ServerPrivateAddress = wgconfig.GRPCWGAddress
-        client.ServerWGPort = wgconfig.GRPCWGPort
-        client.ServerGRPCPort = servercfg.GetGRPCPort()
+	server, err := serverctl.GetServerWGConf()
+        //spew.Dump(server)
+	if err != nil {
+                return client, err
+        }
+	client.ServerPublicEndpoint = server.ServerPublicEndpoint
+        client.ServerAPIPort = server.ServerAPIPort
+        client.ServerPrivateAddress = server.ServerPrivateAddress
+        client.ServerWGPort = server.ServerWGPort
+        client.ServerGRPCPort = server.ServerGRPCPort
+        client.ServerKey = server.ServerKey
 
 
         if client.ClientID == "" {
         if client.ClientID == "" {
                 clientid := StringWithCharset(7, charset)
                 clientid := StringWithCharset(7, charset)
@@ -152,11 +156,11 @@ func RegisterIntClient(client models.IntClient) (models.IntClient, error) {
                 client.ClientID = clientname
                 client.ClientID = clientname
         }
         }
 
 
-
+	//spew.Dump(client)
 	collection := mongoconn.Client.Database("netmaker").Collection("intclients")
 	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)
 	defer cancel()
 	defer cancel()
 
 
 	if err != nil {
 	if err != nil {

+ 2 - 3
controllers/nodeGrpcController.go

@@ -3,7 +3,7 @@ package controller
 import (
 import (
 	"context"
 	"context"
 	"fmt"
 	"fmt"
-
+	"log"
 	"github.com/gravitl/netmaker/functions"
 	"github.com/gravitl/netmaker/functions"
 	nodepb "github.com/gravitl/netmaker/grpc"
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
@@ -162,7 +162,7 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.CreateNo
 	if err != nil {
 	if err != nil {
 		return nil, status.Errorf(codes.NotFound, fmt.Sprintf("Could not find network: %v", err))
 		return nil, status.Errorf(codes.NotFound, fmt.Sprintf("Could not find network: %v", err))
 	} else {
 	} else {
-		fmt.Println("Creating node in network " + network.NetID)
+		log.Println("Creating node in network " + network.NetID)
 	}
 	}
 
 
 	if !validKey {
 	if !validKey {
@@ -356,7 +356,6 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.UpdateNo
 }
 }
 
 
 func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.DeleteNodeReq) (*nodepb.DeleteNodeRes, error) {
 func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.DeleteNodeReq) (*nodepb.DeleteNodeRes, error) {
-	fmt.Println("beginning node delete")
 	macaddress := req.GetMacaddress()
 	macaddress := req.GetMacaddress()
 	network := req.GetNetworkName()
 	network := req.GetNetworkName()
 
 

+ 26 - 1
controllers/serverHttpController.go

@@ -14,6 +14,7 @@ import (
 func serverHandlers(r *mux.Router) {
 func serverHandlers(r *mux.Router) {
     r.HandleFunc("/api/server/addnetwork/{network}", securityCheckServer(http.HandlerFunc(addNetwork))).Methods("POST")
     r.HandleFunc("/api/server/addnetwork/{network}", securityCheckServer(http.HandlerFunc(addNetwork))).Methods("POST")
     r.HandleFunc("/api/server/getconfig", securityCheckServer(http.HandlerFunc(getConfig))).Methods("GET")
     r.HandleFunc("/api/server/getconfig", securityCheckServer(http.HandlerFunc(getConfig))).Methods("GET")
+    r.HandleFunc("/api/server/getwgconfig", securityCheckServer(http.HandlerFunc(getWGConfig))).Methods("GET")
     r.HandleFunc("/api/server/removenetwork/{network}", securityCheckServer(http.HandlerFunc(removeNetwork))).Methods("DELETE")
     r.HandleFunc("/api/server/removenetwork/{network}", securityCheckServer(http.HandlerFunc(removeNetwork))).Methods("DELETE")
 }
 }
 
 
@@ -84,11 +85,35 @@ func getConfig(w http.ResponseWriter, r *http.Request) {
 
 
         // get params
         // get params
 
 
-        scfg := servercfg.GetConfig()
+        scfg := servercfg.GetServerConfig()
         w.WriteHeader(http.StatusOK)
         w.WriteHeader(http.StatusOK)
         json.NewEncoder(w).Encode(scfg)
         json.NewEncoder(w).Encode(scfg)
 }
 }
 
 
+func getWGConfig(w http.ResponseWriter, r *http.Request) {
+        // Set header
+        w.Header().Set("Content-Type", "application/json")
+
+        // get params
+
+        wgcfg := servercfg.GetWGConfig()
+        w.WriteHeader(http.StatusOK)
+        json.NewEncoder(w).Encode(wgcfg)
+}
+
+/*
+func getMongoConfig(w http.ResponseWriter, r *http.Request) {
+        // Set header
+        w.Header().Set("Content-Type", "application/json")
+
+        // get params
+
+        mcfg := servercfg.GetMongoConfig()
+        w.WriteHeader(http.StatusOK)
+        json.NewEncoder(w).Encode(mcfg)
+}
+*/
+
 func addNetwork(w http.ResponseWriter, r *http.Request) {
 func addNetwork(w http.ResponseWriter, r *http.Request) {
         // Set header
         // Set header
         w.Header().Set("Content-Type", "application/json")
         w.Header().Set("Content-Type", "application/json")

+ 1 - 2
functions/helpers.go

@@ -44,8 +44,7 @@ func CreateServerToken(netID string) (string, error) {
 	if *network.IsLocal {
 	if *network.IsLocal {
 		privAddr = network.LocalRange
 		privAddr = network.LocalRange
 	}
 	}
-
-        accessstringdec := " " + "|"+ address + "|" + address + "|" + netID + "|" + accesskey.Value + "|" + privAddr
+        accessstringdec := address + "|"+ address + "|" + address + "|" + netID + "|" + accesskey.Value + "|" + privAddr
 
 
 	accesskey.AccessString = base64.StdEncoding.EncodeToString([]byte(accessstringdec))
 	accesskey.AccessString = base64.StdEncoding.EncodeToString([]byte(accessstringdec))
 
 

+ 3 - 4
main.go

@@ -10,7 +10,6 @@ import (
     "github.com/gravitl/netmaker/serverctl"
     "github.com/gravitl/netmaker/serverctl"
     "github.com/gravitl/netmaker/mongoconn"
     "github.com/gravitl/netmaker/mongoconn"
     "github.com/gravitl/netmaker/functions"
     "github.com/gravitl/netmaker/functions"
-    "fmt"
     "os"
     "os"
     "os/exec"
     "os/exec"
     "net"
     "net"
@@ -33,12 +32,12 @@ func main() {
 		output, err := cmd.Output()
 		output, err := cmd.Output()
 
 
 		if err != nil {
 		if err != nil {
-			fmt.Println("Error running 'id -u' for prereq check. Please investigate or disable client mode.")
+			log.Println("Error running 'id -u' for prereq check. Please investigate or disable client mode.")
 			log.Fatal(err)
 			log.Fatal(err)
 		}
 		}
 		i, err := strconv.Atoi(string(output[:len(output)-1]))
 		i, err := strconv.Atoi(string(output[:len(output)-1]))
 		if err != nil {
 		if err != nil {
-                        fmt.Println("Error retrieving uid from 'id -u' for prereq check. Please investigate or disable client mode.")
+                        log.Println("Error retrieving uid from 'id -u' for prereq check. Please investigate or disable client mode.")
 			log.Fatal(err)
 			log.Fatal(err)
 		}
 		}
 		if i != 0 {
 		if i != 0 {
@@ -147,7 +146,7 @@ func runGRPC(wg *sync.WaitGroup, installserver bool) {
         log.Println("Agent Server succesfully started on port " + grpcport + " (gRPC)")
         log.Println("Agent Server succesfully started on port " + grpcport + " (gRPC)")
 
 
 	if installserver {
 	if installserver {
-			fmt.Println("Adding server to default network")
+			log.Println("Adding server to default network")
                         success, err := serverctl.AddNetwork("default")
                         success, err := serverctl.AddNetwork("default")
                         if err != nil {
                         if err != nil {
                                 log.Printf("Error adding to default network: %v", err)
                                 log.Printf("Error adding to default network: %v", err)

+ 14 - 14
models/intclient.go

@@ -1,18 +1,18 @@
 package models
 package models
 
 
 type IntClient struct {
 type IntClient struct {
-	ClientID       string             `json:"clientid" bson:"clientid"`
-	PrivateKey     string             `json:"privatekey" bson:"privatekey"`
-	PublicKey      string             `json:"publickey" bson:"publickey"`
-	AccessKey      string             `json:"accesskey" bson:"accesskey"`
-	Address        string             `json:"address" bson:"address"`
-	Address6       string             `json:"address6" bson:"address6"`
-	Network        string             `json:"network" bson:"network"`
-	ServerPublicEndpoint  string `json:"serverwgendpoint" bson:"serverwgendpoint"`
-	ServerAPIPort  string      `json:"serverapiendpoint" bson:"serverapiendpoint"`
-	ServerPrivateAddress  string       `json:"serveraddress" bson:"serveraddress"`
-	ServerWGPort     string             `json:"serverport" bson:"serverport"`
-	ServerGRPCPort     string             `json:"serverport" bson:"serverport"`
-	ServerKey      string             `json:"serverkey" bson:"serverkey"`
-	IsServer       string             `json:"isserver" bson:"isserver"`
+        ClientID       string             `json:"clientid" bson:"clientid"`
+        PrivateKey     string             `json:"privatekey" bson:"privatekey"`
+        PublicKey      string             `json:"publickey" bson:"publickey"`
+        AccessKey      string             `json:"accesskey" bson:"accesskey"`
+        Address        string             `json:"address" bson:"address"`
+        Address6       string             `json:"address6" bson:"address6"`
+        Network        string             `json:"network" bson:"network"`
+        ServerPublicEndpoint  string `json:"serverpublicendpoint" bson:"serverpublicendpoint"`
+        ServerAPIPort  string      `json:"serverapiport" bson:"serverapiport"`
+        ServerPrivateAddress  string       `json:"serverprivateaddress" bson:"serverprivateaddress"`
+        ServerWGPort     string             `json:"serverwgport" bson:"serverwgport"`
+        ServerGRPCPort     string             `json:"servergrpcport" bson:"servergrpcport"`
+        ServerKey      string             `json:"serverkey" bson:"serverkey"`
+        IsServer       string             `json:"isserver" bson:"isserver"`
 }
 }

+ 0 - 4
netclient/command/commands.go

@@ -135,10 +135,6 @@ func Uninstall(cfg config.GlobalConfig) error {
 	err = functions.Unregister(cfg)
 	err = functions.Unregister(cfg)
         return err
         return err
 }
 }
-func Reregister(cfg config.GlobalConfig) error {
-        err := functions.Reregister(cfg)
-        return err
-}
 func Unregister(cfg config.GlobalConfig) error {
 func Unregister(cfg config.GlobalConfig) error {
         err := functions.Unregister(cfg)
         err := functions.Unregister(cfg)
         return err
         return err

+ 28 - 21
netclient/config/config.go

@@ -273,6 +273,13 @@ func ModGlobalConfig(cfg models.IntClient) error{
         if cfg.ServerKey != ""{
         if cfg.ServerKey != ""{
                 modconfig.Client.ServerKey = cfg.ServerKey
                 modconfig.Client.ServerKey = cfg.ServerKey
         }
         }
+        if cfg.AccessKey != ""{
+                modconfig.Client.AccessKey = cfg.AccessKey
+        }
+        if cfg.ClientID != ""{
+                modconfig.Client.ClientID = cfg.ClientID
+        }
+
         err = WriteGlobal(&modconfig)
         err = WriteGlobal(&modconfig)
         return err
         return err
 }
 }
@@ -369,13 +376,14 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, error){
                 }
                 }
                 token := string(tokenbytes)
                 token := string(tokenbytes)
                 tokenvals := strings.Split(token, "|")
                 tokenvals := strings.Split(token, "|")
-                cfg.Server.GRPCAddress = tokenvals[1]
-                cfg.Server.APIAddress = tokenvals[2]
-                cfg.Network = tokenvals[3]
-                cfg.Node.Network = tokenvals[4]
-                cfg.Server.AccessKey = tokenvals[5]
-                cfg.Node.LocalRange = tokenvals[6]
 
 
+		cfg.Server.GRPCAddress = tokenvals[1]
+                cfg.Network = tokenvals[3]
+                cfg.Node.Network = tokenvals[3]
+                cfg.Server.AccessKey = tokenvals[4]
+                if len(tokenvals) > 5 {
+			cfg.Node.LocalRange = tokenvals[5]
+		}
 		if c.String("grpcserver") != "" {
 		if c.String("grpcserver") != "" {
 			cfg.Server.GRPCAddress = c.String("grpcserver")
 			cfg.Server.GRPCAddress = c.String("grpcserver")
 		}
 		}
@@ -405,22 +413,22 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, error){
 	cfg.Node.Password = c.String("password")
 	cfg.Node.Password = c.String("password")
 	cfg.Node.MacAddress = c.String("macaddress")
 	cfg.Node.MacAddress = c.String("macaddress")
 	cfg.Node.LocalAddress = c.String("localaddress")
 	cfg.Node.LocalAddress = c.String("localaddress")
-	cfg.Node.LocalRange = c.String("localrange")
 	cfg.Node.WGAddress = c.String("address")
 	cfg.Node.WGAddress = c.String("address")
 	cfg.Node.WGAddress6 = c.String("addressIPV6")
 	cfg.Node.WGAddress6 = c.String("addressIPV6")
-	cfg.Node.Roaming = c.String("")
-	cfg.Node.DNS = c.String("")
-	cfg.Node.IsLocal = c.String("")
-	cfg.Node.IsDualStack = c.String("")
-	cfg.Node.IsIngressGateway = c.String("")
-	cfg.Node.PostUp = c.String("")
-	cfg.Node.PostDown = c.String("")
-	cfg.Node.Port = int32(c.Int(""))
-	cfg.Node.KeepAlive = int32(c.Int(""))
-	cfg.Node.PublicKey = c.String("")
-	cfg.Node.PrivateKey = c.String("")
-	cfg.Node.Endpoint = c.String("")
-	cfg.Node.IPForwarding = c.String("")
+	cfg.Node.Roaming = c.String("roaming")
+	cfg.Node.DNS = c.String("dns")
+	cfg.Node.IsLocal = c.String("islocal")
+	cfg.Node.IsDualStack = c.String("isdualstack")
+	cfg.Node.PostUp = c.String("postup")
+	cfg.Node.PostDown = c.String("postdown")
+	cfg.Node.Port = int32(c.Int("port"))
+	cfg.Node.KeepAlive = int32(c.Int("keepalive"))
+	cfg.Node.PublicKey = c.String("publickey")
+	cfg.Node.PrivateKey = c.String("privatekey")
+	cfg.Node.Endpoint = c.String("endpoint")
+	cfg.Node.IPForwarding = c.String("ipforwarding")
+	cfg.OperatingSystem = c.String("operatingsystem")
+	cfg.Daemon = c.String("daemon")
 
 
 	return cfg, nil
 	return cfg, nil
 }
 }
@@ -531,4 +539,3 @@ func FileExists(f string) bool {
     }
     }
     return !info.IsDir()
     return !info.IsDir()
 }
 }
-

+ 8 - 6
netclient/functions/common.go

@@ -309,15 +309,17 @@ func LeaveNetwork(network string) error {
 			)
 			)
 			if err != nil {
 			if err != nil {
 				log.Printf("Encountered error deleting node: %v", err)
 				log.Printf("Encountered error deleting node: %v", err)
-				fmt.Println(err)
+				log.Println(err)
 			} else {
 			} else {
-				fmt.Println("delete node " + node.MacAddress + "from remote server on network " + node.Network)
+				log.Println("Removed machine from " + node.Network + " network on remote server")
 			}
 			}
 		}
 		}
 	}
 	}
 	err = local.WipeLocal(network)
 	err = local.WipeLocal(network)
 	if err != nil {
 	if err != nil {
                 log.Printf("Unable to wipe local config: %v", err)
                 log.Printf("Unable to wipe local config: %v", err)
+	} else {
+		log.Println("Removed " + node.Network + " network locally")
 	}
 	}
 	if cfg.Daemon != "off" {
 	if cfg.Daemon != "off" {
 		err =  local.RemoveSystemDServices(network)
 		err =  local.RemoveSystemDServices(network)
@@ -336,13 +338,13 @@ func DeleteInterface(ifacename string, postdown string) error{
         }
         }
         err = cmdIPLinkDel.Run()
         err = cmdIPLinkDel.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println(err)
+                log.Println(err)
         }
         }
         if postdown != "" {
         if postdown != "" {
                 runcmds := strings.Split(postdown, "; ")
                 runcmds := strings.Split(postdown, "; ")
                 err = local.RunCmds(runcmds)
                 err = local.RunCmds(runcmds)
                 if err != nil {
                 if err != nil {
-                        fmt.Println("Error encountered running PostDown: " + err.Error())
+                        log.Println("Error encountered running PostDown: " + err.Error())
                 }
                 }
         }
         }
         return err
         return err
@@ -367,9 +369,9 @@ func List() error{
 					PublicEndpoint: cfg.Node.Endpoint,
 					PublicEndpoint: cfg.Node.Endpoint,
 				}
 				}
 			jsoncfg, _ := json.Marshal(listconfig)
 			jsoncfg, _ := json.Marshal(listconfig)
-			fmt.Println(network + ": " + string(jsoncfg))
+			log.Println(network + ": " + string(jsoncfg))
 		} else {
 		} else {
-			fmt.Println(network + ": Could not retrieve network configuration.")
+			log.Println(network + ": Could not retrieve network configuration.")
 		}
 		}
 	}
 	}
 	return nil
 	return nil

+ 33 - 3
netclient/functions/join.go

@@ -6,6 +6,8 @@ import (
 	"context"
 	"context"
 	"log"
 	"log"
 	"net"
 	"net"
+	"math/rand"
+	"time"
         "github.com/gravitl/netmaker/netclient/config"
         "github.com/gravitl/netmaker/netclient/config"
         "github.com/gravitl/netmaker/netclient/wireguard"
         "github.com/gravitl/netmaker/netclient/wireguard"
         "github.com/gravitl/netmaker/netclient/server"
         "github.com/gravitl/netmaker/netclient/server"
@@ -20,7 +22,7 @@ import (
 func JoinNetwork(cfg config.ClientConfig) error {
 func JoinNetwork(cfg config.ClientConfig) error {
 
 
 	hasnet := local.HasNetwork(cfg.Network)
 	hasnet := local.HasNetwork(cfg.Network)
-	if hasnet { 
+	if hasnet {
 		   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.")
 		   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
 		return err
 	}
 	}
@@ -35,9 +37,12 @@ func JoinNetwork(cfg config.ClientConfig) error {
 		return err
 		return err
         }
         }
         defer wgclient.Close()
         defer wgclient.Close()
-
+	if cfg.Node.Network == "" {
+		return errors.New("no network provided")
+	}
 	if cfg.Node.LocalRange != "" {
 	if cfg.Node.LocalRange != "" {
 	if cfg.Node.LocalAddress == "" {
 	if cfg.Node.LocalAddress == "" {
+		log.Println("local vpn, getting local address from range: " + cfg.Node.LocalRange)
 		ifaces, err := net.Interfaces()
 		ifaces, err := net.Interfaces()
                 if err != nil {
                 if err != nil {
                         return err
                         return err
@@ -90,6 +95,9 @@ func JoinNetwork(cfg config.ClientConfig) error {
 		cfg.Node.LocalAddress = local
 		cfg.Node.LocalAddress = local
 	}
 	}
 	}
 	}
+	if cfg.Node.Password == "" {
+		cfg.Node.Password = GenPass()
+	}
         if cfg.Node.Endpoint == "" {
         if cfg.Node.Endpoint == "" {
 		if cfg.Node.IsLocal == "yes" && cfg.Node.LocalAddress != "" {
 		if cfg.Node.IsLocal == "yes" && cfg.Node.LocalAddress != "" {
 			cfg.Node.Endpoint = cfg.Node.LocalAddress
 			cfg.Node.Endpoint = cfg.Node.LocalAddress
@@ -124,7 +132,12 @@ func JoinNetwork(cfg config.ClientConfig) error {
 			cfg.Node.MacAddress  = macs[0]
 			cfg.Node.MacAddress  = macs[0]
 		}
 		}
 	}
 	}
-
+	if cfg.Node.Port == 0 {
+		cfg.Node.Port, err = GetFreePort(51821)
+		if err != nil {
+			fmt.Printf("Error retrieving port: %v", err)
+		}
+	}
 	var wcclient nodepb.NodeServiceClient
 	var wcclient nodepb.NodeServiceClient
 	var requestOpts grpc.DialOption
 	var requestOpts grpc.DialOption
         requestOpts = grpc.WithInsecure()
         requestOpts = grpc.WithInsecure()
@@ -214,3 +227,20 @@ func JoinNetwork(cfg config.ClientConfig) error {
 
 
 	return err
 	return err
 }
 }
+
+//generate an access key value
+func GenPass() string {
+
+        var seededRand *rand.Rand = rand.New(
+                rand.NewSource(time.Now().UnixNano()))
+
+        length := 16
+        charset := "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+
+        b := make([]byte, length)
+        for i := range b {
+                b[i] = charset[seededRand.Intn(len(charset))]
+        }
+        return string(b)
+}
+

+ 9 - 19
netclient/functions/register.go

@@ -13,7 +13,7 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"net/http"
 	"net/http"
 	"errors"
 	"errors"
-	"github.com/davecgh/go-spew/spew"
+//	"github.com/davecgh/go-spew/spew"
 )
 )
 
 
 func Register(cfg config.GlobalConfig) error {
 func Register(cfg config.GlobalConfig) error {
@@ -43,37 +43,41 @@ func Register(cfg config.GlobalConfig) error {
 	body := bytes.NewBuffer(jsonbytes)
 	body := bytes.NewBuffer(jsonbytes)
 	publicaddress := cfg.Client.ServerPublicEndpoint + ":" + cfg.Client.ServerAPIPort
 	publicaddress := cfg.Client.ServerPublicEndpoint + ":" + cfg.Client.ServerAPIPort
 
 
-	log.Println("registering to http://"+publicaddress+"/api/client/register")
 	res, err := http.Post("http://"+publicaddress+"/api/intclient/register","application/json",body)
 	res, err := http.Post("http://"+publicaddress+"/api/intclient/register","application/json",body)
         if err != nil {
         if err != nil {
+		log.Println("Failed to register to http://"+publicaddress+"/api/client/register")
                 return err
                 return err
         }
         }
 	if res.StatusCode != http.StatusOK {
 	if res.StatusCode != http.StatusOK {
+		log.Println("Failed to register to http://"+publicaddress+"/api/client/register")
 		return errors.New("request to server failed: " + res.Status)
 		return errors.New("request to server failed: " + res.Status)
 	}
 	}
 	bodyBytes, err := ioutil.ReadAll(res.Body)
 	bodyBytes, err := ioutil.ReadAll(res.Body)
+        //bodyString := string(bodyBytes)
+	//spew.Dump(bodyString)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
 	var wgclient models.IntClient
 	var wgclient models.IntClient
 	json.Unmarshal(bodyBytes, &wgclient)
 	json.Unmarshal(bodyBytes, &wgclient)
-        spew.Dump(wgclient)
+        //spew.Dump(wgclient)
 	err = config.ModGlobalConfig(wgclient)
 	err = config.ModGlobalConfig(wgclient)
         if err != nil {
         if err != nil {
                 return err
                 return err
         }
         }
-        spew.Dump(wgclient)
+        //spew.Dump(wgclient)
 	err = wireguard.InitGRPCWireguard(wgclient)
 	err = wireguard.InitGRPCWireguard(wgclient)
         if err != nil {
         if err != nil {
                 return err
                 return err
         }
         }
-
+	log.Println("registered netclient to " + cfg.Client.ServerPrivateAddress)
 	return err
 	return err
 }
 }
 
 
 func Unregister(cfg config.GlobalConfig) error {
 func Unregister(cfg config.GlobalConfig) error {
 	client := &http.Client{ Timeout: 7 * time.Second,}
 	client := &http.Client{ Timeout: 7 * time.Second,}
 	publicaddress := cfg.Client.ServerPublicEndpoint + ":" + cfg.Client.ServerAPIPort
 	publicaddress := cfg.Client.ServerPublicEndpoint + ":" + cfg.Client.ServerAPIPort
+	log.Println("sending delete request to: " + "http://"+publicaddress+"/api/intclient/"+cfg.Client.ClientID)
 	req, err := http.NewRequest("DELETE", "http://"+publicaddress+"/api/intclient/"+cfg.Client.ClientID, nil)
 	req, err := http.NewRequest("DELETE", "http://"+publicaddress+"/api/intclient/"+cfg.Client.ClientID, nil)
 	if err != nil {
 	if err != nil {
                 log.Println(err)
                 log.Println(err)
@@ -94,17 +98,3 @@ func Unregister(cfg config.GlobalConfig) error {
 	}
 	}
 	return err
 	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
-}
-

+ 46 - 39
netclient/local/local.go

@@ -2,13 +2,13 @@ package local
 
 
 import (
 import (
         //"github.com/davecgh/go-spew/spew"
         //"github.com/davecgh/go-spew/spew"
-        "github.com/gravitl/netmaker/netclient/config"
-	"fmt"
+	"errors"
+	"github.com/gravitl/netmaker/netclient/config"
+	"log"
         "io/ioutil"
         "io/ioutil"
 	"path/filepath"
 	"path/filepath"
         "io"
         "io"
 	"strings"
 	"strings"
-        "log"
         "os"
         "os"
         "os/exec"
         "os/exec"
 )
 )
@@ -19,7 +19,7 @@ func RunCmds(commands []string) error {
                 args := strings.Fields(command)
                 args := strings.Fields(command)
                 out, err := exec.Command(args[0], args[1:]...).Output()
                 out, err := exec.Command(args[0], args[1:]...).Output()
                 if string(out) != "" {
                 if string(out) != "" {
-			fmt.Println(string(out))
+			log.Println(string(out))
 		}
 		}
                 if err != nil {
                 if err != nil {
                         return err
                         return err
@@ -72,13 +72,11 @@ func ConfigureSystemD(network string) error {
 	}
 	}
 	binarypath := dir  + "/netclient"
 	binarypath := dir  + "/netclient"
 
 
-	fmt.Println("Installing Binary from Path: " + binarypath)
-
 	_, err = os.Stat("/etc/netclient")
 	_, err = os.Stat("/etc/netclient")
         if os.IsNotExist(err) {
         if os.IsNotExist(err) {
                 os.Mkdir("/etc/netclient", 744)
                 os.Mkdir("/etc/netclient", 744)
         } else if err != nil {
         } else if err != nil {
-                fmt.Println("couldnt find or create /etc/netclient")
+                log.Println("couldnt find or create /etc/netclient")
                 return err
                 return err
         }
         }
 
 
@@ -136,7 +134,6 @@ OnCalendar=*:*:0/30
 WantedBy=timers.target
 WantedBy=timers.target
 `
 `
 
 
-
 	servicebytes := []byte(systemservice)
 	servicebytes := []byte(systemservice)
 	timerbytes := []byte(systemtimer)
 	timerbytes := []byte(systemtimer)
 
 
@@ -184,23 +181,23 @@ WantedBy=timers.target
 
 
         err = cmdSysEnableService.Run()
         err = cmdSysEnableService.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error enabling [email protected]. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error enabling [email protected]. Please investigate.")
+                log.Println(err)
         }
         }
         err = cmdSysDaemonReload.Run()
         err = cmdSysDaemonReload.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error reloading system daemons. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error reloading system daemons. Please investigate.")
+                log.Println(err)
         }
         }
         err = cmdSysEnableTimer.Run()
         err = cmdSysEnableTimer.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error enabling netclient.timer. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error enabling netclient.timer. Please investigate.")
+                log.Println(err)
         }
         }
         err = cmdSysStartTimer.Run()
         err = cmdSysStartTimer.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error starting netclient-"+network+".timer. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error starting netclient-"+network+".timer. Please investigate.")
+                log.Println(err)
         }
         }
 	return nil
 	return nil
 }
 }
@@ -225,7 +222,7 @@ func RemoveSystemDServices(network string) error {
 
 
 	fullremove, err := isOnlyService(network)
 	fullremove, err := isOnlyService(network)
 	if err != nil {
 	if err != nil {
-		fmt.Println(err)
+		log.Println(err)
 	}
 	}
 
 
 	cmdSysDisableService := exec.Command("systemctl","disable","[email protected]")
 	cmdSysDisableService := exec.Command("systemctl","disable","[email protected]")
@@ -234,43 +231,47 @@ func RemoveSystemDServices(network string) error {
         cmdSysStopTimer := exec.Command("systemctl", "stop", "netclient-"+network+".timer")
         cmdSysStopTimer := exec.Command("systemctl", "stop", "netclient-"+network+".timer")
         cmdSysDisableTimer :=  exec.Command("systemctl", "disable", "netclient-"+network+".timer")
         cmdSysDisableTimer :=  exec.Command("systemctl", "disable", "netclient-"+network+".timer")
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error stopping [email protected]. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error stopping [email protected]. Please investigate.")
+                log.Println(err)
         }
         }
 	if fullremove {
 	if fullremove {
         err = cmdSysDisableService.Run()
         err = cmdSysDisableService.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error disabling [email protected]. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error disabling [email protected]. Please investigate.")
+                log.Println(err)
         }
         }
 	}
 	}
         err = cmdSysStopTimer.Run()
         err = cmdSysStopTimer.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error stopping netclient-"+network+".timer. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error stopping netclient-"+network+".timer. Please investigate.")
+                log.Println(err)
         }
         }
         err = cmdSysDisableTimer.Run()
         err = cmdSysDisableTimer.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error disabling netclient-"+network+".timer. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error disabling netclient-"+network+".timer. Please investigate.")
+                log.Println(err)
         }
         }
 	if fullremove {
 	if fullremove {
-	err = os.Remove("/etc/systemd/system/[email protected]")
+		if FileExists("/etc/systemd/system/[email protected]") {
+			err = os.Remove("/etc/systemd/system/[email protected]")
+		}
+	}
+	if FileExists("/etc/systemd/system/netclient-"+network+".timer") {
+		err = os.Remove("/etc/systemd/system/netclient-"+network+".timer")
 	}
 	}
-	err = os.Remove("/etc/systemd/system/netclient-"+network+".timer")
 	if err != nil {
 	if err != nil {
-                fmt.Println("Error removing file. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error removing file. Please investigate.")
+                log.Println(err)
 	}
 	}
         err = cmdSysDaemonReload.Run()
         err = cmdSysDaemonReload.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error reloading system daemons. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error reloading system daemons. Please investigate.")
+                log.Println(err)
         }
         }
         err = cmdSysResetFailed.Run()
         err = cmdSysResetFailed.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println("Error reseting failed system services. Please investigate.")
-                fmt.Println(err)
+                log.Println("Error reseting failed system services. Please investigate.")
+                log.Println(err)
         }
         }
 	return err
 	return err
 
 
@@ -286,9 +287,15 @@ func WipeLocal(network string) error{
 
 
         //home, err := homedir.Dir()
         //home, err := homedir.Dir()
         home := "/etc/netclient"
         home := "/etc/netclient"
-        _ = os.Remove(home + "/netconfig-" + network)
-        _ = os.Remove(home + "/nettoken-" + network)
-        _ = os.Remove(home + "/wgkey-" + network)
+	if FileExists(home + "/netconfig-" + network) {
+	        _ = os.Remove(home + "/netconfig-" + network)
+	}
+	if FileExists(home + "/nettoken-" + network) {
+		_ = os.Remove(home + "/nettoken-" + network)
+	}
+	if FileExists(home + "/wgkey-" + network) {
+		_ = os.Remove(home + "/wgkey-" + network)
+	}
 
 
         ipExec, err := exec.LookPath("ip")
         ipExec, err := exec.LookPath("ip")
 
 
@@ -301,13 +308,13 @@ func WipeLocal(network string) error{
         }
         }
         err = cmdIPLinkDel.Run()
         err = cmdIPLinkDel.Run()
         if  err  !=  nil {
         if  err  !=  nil {
-                fmt.Println(err)
+                log.Println(err)
         }
         }
         if nodecfg.PostDown != "" {
         if nodecfg.PostDown != "" {
                 runcmds := strings.Split(nodecfg.PostDown, "; ")
                 runcmds := strings.Split(nodecfg.PostDown, "; ")
                 err = RunCmds(runcmds)
                 err = RunCmds(runcmds)
                 if err != nil {
                 if err != nil {
-                        fmt.Println("Error encountered running PostDown: " + err.Error())
+                        log.Println("Error encountered running PostDown: " + err.Error())
                 }
                 }
         }
         }
         }
         }
@@ -345,7 +352,7 @@ func copy(src, dst string) (int64, error) {
         }
         }
 
 
         if !sourceFileStat.Mode().IsRegular() {
         if !sourceFileStat.Mode().IsRegular() {
-                return 0, fmt.Errorf("%s is not a regular file", src)
+                return 0, errors.New(src + " is not a regular file")
         }
         }
 
 
         source, err := os.Open(src)
         source, err := os.Open(src)

+ 21 - 19
netclient/main.go

@@ -71,6 +71,13 @@ func main() {
             Value: 0,
             Value: 0,
             Usage: "Default PersistentKeepAlive for Peers in WireGuard Interface.",
             Usage: "Default PersistentKeepAlive for Peers in WireGuard Interface.",
         },
         },
+        &cli.StringFlag{
+            Name:  "operatingsystem",
+            Aliases: []string{"os"},
+            EnvVars: []string{"NETCLIENT_OS"},
+            Value: "",
+            Usage: "Identifiable name for machine within Netmaker network.",
+        },
         &cli.StringFlag{
         &cli.StringFlag{
             Name:  "name",
             Name:  "name",
             EnvVars: []string{"NETCLIENT_NAME"},
             EnvVars: []string{"NETCLIENT_NAME"},
@@ -105,12 +112,17 @@ func main() {
             Usage: "WireGuard local network interface name.",
             Usage: "WireGuard local network interface name.",
         },
         },
         &cli.StringFlag{
         &cli.StringFlag{
-            Name:  "server",
-            Aliases: []string{"s"},
-            EnvVars: []string{"NETCLIENT_SERVER"},
+            Name:  "apiserver",
+            EnvVars: []string{"NETCLIENT_API_SERVER"},
             Value: "",
             Value: "",
 	    Usage: "Address + GRPC Port (e.g. 1.2.3.4:50051) of Netmaker server.",
 	    Usage: "Address + GRPC Port (e.g. 1.2.3.4:50051) of Netmaker server.",
         },
         },
+        &cli.StringFlag{
+            Name:  "grpcserver",
+            EnvVars: []string{"NETCLIENT_GRPC_SERVER"},
+            Value: "",
+            Usage: "Address + API Port (e.g. 1.2.3.4:8081) of Netmaker server.",
+        },
         &cli.StringFlag{
         &cli.StringFlag{
             Name:  "key",
             Name:  "key",
             Aliases: []string{"k"},
             Aliases: []string{"k"},
@@ -179,6 +191,12 @@ func main() {
             Value: "on",
             Value: "on",
             Usage: "Installs daemon if 'on'. Ignores if 'off'. On by default.",
             Usage: "Installs daemon if 'on'. Ignores if 'off'. On by default.",
         },
         },
+        &cli.StringFlag{
+            Name:  "roaming",
+            EnvVars: []string{"NETCLIENT_ROAMING"},
+            Value: "on",
+            Usage: "Checks for IP changes if 'on'. Ignores if 'off'. On by default.",
+        },
     }
     }
 
 
     app.Commands = []*cli.Command{
     app.Commands = []*cli.Command{
@@ -199,22 +217,6 @@ func main() {
                 return err
                 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",
             Name:  "join",
             Usage: "Join a Netmaker network.",
             Usage: "Join a Netmaker network.",

+ 11 - 5
netclient/wireguard/kernel.go

@@ -1,7 +1,7 @@
 package wireguard
 package wireguard
 
 
 import (
 import (
-"github.com/davecgh/go-spew/spew"
+	//"github.com/davecgh/go-spew/spew"
 	"fmt"
 	"fmt"
 	"strconv"
 	"strconv"
 	"errors"
 	"errors"
@@ -25,7 +25,9 @@ import (
 	//homedir "github.com/mitchellh/go-homedir"
 	//homedir "github.com/mitchellh/go-homedir"
 )
 )
 func InitGRPCWireguard(client models.IntClient) error {
 func InitGRPCWireguard(client models.IntClient) error {
-        key, err := wgtypes.ParseKey(client.PrivateKey)
+        //spew.Dump(client)
+
+	key, err := wgtypes.ParseKey(client.PrivateKey)
         if err !=  nil {
         if err !=  nil {
                 return err
                 return err
         }
         }
@@ -117,7 +119,7 @@ func InitGRPCWireguard(client models.IntClient) error {
                         return err
                         return err
                 }
                 }
         }
         }
-	spew.Dump(conf)
+	//spew.Dump(conf)
         err = wgclient.ConfigureDevice(ifacename, conf)
         err = wgclient.ConfigureDevice(ifacename, conf)
 
 
         if err != nil {
         if err != nil {
@@ -142,6 +144,8 @@ func InitGRPCWireguard(client models.IntClient) error {
 
 
 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  {
 
 
+        //spew.Dump(node)
+        //spew.Dump(peers)
 	ipExec, err := exec.LookPath("ip")
 	ipExec, err := exec.LookPath("ip")
 	if err !=  nil {
 	if err !=  nil {
 		return err
 		return err
@@ -246,7 +250,6 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
                 }
                 }
         }
         }
 
 
-
 	err = wgclient.ConfigureDevice(ifacename, conf)
 	err = wgclient.ConfigureDevice(ifacename, conf)
 
 
 	if err != nil {
 	if err != nil {
@@ -284,13 +287,15 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
 	}
 	}
         //=========End DNS Setup=======\\
         //=========End DNS Setup=======\\
 
 
+
         cmdIPLinkUp := &exec.Cmd {
         cmdIPLinkUp := &exec.Cmd {
                 Path: ipExec,
                 Path: ipExec,
                 Args: []string{ ipExec, "link", "set", "up", "dev", ifacename},
                 Args: []string{ ipExec, "link", "set", "up", "dev", ifacename},
                 Stdout: os.Stdout,
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
                 Stderr: os.Stdout,
         }
         }
-        cmdIPLinkDown := &exec.Cmd {
+
+	cmdIPLinkDown := &exec.Cmd {
                 Path: ipExec,
                 Path: ipExec,
                 Args: []string{ ipExec, "link", "set", "down", "dev", ifacename},
                 Args: []string{ ipExec, "link", "set", "down", "dev", ifacename},
                 Stdout: os.Stdout,
                 Stdout: os.Stdout,
@@ -334,6 +339,7 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
                         fmt.Println("Error encountered adding ipv6: " + err.Error())
                         fmt.Println("Error encountered adding ipv6: " + err.Error())
                 }
                 }
 	}
 	}
+
 	return err
 	return err
 }
 }
 
 

+ 7 - 0
scripts/reset-network.sh

@@ -0,0 +1,7 @@
+rm -rf /etc/systemd/system/netclient-default.timer
+rm -rf /etc/systemd/system/[email protected] 
+rm -rf /etc/netclient/
+systemctl daemon-reload
+ip link del nm-default
+ip link del nm-grpc-wg
+docker-compose -f /root/netmaker/compose/docker-compose.yml down --volumes

+ 2 - 1
servercfg/serverconf.go

@@ -16,7 +16,7 @@ func SetHost() error {
 	os.Setenv("SERVER_HOST", remoteip)
 	os.Setenv("SERVER_HOST", remoteip)
 	return nil
 	return nil
 }
 }
-func GetConfig() config.ServerConfig {
+func GetServerConfig() config.ServerConfig {
 	var cfg config.ServerConfig
 	var cfg config.ServerConfig
 	cfg.APIHost = GetAPIHost()
 	cfg.APIHost = GetAPIHost()
 	cfg.APIPort = GetAPIPort()
 	cfg.APIPort = GetAPIPort()
@@ -56,6 +56,7 @@ func GetWGConfig() config.WG{
 	}
 	}
 	cfg.GRPCWGInterface = GetGRPCWGInterface()
 	cfg.GRPCWGInterface = GetGRPCWGInterface()
 	cfg.GRPCWGAddress = GetGRPCWGAddress()
 	cfg.GRPCWGAddress = GetGRPCWGAddress()
+        cfg.GRPCWGAddressRange = GetGRPCWGAddressRange()
 	cfg.GRPCWGPort = GetGRPCWGPort()
 	cfg.GRPCWGPort = GetGRPCWGPort()
 	cfg.GRPCWGPubKey =  GetGRPCWGPubKey()
 	cfg.GRPCWGPubKey =  GetGRPCWGPubKey()
 	cfg.GRPCWGPrivKey =  GetGRPCWGPrivKey()
 	cfg.GRPCWGPrivKey =  GetGRPCWGPrivKey()

+ 3 - 3
servercfg/wireguardconf.go

@@ -40,7 +40,7 @@ func GetGRPCWGInterface() string {
        return iface
        return iface
 }
 }
 func GetGRPCWGAddress() string {
 func GetGRPCWGAddress() string {
-        address := "10.101.0.1"
+      address := "10.101.0.1"
       if os.Getenv("SERVER_GRPC_WG_ADDRESS") != ""  {
       if os.Getenv("SERVER_GRPC_WG_ADDRESS") != ""  {
               address = os.Getenv("SERVER_GRPC_WG_ADDRESS")
               address = os.Getenv("SERVER_GRPC_WG_ADDRESS")
       } else if config.Config.WG.GRPCWGAddress != "" {
       } else if config.Config.WG.GRPCWGAddress != "" {
@@ -49,7 +49,7 @@ func GetGRPCWGAddress() string {
       return address
       return address
 }
 }
 func GetGRPCWGAddressRange() string {
 func GetGRPCWGAddressRange() string {
-        address := "10.101.0.0/16"
+      address := "10.101.0.0/16"
       if os.Getenv("SERVER_GRPC_WG_ADDRESS_RANGE") != ""  {
       if os.Getenv("SERVER_GRPC_WG_ADDRESS_RANGE") != ""  {
               address = os.Getenv("SERVER_GRPC_WG_ADDRESS_RANGE")
               address = os.Getenv("SERVER_GRPC_WG_ADDRESS_RANGE")
       } else if config.Config.WG.GRPCWGAddressRange != "" {
       } else if config.Config.WG.GRPCWGAddressRange != "" {
@@ -58,7 +58,7 @@ func GetGRPCWGAddressRange() string {
       return address
       return address
 }
 }
 func GetGRPCWGPort() string {
 func GetGRPCWGPort() string {
-        port := "50555"
+      port := "50555"
       if os.Getenv("SERVER_GRPC_WG_PORT") != ""  {
       if os.Getenv("SERVER_GRPC_WG_PORT") != ""  {
               port = os.Getenv("SERVER_GRPC_WG_PORT")
               port = os.Getenv("SERVER_GRPC_WG_PORT")
       } else if config.Config.WG.GRPCWGPort != "" {
       } else if config.Config.WG.GRPCWGPort != "" {

+ 2 - 1
serverctl/serverctl.go

@@ -208,7 +208,7 @@ func AddNetwork(network string) (bool, error) {
                 return false, err
                 return false, err
 	}
 	}
 	token, err := functions.CreateServerToken(network)
 	token, err := functions.CreateServerToken(network)
-        if err != nil {
+	if err != nil {
                 log.Println("could not create server token for " + network)
                 log.Println("could not create server token for " + network)
 		return false, err
 		return false, err
         }
         }
@@ -224,6 +224,7 @@ func AddNetwork(network string) (bool, error) {
                 log.Println("could not change netclient directory permissions")
                 log.Println("could not change netclient directory permissions")
                 return false, err
                 return false, err
         }
         }
+	log.Println("executing network join: " + "/etc/netclient/netclient "+"join "+"-t "+token+" -name "+"netmaker"+" -endpoint "+pubip)
 	out, err := exec.Command("/etc/netclient/netclient","join","-t",token,"-name","netmaker","-endpoint",pubip).Output()
 	out, err := exec.Command("/etc/netclient/netclient","join","-t",token,"-name","netmaker","-endpoint",pubip).Output()
         if string(out) != "" {
         if string(out) != "" {
 	        log.Println(string(out))
 	        log.Println(string(out))

+ 3 - 3
serverctl/wireguard.go

@@ -63,10 +63,10 @@ func InitServerWireGuard() error {
 	client.PublicKey = wgconfig.GRPCWGPubKey
 	client.PublicKey = wgconfig.GRPCWGPubKey
 	client.ServerPublicEndpoint = servercfg.GetAPIHost()
 	client.ServerPublicEndpoint = servercfg.GetAPIHost()
 	client.ServerAPIPort = servercfg.GetAPIPort()
 	client.ServerAPIPort = servercfg.GetAPIPort()
-	client.ServerPrivateAddress = wgconfig.GRPCWGAddress
-	client.ServerWGPort = wgconfig.GRPCWGPort
+	client.ServerPrivateAddress = servercfg.GetGRPCWGAddress()
+	client.ServerWGPort = servercfg.GetGRPCWGPort()
 	client.ServerGRPCPort = servercfg.GetGRPCPort()
 	client.ServerGRPCPort = servercfg.GetGRPCPort()
-	client.Address = wgconfig.GRPCWGAddress
+	client.Address = servercfg.GetGRPCWGAddress()
 	client.IsServer = "yes"
 	client.IsServer = "yes"
 	client.Network = "comms"
 	client.Network = "comms"
 	exists, _ := functions.ServerIntClientExists()
 	exists, _ := functions.ServerIntClientExists()