From 2a42bb23a31eeb58fbfcd2bf480c55aee4688177 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Thu, 29 Jul 2021 01:03:57 -0400 Subject: [PATCH] fixed netclient --- netclient/wireguard/kernel.go | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/netclient/wireguard/kernel.go b/netclient/wireguard/kernel.go index 9045cff1..c59b4a5f 100644 --- a/netclient/wireguard/kernel.go +++ b/netclient/wireguard/kernel.go @@ -403,7 +403,7 @@ func SetWGConfig(network string, peerupdate bool) error { return err } if peerupdate && node.Name != "netmaker" { - SetPeers(node.Interface, peers) + SetPeers(node.Interface, node.Keepalive, peers) } else { err = InitWireguard(&node, privkey, peers, hasGateway, gateways) } @@ -414,10 +414,39 @@ func SetWGConfig(network string, peerupdate bool) error { return err } -func SetPeers(iface string, peers []wgtypes.PeerConfig) { +func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) { + client, err := wgctrl.New() + if err != nil { + log.Println("failed to start wgctrl") + return + } + device, err := client.Device(iface) + if err != nil { + log.Println("failed to parse interface") + return + } for _, peer := range peers { + + for _, currentPeer := range device.Peers { + if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() && + currentPeer.PublicKey.String() == peer.PublicKey.String() { + err := exec.Command("wg","set",iface,"peer",currentPeer.PublicKey.String(),"delete").Run() + if err != nil { + log.Println("error setting peer",peer.Endpoint.String(),) + } + } + } udpendpoint := peer.Endpoint.IP.String()+":"+peer.Endpoint.IP.String() - err := exec.Command("wg","set",iface,"peer",peer.PublicKey.String(),"endpoint",udpendpoint,"allowed-ips",peer.AllowedIPs[0].String()).Run() + var allowedips string + var iparr []string + for _, ipaddr := range peer.AllowedIPs { + iparr = append(iparr,ipaddr.String()) + } + allowedips = strings.Join(iparr,",") + err := exec.Command("wg","set",iface,"peer",peer.PublicKey.String(), + "endpoint",udpendpoint, + "persistent-keepalive",string(keepalive), + "allowed-ips",allowedips) if err != nil { log.Println("error setting peer",peer.Endpoint.String(),) }