Browse Source

Merge pull request #604 from gravitl/bugfix_v0.9.4_localnets

Bugfix v0.9.4 localnets
dcarns 3 years ago
parent
commit
4d36a6024b
4 changed files with 54 additions and 22 deletions
  1. 1 1
      controllers/network.go
  2. 15 13
      controllers/server.go
  3. 35 5
      logic/server.go
  4. 3 3
      serverctl/serverctl.go

+ 1 - 1
controllers/network.go

@@ -227,7 +227,7 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
 
 	if servercfg.IsClientMode() != "off" {
 		var success bool
-		success, err = serverctl.AddNetwork(network.NetID)
+		success, err = serverctl.AddNetwork(&network)
 		if err != nil || !success {
 			logic.DeleteNetwork(network.NetID)
 			if err == nil {

+ 15 - 13
controllers/server.go

@@ -13,7 +13,7 @@ import (
 )
 
 func serverHandlers(r *mux.Router) {
-	r.HandleFunc("/api/server/addnetwork/{network}", securityCheckServer(true, http.HandlerFunc(addNetwork))).Methods("POST")
+	// r.HandleFunc("/api/server/addnetwork/{network}", securityCheckServer(true, http.HandlerFunc(addNetwork))).Methods("POST")
 	r.HandleFunc("/api/server/getconfig", securityCheckServer(false, http.HandlerFunc(getConfig))).Methods("GET")
 	r.HandleFunc("/api/server/removenetwork/{network}", securityCheckServer(true, http.HandlerFunc(removeNetwork))).Methods("DELETE")
 }
@@ -91,19 +91,21 @@ func getConfig(w http.ResponseWriter, r *http.Request) {
 	//w.WriteHeader(http.StatusOK)
 }
 
-func addNetwork(w http.ResponseWriter, r *http.Request) {
-	// Set header
-	w.Header().Set("Content-Type", "application/json")
+// func addNetwork(w http.ResponseWriter, r *http.Request) {
+// 	// Set header
+// 	w.Header().Set("Content-Type", "application/json")
 
-	// get params
-	var params = mux.Vars(r)
+// 	// get params
+// 	var params = mux.Vars(r)
+// 	var networkName = params["network"]
+// 	var networkSettings, err := logic.GetNetwork(netwnetworkName)
 
-	success, err := serverctl.AddNetwork(params["network"])
+// 	success, err := serverctl.AddNetwork(params["network"])
 
-	if err != nil || !success {
-		json.NewEncoder(w).Encode("Could not add server to network " + params["network"])
-		return
-	}
+// 	if err != nil || !success {
+// 		json.NewEncoder(w).Encode("Could not add server to network " + params["network"])
+// 		return
+// 	}
 
-	json.NewEncoder(w).Encode("Server added to network " + params["network"])
-}
+// 	json.NewEncoder(w).Encode("Server added to network " + params["network"])
+// }

+ 35 - 5
logic/server.go

@@ -26,9 +26,9 @@ const KUBERNETES_LISTEN_PORT = 31821
 const KUBERNETES_SERVER_MTU = 1024
 
 // ServerJoin - responsible for joining a server to a network
-func ServerJoin(network string, serverID string, privateKey string) error {
+func ServerJoin(networkSettings *models.Network, serverID string) error {
 
-	if network == "" {
+	if networkSettings == nil || networkSettings.NetID == "" {
 		return errors.New("no network provided")
 	}
 
@@ -40,6 +40,8 @@ func ServerJoin(network string, serverID string, privateKey string) error {
 		Name:         models.NODE_SERVER_NAME,
 		MacAddress:   serverID,
 		UDPHolePunch: "no",
+		IsLocal:      networkSettings.IsLocal,
+		LocalRange:   networkSettings.LocalRange,
 	}
 	SetNodeDefaults(node)
 
@@ -49,8 +51,12 @@ func ServerJoin(network string, serverID string, privateKey string) error {
 	}
 
 	if node.LocalRange != "" && node.LocalAddress == "" {
-		logger.Log(1, "local vpn, getting local address from range:", node.LocalRange)
-		node.LocalAddress = GetLocalIP(*node)
+		logger.Log(1, "local vpn, getting local address from range:", networkSettings.LocalRange)
+		node.LocalAddress, err = getServerLocalIP(networkSettings)
+		if err != nil {
+			node.LocalAddress = ""
+			node.IsLocal = "no"
+		}
 	}
 
 	if node.Endpoint == "" {
@@ -65,6 +71,8 @@ func ServerJoin(network string, serverID string, privateKey string) error {
 		}
 	}
 
+	var privateKey = ""
+
 	// Generate and set public/private WireGuard Keys
 	if privateKey == "" {
 		wgPrivatekey, err := wgtypes.GeneratePrivateKey()
@@ -76,7 +84,7 @@ func ServerJoin(network string, serverID string, privateKey string) error {
 		node.PublicKey = wgPrivatekey.PublicKey().String()
 	}
 
-	node.Network = network
+	node.Network = networkSettings.NetID
 
 	logger.Log(2, "adding a server instance on network", node.Network)
 	err = CreateNode(node)
@@ -421,3 +429,25 @@ func checkNodeActions(node *models.Node) string {
 	}
 	return ""
 }
+
+func getServerLocalIP(networkSettings *models.Network) (string, error) {
+
+	var networkCIDR = networkSettings.LocalRange
+	var currentAddresses, _ = net.InterfaceAddrs()
+	var _, currentCIDR, cidrErr = net.ParseCIDR(networkCIDR)
+	if cidrErr != nil {
+		logger.Log(1, "error on server local IP, invalid CIDR provided:", networkCIDR)
+		return "", cidrErr
+	}
+	for _, addr := range currentAddresses {
+		ip, _, err := net.ParseCIDR(addr.String())
+		if err != nil {
+			continue
+		}
+		if currentCIDR.Contains(ip) {
+			logger.Log(1, "found local ip on network,", networkSettings.NetID, ", set to", ip.String())
+			return ip.String(), nil
+		}
+	}
+	return "", errors.New("could not find a local ip for server")
+}

+ 3 - 3
serverctl/serverctl.go

@@ -103,7 +103,7 @@ func SyncNetworks(servernets []models.Network) error {
 			}
 		}
 		if !exists {
-			success, err := AddNetwork(servernet.NetID)
+			success, err := AddNetwork(&servernet)
 			if err != nil || !success {
 				if err == nil {
 					err = errors.New("network add failed for " + servernet.NetID)
@@ -139,7 +139,7 @@ func SyncNetworks(servernets []models.Network) error {
 }
 
 // AddNetwork - add a network to server in client mode
-func AddNetwork(network string) (bool, error) {
-	var err = logic.ServerJoin(network, servercfg.GetNodeID(), "")
+func AddNetwork(networkSettings *models.Network) (bool, error) {
+	var err = logic.ServerJoin(networkSettings, servercfg.GetNodeID())
 	return true, err
 }