mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-29 19:32:19 +08:00
moving port check logic
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/logic"
|
"github.com/gravitl/netmaker/logic"
|
||||||
@@ -170,8 +171,12 @@ 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)
|
logger.Log(0, "using port", strconv.Itoa(int(node.ListenPort)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,17 +113,22 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
|
|||||||
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
|
if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers
|
||||||
|
err = ncutils.ModPort(&nodeCfg.Node)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "error modifying node port on", nodeCfg.Node.Name, "-", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
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 {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
@@ -62,10 +63,15 @@ 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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
err = ncutils.ModPort(&resNode)
|
||||||
|
logger.Log(0, "port is now", strconv.Itoa(int(resNode.ListenPort)))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err = config.ModNodeConfig(&resNode); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
if iface {
|
if iface {
|
||||||
if err = config.ModNodeConfig(&resNode); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
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