Browse Source

added local range logic

0xdcarns 3 years ago
parent
commit
72206817bb
3 changed files with 38 additions and 7 deletions
  1. 1 1
      controllers/network.go
  2. 34 3
      logic/server.go
  3. 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 {

+ 34 - 3
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")
 	}
 
@@ -54,6 +54,15 @@ func ServerJoin(network string, serverID string, privateKey string) error {
 	}
 
 	if node.Endpoint == "" {
+		if node.IsLocal == "yes" {
+			var localAddr, localErr = getServerLocalIP(networkSettings)
+			if localErr != nil {
+				logger.Log(1, "could not acquire local address", localErr.Error())
+			} else {
+				node.LocalAddress = localAddr
+				node.LocalRange = networkSettings.LocalRange
+			}
+		}
 		if node.IsLocal == "yes" && node.LocalAddress != "" {
 			node.Endpoint = node.LocalAddress
 		} else {
@@ -65,6 +74,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 +87,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 +432,23 @@ func checkNodeActions(node *models.Node) string {
 	}
 	return ""
 }
+
+// best effort, or get public ip
+func getServerLocalIP(networkSettings *models.Network) (string, error) {
+	var networkCIDR = networkSettings.AddressRange
+	var currentAddresses, err = net.InterfaceAddrs()
+	if err != nil { // attempt to use public IP
+		return "", err
+	}
+	var _, currentCIDR, cidrErr = net.ParseCIDR(networkCIDR)
+	if cidrErr != nil {
+		return "", err
+	}
+	for _, address := range currentAddresses {
+		if currentCIDR.Contains(net.IP(address.Network())) {
+			logger.Log(1, "setting local ip", address.String())
+			return address.String(), nil
+		}
+	}
+	return "", errors.New("could not find local ip")
+}

+ 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
 }