mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 04:06:37 +08:00 
			
		
		
		
	Merge pull request #1316 from gravitl/bugfix_v0.14.5_wg_ports
Bugfix v0.14.5 wg ports
This commit is contained in:
		| @@ -10,6 +10,7 @@ import ( | |||||||
| 	"net" | 	"net" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
|  | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @@ -415,3 +416,11 @@ func SetServerInfo(cfg *config.ClientConfig) error { | |||||||
|  |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func informPortChange(node *models.Node) { | ||||||
|  | 	if node.ListenPort == 0 { | ||||||
|  | 		logger.Log(0, "UDP hole punching enabled for node", node.Name) | ||||||
|  | 	} else { | ||||||
|  | 		logger.Log(0, "node", node.Name, "is using port", strconv.Itoa(int(node.ListenPort))) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -170,8 +170,13 @@ func JoinNetwork(cfg *config.ClientConfig, privateKey string) error { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	logger.Log(1, "node created on remote server...updating configs") | 	logger.Log(1, "node created on remote server...updating configs") | ||||||
| 	cfg.Node = node | 	err = ncutils.ModPort(&node) | ||||||
| 	err = config.ModNodeConfig(&cfg.Node) | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	informPortChange(&node) | ||||||
|  |  | ||||||
|  | 	err = config.ModNodeConfig(&node) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| @@ -188,6 +193,7 @@ func JoinNetwork(cfg *config.ClientConfig, privateKey string) error { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | 	cfg.Node = node | ||||||
| 	if err := Register(cfg); err != nil { | 	if err := Register(cfg); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -105,6 +105,13 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) { | |||||||
| 	} | 	} | ||||||
| 	file := ncutils.GetNetclientPathSpecific() + nodeCfg.Node.Interface + ".conf" | 	file := ncutils.GetNetclientPathSpecific() + nodeCfg.Node.Interface + ".conf" | ||||||
|  |  | ||||||
|  | 	if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers | ||||||
|  | 		err = ncutils.ModPort(&newNode) | ||||||
|  | 		if err != nil { | ||||||
|  | 			logger.Log(0, "error modifying node port on", newNode.Name, "-", err.Error()) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		informPortChange(&newNode) | ||||||
| 		if err := wireguard.UpdateWgInterface(file, privateKey, nameserver, newNode); err != nil { | 		if err := wireguard.UpdateWgInterface(file, privateKey, nameserver, newNode); err != nil { | ||||||
| 			logger.Log(0, "error updating wireguard config "+err.Error()) | 			logger.Log(0, "error updating wireguard config "+err.Error()) | ||||||
| 			return | 			return | ||||||
| @@ -112,18 +119,17 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) { | |||||||
| 		if keepaliveChange { | 		if keepaliveChange { | ||||||
| 			wireguard.UpdateKeepAlive(file, newNode.PersistentKeepalive) | 			wireguard.UpdateKeepAlive(file, newNode.PersistentKeepalive) | ||||||
| 		} | 		} | ||||||
| 	if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers |  | ||||||
| 		logger.Log(0, "applying WG conf to "+file) | 		logger.Log(0, "applying WG conf to "+file) | ||||||
| 		if ncutils.IsWindows() { | 		if ncutils.IsWindows() { | ||||||
| 			wireguard.RemoveConfGraceful(nodeCfg.Node.Interface) | 			wireguard.RemoveConfGraceful(nodeCfg.Node.Interface) | ||||||
| 		} | 		} | ||||||
| 		err = wireguard.ApplyConf(&nodeCfg.Node, nodeCfg.Node.Interface, file) | 		err = wireguard.ApplyConf(&nodeCfg.Node, nodeCfg.Node.Interface, file) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			logger.Log(0, "error restarting wg after node update "+err.Error()) | 			logger.Log(0, "error restarting wg after node update -", err.Error()) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		time.Sleep(time.Second >> 0) | 		time.Sleep(time.Second) | ||||||
| 		//	if newNode.DNSOn == "yes" { | 		//	if newNode.DNSOn == "yes" { | ||||||
| 		//		for _, server := range newNode.NetworkSettings.DefaultServerAddrs { | 		//		for _, server := range newNode.NetworkSettings.DefaultServerAddrs { | ||||||
| 		//			if server.IsLeader { | 		//			if server.IsLeader { | ||||||
|   | |||||||
| @@ -62,10 +62,17 @@ func Pull(network string, iface bool) (*models.Node, error) { | |||||||
| 			logger.Log(0, "unable to update server config: "+err.Error()) | 			logger.Log(0, "unable to update server config: "+err.Error()) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if iface { | 	if nodeGET.Node.ListenPort != cfg.Node.ListenPort { | ||||||
|  | 		err = ncutils.ModPort(&resNode) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		informPortChange(&resNode) | ||||||
|  | 	} | ||||||
| 	if err = config.ModNodeConfig(&resNode); err != nil { | 	if err = config.ModNodeConfig(&resNode); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  | 	if iface { | ||||||
| 		if err = wireguard.SetWGConfig(network, false, nodeGET.Peers[:]); err != nil { | 		if err = wireguard.SetWGConfig(network, false, nodeGET.Peers[:]); err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -574,3 +574,14 @@ func GetIPNetFromString(ip string) (net.IPNet, error) { | |||||||
| 	} | 	} | ||||||
| 	return *ipnet, err | 	return *ipnet, err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // ModPort - Change Node Port if UDP Hole Punching or ListenPort is not free | ||||||
|  | func ModPort(node *models.Node) error { | ||||||
|  | 	var err error | ||||||
|  | 	if node.UDPHolePunch == "yes" { | ||||||
|  | 		node.ListenPort = 0 | ||||||
|  | 	} else { | ||||||
|  | 		node.ListenPort, err = GetFreePort(node.ListenPort) | ||||||
|  | 	} | ||||||
|  | 	return err | ||||||
|  | } | ||||||
|   | |||||||
| @@ -138,15 +138,9 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	defer wgclient.Close() | 	defer wgclient.Close() | ||||||
| 	cfg, err := config.ReadConfig(node.Network) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	//nodecfg := modcfg.Node | 	//nodecfg := modcfg.Node | ||||||
| 	var ifacename string | 	var ifacename string | ||||||
| 	if cfg.Node.Interface != "" { | 	if node.Interface != "" { | ||||||
| 		ifacename = cfg.Node.Interface |  | ||||||
| 	} else if node.Interface != "" { |  | ||||||
| 		ifacename = node.Interface | 		ifacename = node.Interface | ||||||
| 	} else { | 	} else { | ||||||
| 		return fmt.Errorf("no interface to configure") | 		return fmt.Errorf("no interface to configure") | ||||||
| @@ -154,14 +148,7 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig | |||||||
| 	if node.PrimaryAddress() == "" { | 	if node.PrimaryAddress() == "" { | ||||||
| 		return fmt.Errorf("no address to configure") | 		return fmt.Errorf("no address to configure") | ||||||
| 	} | 	} | ||||||
| 	logger.Log(1, "turn on UDP hole punching (dynamic port setting)? "+cfg.Node.UDPHolePunch) | 	if err := WriteWgConfig(node, key.String(), peers); err != nil { | ||||||
| 	if node.UDPHolePunch == "yes" { |  | ||||||
| 		node.ListenPort = 0 |  | ||||||
| 	} else { |  | ||||||
| 		//get available port based on current default |  | ||||||
| 		node.ListenPort, err = ncutils.GetFreePort(node.ListenPort) |  | ||||||
| 	} |  | ||||||
| 	if err := WriteWgConfig(&cfg.Node, key.String(), peers); err != nil { |  | ||||||
| 		logger.Log(1, "error writing wg conf file: ", err.Error()) | 		logger.Log(1, "error writing wg conf file: ", err.Error()) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| @@ -222,7 +209,7 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig | |||||||
|  |  | ||||||
| 	//ipv4 | 	//ipv4 | ||||||
| 	if node.Address != "" { | 	if node.Address != "" { | ||||||
| 		_, cidr, cidrErr := net.ParseCIDR(cfg.NetworkSettings.AddressRange) | 		_, cidr, cidrErr := net.ParseCIDR(node.NetworkSettings.AddressRange) | ||||||
| 		if cidrErr == nil { | 		if cidrErr == nil { | ||||||
| 			local.SetCIDRRoute(ifacename, node.Address, cidr) | 			local.SetCIDRRoute(ifacename, node.Address, cidr) | ||||||
| 		} else { | 		} else { | ||||||
| @@ -232,13 +219,12 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig | |||||||
| 	} | 	} | ||||||
| 	if node.Address6 != "" { | 	if node.Address6 != "" { | ||||||
| 		//ipv6 | 		//ipv6 | ||||||
| 		_, cidr, cidrErr := net.ParseCIDR(cfg.NetworkSettings.AddressRange6) | 		_, cidr, cidrErr := net.ParseCIDR(node.NetworkSettings.AddressRange6) | ||||||
| 		if cidrErr == nil { | 		if cidrErr == nil { | ||||||
| 			local.SetCIDRRoute(ifacename, node.Address6, cidr) | 			local.SetCIDRRoute(ifacename, node.Address6, cidr) | ||||||
| 		} else { | 		} else { | ||||||
| 			logger.Log(1, "could not set cidr route properly: ", cidrErr.Error()) | 			logger.Log(1, "could not set cidr route properly: ", cidrErr.Error()) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		local.SetCurrentPeerRoutes(ifacename, node.Address6, peers) | 		local.SetCurrentPeerRoutes(ifacename, node.Address6, peers) | ||||||
| 	} | 	} | ||||||
| 	return err | 	return err | ||||||
| @@ -251,27 +237,24 @@ func SetWGConfig(network string, peerupdate bool, peers []wgtypes.PeerConfig) er | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	nodecfg := cfg.Node |  | ||||||
|  |  | ||||||
| 	privkey, err := RetrievePrivKey(network) | 	privkey, err := RetrievePrivKey(network) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	if peerupdate && !ncutils.IsFreeBSD() && !(ncutils.IsLinux() && !ncutils.IsKernel()) { | 	if peerupdate && !ncutils.IsFreeBSD() && !(ncutils.IsLinux() && !ncutils.IsKernel()) { | ||||||
| 		var iface string | 		var iface string | ||||||
| 		iface = nodecfg.Interface | 		iface = cfg.Node.Interface | ||||||
| 		if ncutils.IsMac() { | 		if ncutils.IsMac() { | ||||||
| 			iface, err = local.GetMacIface(nodecfg.PrimaryAddress()) | 			iface, err = local.GetMacIface(cfg.Node.PrimaryAddress()) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		err = SetPeers(iface, &nodecfg, peers) | 		err = SetPeers(iface, &cfg.Node, peers) | ||||||
| 	} else if peerupdate { | 	} else if peerupdate { | ||||||
| 		err = InitWireguard(&nodecfg, privkey, peers, true) | 		err = InitWireguard(&cfg.Node, privkey, peers, true) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = InitWireguard(&nodecfg, privkey, peers, false) | 		err = InitWireguard(&cfg.Node, privkey, peers, false) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return err | 	return err | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 dcarns
					dcarns