diff --git a/netclient/functions/mqhandlers.go b/netclient/functions/mqhandlers.go index 9ba87d77..56499c70 100644 --- a/netclient/functions/mqhandlers.go +++ b/netclient/functions/mqhandlers.go @@ -109,44 +109,45 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) { } 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 - if newNode.ListenPort != nodeCfg.Node.LocalListenPort { - if err := wireguard.RemoveConf(newNode.Interface, false); err != nil { - logger.Log(0, "error remove interface", newNode.Interface, err.Error()) - } - err = ncutils.ModPort(&newNode) - if err != nil { - logger.Log(0, "network:", nodeCfg.Node.Network, "error modifying node port on", newNode.Name, "-", err.Error()) - return - } - informPortChange(&newNode) + if newNode.ListenPort != nodeCfg.Node.LocalListenPort { + if err := wireguard.RemoveConf(newNode.Interface, false); err != nil { + logger.Log(0, "error remove interface", newNode.Interface, err.Error()) } - if err := wireguard.UpdateWgInterface(file, privateKey, nameserver, newNode); err != nil { - logger.Log(0, "error updating wireguard config "+err.Error()) - return - } - if keepaliveChange { - wireguard.UpdateKeepAlive(file, newNode.PersistentKeepalive) - } - logger.Log(0, "applying WG conf to "+file) - if ncutils.IsWindows() { - wireguard.RemoveConfGraceful(nodeCfg.Node.Interface) - } - err = wireguard.ApplyConf(&nodeCfg.Node, nodeCfg.Node.Interface, file) + err = ncutils.ModPort(&newNode) if err != nil { - logger.Log(0, "error restarting wg after node update -", err.Error()) + logger.Log(0, "network:", nodeCfg.Node.Network, "error modifying node port on", newNode.Name, "-", err.Error()) return } + ifaceDelta = true + informPortChange(&newNode) + } + if err := wireguard.UpdateWgInterface(file, privateKey, nameserver, newNode); err != nil { + logger.Log(0, "error updating wireguard config "+err.Error()) + return + } + if keepaliveChange { + wireguard.UpdateKeepAlive(file, newNode.PersistentKeepalive) + } + logger.Log(0, "applying WG conf to "+file) + if ncutils.IsWindows() { + wireguard.RemoveConfGraceful(nodeCfg.Node.Interface) + } + err = wireguard.ApplyConf(&nodeCfg.Node, nodeCfg.Node.Interface, file) + if err != nil { + logger.Log(0, "error restarting wg after node update -", err.Error()) + return + } - time.Sleep(time.Second) - // if newNode.DNSOn == "yes" { - // for _, server := range newNode.NetworkSettings.DefaultServerAddrs { - // if server.IsLeader { - // go local.SetDNSWithRetry(newNode, server.Address) - // break - // } - // } - // } + time.Sleep(time.Second) + // if newNode.DNSOn == "yes" { + // for _, server := range newNode.NetworkSettings.DefaultServerAddrs { + // if server.IsLeader { + // go local.SetDNSWithRetry(newNode, server.Address) + // break + // } + // } + // } + if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers doneErr := publishSignal(&nodeCfg, ncutils.DONE) if doneErr != nil { logger.Log(0, "network:", nodeCfg.Node.Network, "could not notify server to update peers after interface change") diff --git a/netclient/ncutils/iface.go b/netclient/ncutils/iface.go index ff17caa3..de090e33 100644 --- a/netclient/ncutils/iface.go +++ b/netclient/ncutils/iface.go @@ -23,6 +23,8 @@ func IfaceDelta(currentNode *models.Node, newNode *models.Node) bool { newNode.PersistentKeepalive != currentNode.PersistentKeepalive || newNode.DNSOn != currentNode.DNSOn || newNode.Connected != currentNode.Connected || + newNode.PostUp != currentNode.PostUp || + newNode.PostDown != currentNode.PostDown || len(newNode.AllowedIPs) != len(currentNode.AllowedIPs) { return true } diff --git a/netclient/wireguard/common.go b/netclient/wireguard/common.go index d91e50fe..e2643901 100644 --- a/netclient/wireguard/common.go +++ b/netclient/wireguard/common.go @@ -443,6 +443,7 @@ func UpdateWgInterface(file, privateKey, nameserver string, node models.Node) er if node.UDPHolePunch == "yes" { node.ListenPort = 0 } + wireguard.DeleteSection(section_interface) wireguard.Section(section_interface).Key("PrivateKey").SetValue(privateKey) wireguard.Section(section_interface).Key("ListenPort").SetValue(strconv.Itoa(int(node.ListenPort))) addrString := node.Address