From 06e2603c209aa7c6b346df85518c4e895408f2af Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Thu, 3 Feb 2022 09:51:16 -0500 Subject: [PATCH] added time to prevent UDP reset --- controllers/node_grpc.go | 22 ---------------------- netclient/functions/daemon.go | 32 ++++++++++++++++++++------------ netclient/functions/join.go | 4 ++-- netclient/local/routes.go | 8 ++++---- netclient/ncutils/iface.go | 1 + netclient/wireguard/common.go | 2 -- 6 files changed, 27 insertions(+), 42 deletions(-) diff --git a/controllers/node_grpc.go b/controllers/node_grpc.go index bdcc70af..7e3844e0 100644 --- a/controllers/node_grpc.go +++ b/controllers/node_grpc.go @@ -282,29 +282,7 @@ func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object) } // == private methods == -/* -func getNewOrLegacyNode(data string) (models.Node, error) { - var reqNode, node models.Node - var err error - if err = json.Unmarshal([]byte(data), &reqNode); err != nil { - oldID := strings.Split(data, "###") // handle legacy client IDs - if len(oldID) == 2 { - if node, err = logic.GetNodeByID(reqNode.ID); err != nil { - return models.Node{}, err - } - } else { - return models.Node{}, err - } - } else { - node, err = logic.GetNodeByID(reqNode.ID) - if err != nil { - return models.Node{}, err - } - } - return node, nil -} -*/ func getNodeFromRequestData(data string) (models.Node, error) { var reqNode models.Node var err error diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index 68314f36..c83d692b 100644 --- a/netclient/functions/daemon.go +++ b/netclient/functions/daemon.go @@ -121,19 +121,27 @@ func MessageQueue(ctx context.Context, network string) { var cfg config.ClientConfig cfg.Network = network ncutils.Log("pulling latest config for " + cfg.Network) - sleepTime := 2 - for { - _, err := Pull(network, true) - if err == nil { - break + var configPath = fmt.Sprintf("%sconfig/netconfig-%s", ncutils.GetNetclientPathSpecific(), network) + fileInfo, err := os.Stat(configPath) + if err != nil { + ncutils.Log("could not stat config file: " + configPath) + } + // speed up UDP + if time.Now().After(fileInfo.ModTime().Add(time.Minute)) { + sleepTime := 2 + for { + _, err := Pull(network, true) + if err == nil { + break + } + if sleepTime > 3600 { + sleepTime = 3600 + } + ncutils.Log("failed to pull for network " + network) + ncutils.Log(fmt.Sprintf("waiting %d seconds to retry...", sleepTime)) + time.Sleep(time.Second * time.Duration(sleepTime)) + sleepTime = sleepTime * 2 } - if sleepTime > 3600 { - sleepTime = 3600 - } - ncutils.Log("failed to pull for network " + network) - ncutils.Log(fmt.Sprintf("waiting %d seconds to retry...", sleepTime)) - time.Sleep(time.Second * time.Duration(sleepTime)) - sleepTime = sleepTime * 2 } time.Sleep(time.Second << 1) cfg.ReadConfig() diff --git a/netclient/functions/join.go b/netclient/functions/join.go index 55c12ad7..f6ff65d3 100644 --- a/netclient/functions/join.go +++ b/netclient/functions/join.go @@ -109,9 +109,9 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { } if ncutils.IsLinux() { - _, err := exec.LookPath("resolvconf") + _, err := exec.LookPath("resolvectl") if err != nil { - ncutils.PrintLog("resolvconf not present", 2) + ncutils.PrintLog("resolvectl not present", 2) ncutils.PrintLog("unable to configure DNS automatically, disabling automated DNS management", 2) cfg.Node.DNSOn = "no" } diff --git a/netclient/local/routes.go b/netclient/local/routes.go index 948f370a..a8512e6b 100644 --- a/netclient/local/routes.go +++ b/netclient/local/routes.go @@ -7,8 +7,8 @@ import ( "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) +// SetPeerRoutes - sets/removes ip routes for each peer on a network func SetPeerRoutes(iface string, oldPeers map[string][]net.IPNet, newPeers []wgtypes.PeerConfig) { - // traverse through all recieved peers for _, peer := range newPeers { // if pubkey found in existing peers, check against existing peer @@ -29,9 +29,9 @@ func SetPeerRoutes(iface string, oldPeers map[string][]net.IPNet, newPeers []wgt } } } - delete(oldPeers, peer.PublicKey.String()) + delete(oldPeers, peer.PublicKey.String()) // remove peer as it was found and processed } else { - for _, allowedIP := range peer.AllowedIPs { + for _, allowedIP := range peer.AllowedIPs { // add all routes as peer doesn't exist if err := setRoute(iface, &allowedIP); err != nil { ncutils.PrintLog(err.Error(), 1) } @@ -39,7 +39,7 @@ func SetPeerRoutes(iface string, oldPeers map[string][]net.IPNet, newPeers []wgt } } - // traverse through all existing peers + // traverse through all remaining existing peers for _, allowedIPs := range oldPeers { for _, allowedIP := range allowedIPs { deleteRoute(iface, &allowedIP) diff --git a/netclient/ncutils/iface.go b/netclient/ncutils/iface.go index 332bd63a..989c31b4 100644 --- a/netclient/ncutils/iface.go +++ b/netclient/ncutils/iface.go @@ -18,6 +18,7 @@ func IfaceDelta(currentNode *models.Node, newNode *models.Node) bool { newNode.UDPHolePunch != currentNode.UDPHolePunch || newNode.IsPending != currentNode.IsPending || newNode.PersistentKeepalive != currentNode.PersistentKeepalive || + newNode.DNSOn != currentNode.DNSOn || len(newNode.ExcludedAddrs) != len(currentNode.ExcludedAddrs) || len(newNode.AllowedIPs) != len(currentNode.AllowedIPs) { return true diff --git a/netclient/wireguard/common.go b/netclient/wireguard/common.go index f07d3dc4..fb803f53 100644 --- a/netclient/wireguard/common.go +++ b/netclient/wireguard/common.go @@ -85,8 +85,6 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error { } if err != nil { log.Println("error setting peer", peer.PublicKey.String()) - } else { - } }