Browse Source

Merge pull request #227 from gravitl/v0.7.1

V0.7.1
Alex 4 years ago
parent
commit
4cecd87949
3 changed files with 22 additions and 12 deletions
  1. 7 1
      netclient/functions/checkin.go
  2. 8 6
      netclient/server/grpc.go
  3. 7 5
      netclient/wireguard/kernel.go

+ 7 - 1
netclient/functions/checkin.go

@@ -6,6 +6,7 @@ import (
 	"errors"
 	"log"
 	"strings"
+	"os"
 
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/models"
@@ -226,7 +227,12 @@ func Pull(network string, manual bool) (*models.Node, error) {
 		}
 	} else {
 		if err = wireguard.SetWGConfig(network, true); err != nil {
-			return nil, err
+			if errors.Is(err, os.ErrNotExist) {
+				log.Println("readding interface")
+				return Pull(network, true)
+			} else {
+				return nil, err
+			}
 		}
 	}
 	setDNS(&resNode, servercfg, &cfg.Node)

+ 8 - 6
netclient/server/grpc.go

@@ -211,11 +211,14 @@ func GetPeers(macaddress string, network string, server string, dualstack bool,
 		if node.IsEgressGateway == "yes" {
 			hasGateway = true
 			ranges := node.EgressGatewayRanges
-			for _, iprange := range ranges {
-				_, ipnet, err := net.ParseCIDR(iprange)
-				nodeEndpointArr := strings.Split(node.Endpoint, ":")
-				if len(nodeEndpointArr) != 2 || ipnet.Contains(net.IP(nodeEndpointArr[0])) {
-					continue
+			for _, iprange := range ranges { // go through each cidr for egress gateway
+				_, ipnet, err := net.ParseCIDR(iprange) // confirming it's valid cidr
+				if err != nil {
+					continue // if can't parse CIDR
+				}
+				nodeEndpointArr := strings.Split(node.Endpoint, ":") // getting the public ip of node
+				if ipnet.Contains(net.IP(nodeEndpointArr[0])) {      // ensuring egress gateway range does not contain public ip of node
+					continue // skip adding egress range if overlaps with nodes ip
 				}
 				gateways = append(gateways, iprange)
 				if err != nil {
@@ -262,7 +265,6 @@ func GetPeers(macaddress string, network string, server string, dualstack bool,
 			}
 		}
 		peers = append(peers, peer)
-
 	}
 	if isIngressGateway {
 		extPeers, err := GetExtPeers(macaddress, network, server, dualstack)

+ 7 - 5
netclient/wireguard/kernel.go

@@ -234,7 +234,7 @@ func SetWGConfig(network string, peerupdate bool) error {
 		return err
 	}
 	if peerupdate {
-		SetPeers(nodecfg.Interface, nodecfg.PersistentKeepalive, peers)
+		err = SetPeers(nodecfg.Interface, nodecfg.PersistentKeepalive, peers)
 	} else {
 		err = InitWireguard(&nodecfg, privkey, peers, hasGateway, gateways)
 	}
@@ -245,22 +245,22 @@ func SetWGConfig(network string, peerupdate bool) error {
 	return err
 }
 
-func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) {
+func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error {
 
 	client, err := wgctrl.New()
 	if err != nil {
 		log.Println("failed to start wgctrl")
-		return
+		return err
 	}
 	device, err := client.Device(iface)
 	if err != nil {
 		log.Println("failed to parse interface")
-		return
+		return err
 	}
 	devicePeers := device.Peers
 	if len(devicePeers) > 1 && len(peers) == 0 {
 		log.Println("no peers pulled")
-		return
+		return err
 	}
 
 	for _, peer := range peers {
@@ -316,6 +316,8 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) {
 			}
 		}
 	}
+	
+	return nil
 }
 
 func StorePrivKey(key string, network string) error {