diff --git a/controllers/network.go b/controllers/network.go index 44405e95..af0cbf2a 100644 --- a/controllers/network.go +++ b/controllers/network.go @@ -152,11 +152,6 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) { return } - // if newNetwork.IsDualStack != currentNetwork.IsDualStack && newNetwork.IsDualStack == "no" { - // // Remove IPv6 address from network nodes - // RemoveNetworkNodeIPv6Addresses(currentNetwork.NetID) - // } - if rangeupdate { err = logic.UpdateNetworkNodeAddresses(network.NetID) if err != nil { diff --git a/logic/networks.go b/logic/networks.go index b4573cb4..c8e42e3e 100644 --- a/logic/networks.go +++ b/logic/networks.go @@ -408,7 +408,6 @@ func RemoveNetworkNodeIPv6Addresses(networkName string) error { return err } if node.Network == networkName { - node.IsDualStack = "no" node.Address6 = "" data, err := json.Marshal(&node) if err != nil { diff --git a/logic/nodes.go b/logic/nodes.go index d8401f81..f08e582b 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -425,9 +425,7 @@ func SetNodeDefaults(node *models.Node) { } } // == Parent Network settings == - if node.IsDualStack == "" { - node.IsDualStack = parentNetwork.IsDualStack - } + if node.MTU == 0 { node.MTU = parentNetwork.DefaultMTU } @@ -435,7 +433,6 @@ func SetNodeDefaults(node *models.Node) { node.SetIPForwardingDefault() node.SetDNSOnDefault() node.SetIsLocalDefault() - node.SetIsDualStackDefault() node.SetLastModified() node.SetDefaultName() node.SetLastCheckIn() diff --git a/logic/peers.go b/logic/peers.go index 5c751663..3c59674b 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -34,19 +34,19 @@ func GetHubPeer(networkName string) []models.Node { */ // GetNodePeers - fetches peers for a given node -func GetNodePeers(networkName, nodeid string, excludeRelayed bool, isP2S bool) ([]models.Node, error) { +func GetNodePeers(network *models.Network, nodeid string, excludeRelayed bool, isP2S bool) ([]models.Node, error) { var peers []models.Node - var networkNodes, egressNetworkNodes, err = getNetworkEgressAndNodes(networkName) + var networkNodes, egressNetworkNodes, err = getNetworkEgressAndNodes(network.NetID) if err != nil { return peers, nil } - udppeers, errN := database.GetPeers(networkName) + udppeers, errN := database.GetPeers(network.NetID) if errN != nil { logger.Log(2, errN.Error()) } - currentNetworkACLs, aclErr := nodeacls.FetchAllACLs(nodeacls.NetworkID(networkName)) + currentNetworkACLs, aclErr := nodeacls.FetchAllACLs(nodeacls.NetworkID(network.NetID)) if aclErr != nil { return peers, aclErr } @@ -63,10 +63,9 @@ func GetNodePeers(networkName, nodeid string, excludeRelayed bool, isP2S bool) ( } peer.IsIngressGateway = node.IsIngressGateway - isDualStack := node.IsDualStack == "yes" allow := node.IsRelayed != "yes" || !excludeRelayed - if node.Network == networkName && node.IsPending != "yes" && allow { + if node.Network == network.NetID && node.IsPending != "yes" && allow { peer = setPeerInfo(&node) if node.UDPHolePunch == "yes" && errN == nil && CheckEndpoint(udppeers[node.PublicKey]) { endpointstring := udppeers[node.PublicKey] @@ -84,12 +83,7 @@ func GetNodePeers(networkName, nodeid string, excludeRelayed bool, isP2S bool) ( peer.ListenPort = node.LocalListenPort } if node.IsRelay == "yes" { - network, err := GetNetwork(networkName) - if err == nil { - peer.AllowedIPs = append(peer.AllowedIPs, network.AddressRange) - } else { - peer.AllowedIPs = append(peer.AllowedIPs, node.RelayAddrs...) - } + peer.AllowedIPs = append(peer.AllowedIPs, network.AddressRange) for _, egressNode := range egressNetworkNodes { if egressNode.IsRelayed == "yes" && StringSliceContains(node.RelayAddrs, egressNode.Address) { peer.AllowedIPs = append(peer.AllowedIPs, egressNode.EgressGatewayRanges...) @@ -99,8 +93,10 @@ func GetNodePeers(networkName, nodeid string, excludeRelayed bool, isP2S bool) ( if peer.IsIngressGateway == "yes" { // handle ingress stuff if currentExtClients, err := GetExtPeersList(&node); err == nil { for i := range currentExtClients { - peer.AllowedIPs = append(peer.AllowedIPs, currentExtClients[i].Address) - if isDualStack { + if network.IsIPv4 == "yes" { + peer.AllowedIPs = append(peer.AllowedIPs, currentExtClients[i].Address) + } + if network.IsIPv6 == "yes" { peer.AllowedIPs = append(peer.AllowedIPs, currentExtClients[i].Address6) } } @@ -135,7 +131,7 @@ func GetPeersList(refnode *models.Node) ([]models.Node, error) { isP2S = true } if relayedNodeAddr == "" { - peers, err = GetNodePeers(networkName, refnode.ID, excludeRelayed, isP2S) + peers, err = GetNodePeers(&network, refnode.ID, excludeRelayed, isP2S) } else { var relayNode models.Node relayNode, err = GetNodeRelay(networkName, relayedNodeAddr) @@ -155,7 +151,7 @@ func GetPeersList(refnode *models.Node) ([]models.Node, error) { } else { peerNode.AllowedIPs = append(peerNode.AllowedIPs, peerNode.RelayAddrs...) } - nodepeers, err := GetNodePeers(networkName, refnode.ID, false, isP2S) + nodepeers, err := GetNodePeers(&network, refnode.ID, false, isP2S) if err == nil && peerNode.UDPHolePunch == "yes" { for _, nodepeer := range nodepeers { if nodepeer.Address == peerNode.Address { diff --git a/logic/server.go b/logic/server.go index 851f93f6..dbfba4fa 100644 --- a/logic/server.go +++ b/logic/server.go @@ -287,7 +287,7 @@ func GetServerPeers(serverNode *models.Node) ([]wgtypes.PeerConfig, bool, []stri } ranges = nil } - if node.Address6 != "" && serverNode.IsDualStack == "yes" { + if node.Address6 != "" { var addr6 = net.IPNet{ IP: net.ParseIP(node.Address6), Mask: net.CIDRMask(128, 128), @@ -357,7 +357,7 @@ func GetServerExtPeers(serverNode *models.Node) ([]wgtypes.PeerConfig, error) { peeraddr, } - if extPeer.Address6 != "" && serverNode.IsDualStack == "yes" { + if extPeer.Address6 != "" { var addr6 = net.IPNet{ IP: net.ParseIP(extPeer.Address6), Mask: net.CIDRMask(128, 128), diff --git a/logic/wireguard.go b/logic/wireguard.go index 84482126..5dad6bdc 100644 --- a/logic/wireguard.go +++ b/logic/wireguard.go @@ -50,9 +50,9 @@ func HasPeerConnected(node *models.Node) bool { func IfaceDelta(currentNode *models.Node, newNode *models.Node) bool { // single comparison statements if newNode.Endpoint != currentNode.Endpoint || - newNode.LocalAddress != currentNode.LocalAddress || newNode.PublicKey != currentNode.PublicKey || newNode.Address != currentNode.Address || + newNode.Address6 != currentNode.Address6 || newNode.IsEgressGateway != currentNode.IsEgressGateway || newNode.IsIngressGateway != currentNode.IsIngressGateway || newNode.IsRelay != currentNode.IsRelay || @@ -67,12 +67,6 @@ func IfaceDelta(currentNode *models.Node, newNode *models.Node) bool { } // multi-comparison statements - if newNode.IsDualStack == "yes" { - if newNode.Address6 != currentNode.Address6 { - return true - } - } - if newNode.IsEgressGateway == "yes" { if len(currentNode.EgressGatewayRanges) != len(newNode.EgressGatewayRanges) { return true @@ -239,7 +233,7 @@ func initWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig _, _ = ncutils.RunCmd(ipExec+" -4 route add "+gateway+" dev "+ifacename, true) } } - if node.Address6 != "" && node.IsDualStack == "yes" { + if node.Address6 != "" { logger.Log(1, "adding address:", node.Address6) _, _ = ncutils.RunCmd(ipExec+" address add dev "+ifacename+" "+node.Address6+"/64", true) } diff --git a/models/network.go b/models/network.go index 2f70ee77..49e2efd4 100644 --- a/models/network.go +++ b/models/network.go @@ -21,7 +21,6 @@ type Network struct { AccessKeys []AccessKey `json:"accesskeys" bson:"accesskeys"` AllowManualSignUp string `json:"allowmanualsignup" bson:"allowmanualsignup" validate:"checkyesorno"` IsLocal string `json:"islocal" bson:"islocal" validate:"checkyesorno"` - IsDualStack string `json:"isdualstack" bson:"isdualstack" validate:"checkyesorno"` // ** IsDualStack deprecated ** IsIPv4 string `json:"isipv4" bson:"isipv4" validate:"checkyesorno"` IsIPv6 string `json:"isipv6" bson:"isipv6" validate:"checkyesorno"` IsPointToSite string `json:"ispointtosite" bson:"ispointtosite" validate:"checkyesorno"` @@ -77,16 +76,6 @@ func (network *Network) SetDefaults() { if network.AllowManualSignUp == "" { network.AllowManualSignUp = "no" } - if network.IsDualStack == "" { - network.IsDualStack = "no" - } - if network.IsDualStack == "yes" { - network.IsIPv6 = "yes" - network.IsIPv4 = "yes" - } else { - network.IsIPv6 = "no" - network.IsIPv4 = "yes" - } if network.IsIPv4 == "" { network.IsIPv4 = "yes" diff --git a/models/node.go b/models/node.go index 52ca6dd5..0af00d3f 100644 --- a/models/node.go +++ b/models/node.go @@ -33,56 +33,53 @@ var seededRand *rand.Rand = rand.New( // Node - struct for node model type Node struct { - ID string `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" validate:"required,min=5"` - Address string `json:"address" bson:"address" yaml:"address" validate:"omitempty,ipv4"` - Address6 string `json:"address6" bson:"address6" yaml:"address6" validate:"omitempty,ipv6"` - LocalAddress string `json:"localaddress" bson:"localaddress" yaml:"localaddress" validate:"omitempty,ip"` - LocalListenPort int32 `json:"locallistenport" bson:"locallistenport" yaml:"locallistenport" validate:"numeric,min=0,max=65535"` - Name string `json:"name" bson:"name" yaml:"name" validate:"omitempty,max=62,in_charset"` - NetworkSettings Network `json:"networksettings" bson:"networksettings" yaml:"networksettings" validate:"-"` - ListenPort int32 `json:"listenport" bson:"listenport" yaml:"listenport" validate:"omitempty,numeric,min=1024,max=65535"` - PublicKey string `json:"publickey" bson:"publickey" yaml:"publickey" validate:"required,base64"` - Endpoint string `json:"endpoint" bson:"endpoint" yaml:"endpoint" validate:"required,ip"` - PostUp string `json:"postup" bson:"postup" yaml:"postup"` - PostDown string `json:"postdown" bson:"postdown" yaml:"postdown"` - AllowedIPs []string `json:"allowedips" bson:"allowedips" yaml:"allowedips"` - PersistentKeepalive int32 `json:"persistentkeepalive" bson:"persistentkeepalive" yaml:"persistentkeepalive" validate:"omitempty,numeric,max=1000"` - IsHub string `json:"ishub" bson:"ishub" yaml:"ishub" validate:"checkyesorno"` - AccessKey string `json:"accesskey" bson:"accesskey" yaml:"accesskey"` - Interface string `json:"interface" bson:"interface" yaml:"interface"` - LastModified int64 `json:"lastmodified" bson:"lastmodified" yaml:"lastmodified"` - ExpirationDateTime int64 `json:"expdatetime" bson:"expdatetime" yaml:"expdatetime"` - LastPeerUpdate int64 `json:"lastpeerupdate" bson:"lastpeerupdate" yaml:"lastpeerupdate"` - LastCheckIn int64 `json:"lastcheckin" bson:"lastcheckin" yaml:"lastcheckin"` - MacAddress string `json:"macaddress" bson:"macaddress" yaml:"macaddress" validate:"macaddress_unique"` - Password string `json:"password" bson:"password" yaml:"password" validate:"required,min=6"` - Network string `json:"network" bson:"network" yaml:"network" validate:"network_exists"` - IsRelayed string `json:"isrelayed" bson:"isrelayed" yaml:"isrelayed"` - IsPending string `json:"ispending" bson:"ispending" yaml:"ispending"` - IsRelay string `json:"isrelay" bson:"isrelay" yaml:"isrelay" validate:"checkyesorno"` - IsDocker string `json:"isdocker" bson:"isdocker" yaml:"isdocker" validate:"checkyesorno"` - IsK8S string `json:"isk8s" bson:"isk8s" yaml:"isk8s" validate:"checkyesorno"` - IsEgressGateway string `json:"isegressgateway" bson:"isegressgateway" yaml:"isegressgateway"` - IsIngressGateway string `json:"isingressgateway" bson:"isingressgateway" yaml:"isingressgateway"` - EgressGatewayRanges []string `json:"egressgatewayranges" bson:"egressgatewayranges" yaml:"egressgatewayranges"` - RelayAddrs []string `json:"relayaddrs" bson:"relayaddrs" yaml:"relayaddrs"` - IngressGatewayRange string `json:"ingressgatewayrange" bson:"ingressgatewayrange" yaml:"ingressgatewayrange"` - IsStatic string `json:"isstatic" bson:"isstatic" yaml:"isstatic" validate:"checkyesorno"` - UDPHolePunch string `json:"udpholepunch" bson:"udpholepunch" yaml:"udpholepunch" validate:"checkyesorno"` - //PullChanges string `json:"pullchanges" bson:"pullchanges" yaml:"pullchanges" validate:"checkyesorno"` - DNSOn string `json:"dnson" bson:"dnson" yaml:"dnson" validate:"checkyesorno"` - // ** IsDualStack deprecated ** - IsDualStack string `json:"isdualstack" bson:"isdualstack" yaml:"isdualstack" validate:"checkyesorno"` - IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"` - Action string `json:"action" bson:"action" yaml:"action"` - IsLocal string `json:"islocal" bson:"islocal" yaml:"islocal" validate:"checkyesorno"` - LocalRange string `json:"localrange" bson:"localrange" yaml:"localrange"` - IPForwarding string `json:"ipforwarding" bson:"ipforwarding" yaml:"ipforwarding" validate:"checkyesorno"` - OS string `json:"os" bson:"os" yaml:"os"` - MTU int32 `json:"mtu" bson:"mtu" yaml:"mtu"` - Version string `json:"version" bson:"version" yaml:"version"` - Server string `json:"server" bson:"server" yaml:"server"` - TrafficKeys TrafficKeys `json:"traffickeys" bson:"traffickeys" yaml:"traffickeys"` + ID string `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" validate:"required,min=5"` + Address string `json:"address" bson:"address" yaml:"address" validate:"omitempty,ipv4"` + Address6 string `json:"address6" bson:"address6" yaml:"address6" validate:"omitempty,ipv6"` + LocalAddress string `json:"localaddress" bson:"localaddress" yaml:"localaddress" validate:"omitempty,ip"` + Name string `json:"name" bson:"name" yaml:"name" validate:"omitempty,max=62,in_charset"` + NetworkSettings Network `json:"networksettings" bson:"networksettings" yaml:"networksettings" validate:"-"` + ListenPort int32 `json:"listenport" bson:"listenport" yaml:"listenport" validate:"omitempty,numeric,min=1024,max=65535"` + LocalListenPort int32 `json:"locallistenport" bson:"locallistenport" yaml:"locallistenport" validate:"numeric,min=0,max=65535"` + PublicKey string `json:"publickey" bson:"publickey" yaml:"publickey" validate:"required,base64"` + Endpoint string `json:"endpoint" bson:"endpoint" yaml:"endpoint" validate:"required,ip"` + PostUp string `json:"postup" bson:"postup" yaml:"postup"` + PostDown string `json:"postdown" bson:"postdown" yaml:"postdown"` + AllowedIPs []string `json:"allowedips" bson:"allowedips" yaml:"allowedips"` + PersistentKeepalive int32 `json:"persistentkeepalive" bson:"persistentkeepalive" yaml:"persistentkeepalive" validate:"omitempty,numeric,max=1000"` + IsHub string `json:"ishub" bson:"ishub" yaml:"ishub" validate:"checkyesorno"` + AccessKey string `json:"accesskey" bson:"accesskey" yaml:"accesskey"` + Interface string `json:"interface" bson:"interface" yaml:"interface"` + LastModified int64 `json:"lastmodified" bson:"lastmodified" yaml:"lastmodified"` + ExpirationDateTime int64 `json:"expdatetime" bson:"expdatetime" yaml:"expdatetime"` + LastPeerUpdate int64 `json:"lastpeerupdate" bson:"lastpeerupdate" yaml:"lastpeerupdate"` + LastCheckIn int64 `json:"lastcheckin" bson:"lastcheckin" yaml:"lastcheckin"` + MacAddress string `json:"macaddress" bson:"macaddress" yaml:"macaddress" validate:"macaddress_unique"` + Password string `json:"password" bson:"password" yaml:"password" validate:"required,min=6"` + Network string `json:"network" bson:"network" yaml:"network" validate:"network_exists"` + IsRelayed string `json:"isrelayed" bson:"isrelayed" yaml:"isrelayed"` + IsPending string `json:"ispending" bson:"ispending" yaml:"ispending"` + IsRelay string `json:"isrelay" bson:"isrelay" yaml:"isrelay" validate:"checkyesorno"` + IsDocker string `json:"isdocker" bson:"isdocker" yaml:"isdocker" validate:"checkyesorno"` + IsK8S string `json:"isk8s" bson:"isk8s" yaml:"isk8s" validate:"checkyesorno"` + IsEgressGateway string `json:"isegressgateway" bson:"isegressgateway" yaml:"isegressgateway"` + IsIngressGateway string `json:"isingressgateway" bson:"isingressgateway" yaml:"isingressgateway"` + EgressGatewayRanges []string `json:"egressgatewayranges" bson:"egressgatewayranges" yaml:"egressgatewayranges"` + RelayAddrs []string `json:"relayaddrs" bson:"relayaddrs" yaml:"relayaddrs"` + IngressGatewayRange string `json:"ingressgatewayrange" bson:"ingressgatewayrange" yaml:"ingressgatewayrange"` + IsStatic string `json:"isstatic" bson:"isstatic" yaml:"isstatic" validate:"checkyesorno"` + UDPHolePunch string `json:"udpholepunch" bson:"udpholepunch" yaml:"udpholepunch" validate:"checkyesorno"` + DNSOn string `json:"dnson" bson:"dnson" yaml:"dnson" validate:"checkyesorno"` + IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"` + Action string `json:"action" bson:"action" yaml:"action"` + IsLocal string `json:"islocal" bson:"islocal" yaml:"islocal" validate:"checkyesorno"` + LocalRange string `json:"localrange" bson:"localrange" yaml:"localrange"` + IPForwarding string `json:"ipforwarding" bson:"ipforwarding" yaml:"ipforwarding" validate:"checkyesorno"` + OS string `json:"os" bson:"os" yaml:"os"` + MTU int32 `json:"mtu" bson:"mtu" yaml:"mtu"` + Version string `json:"version" bson:"version" yaml:"version"` + Server string `json:"server" bson:"server" yaml:"server"` + TrafficKeys TrafficKeys `json:"traffickeys" bson:"traffickeys" yaml:"traffickeys"` } // NodesArray - used for node sorting @@ -201,13 +198,6 @@ func (node *Node) SetDNSOnDefault() { } } -// Node.SetIsDualStackDefault - set is dual stack default status -func (node *Node) SetIsDualStackDefault() { - if node.IsDualStack == "" { - node.IsDualStack = "no" - } -} - // Node.SetIsServerDefault - sets node isserver default func (node *Node) SetIsServerDefault() { if node.IsServer != "yes" { @@ -350,18 +340,12 @@ func (newNode *Node) Fill(currentNode *Node) { if newNode.DNSOn == "" { newNode.DNSOn = currentNode.DNSOn } - if newNode.IsDualStack == "" { - newNode.IsDualStack = currentNode.IsDualStack - } if newNode.IsLocal == "" { newNode.IsLocal = currentNode.IsLocal } if newNode.IPForwarding == "" { newNode.IPForwarding = currentNode.IPForwarding } - //if newNode.Roaming == "" { - //newNode.Roaming = currentNode.Roaming - //} if newNode.Action == "" { newNode.Action = currentNode.Action } diff --git a/netclient/cli_options/flags.go b/netclient/cli_options/flags.go index 96c1a169..6314ed43 100644 --- a/netclient/cli_options/flags.go +++ b/netclient/cli_options/flags.go @@ -144,12 +144,6 @@ func GetFlags(hostname string) []cli.Flag { Value: "", Usage: "Sets endpoint to local address if 'yes'. Ignores if 'no'. Will retrieve from network if unset.", }, - &cli.StringFlag{ - Name: "isdualstack", - EnvVars: []string{"NETCLIENT_IS_DUALSTACK"}, - Value: "", - Usage: "Sets ipv6 address if 'yes'. Ignores if 'no'. Will retrieve from network if unset.", - }, &cli.StringFlag{ Name: "udpholepunch", EnvVars: []string{"NETCLIENT_UDP_HOLEPUNCH"}, diff --git a/netclient/config/config.go b/netclient/config/config.go index c8b4ef60..99429a38 100644 --- a/netclient/config/config.go +++ b/netclient/config/config.go @@ -237,7 +237,6 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) { cfg.Node.DNSOn = c.String("dnson") cfg.Node.IsLocal = c.String("islocal") cfg.Node.IsStatic = c.String("isstatic") - cfg.Node.IsDualStack = c.String("isdualstack") cfg.Node.PostUp = c.String("postup") cfg.Node.PostDown = c.String("postdown") cfg.Node.ListenPort = int32(c.Int("port")) diff --git a/netclient/ncutils/iface.go b/netclient/ncutils/iface.go index 8d628b3e..6cc10265 100644 --- a/netclient/ncutils/iface.go +++ b/netclient/ncutils/iface.go @@ -10,9 +10,9 @@ import ( func IfaceDelta(currentNode *models.Node, newNode *models.Node) bool { // single comparison statements if newNode.Endpoint != currentNode.Endpoint || - newNode.LocalAddress != currentNode.LocalAddress || newNode.PublicKey != currentNode.PublicKey || newNode.Address != currentNode.Address || + newNode.Address6 != currentNode.Address6 || newNode.IsEgressGateway != currentNode.IsEgressGateway || newNode.IsIngressGateway != currentNode.IsIngressGateway || newNode.IsRelay != currentNode.IsRelay || @@ -27,12 +27,6 @@ func IfaceDelta(currentNode *models.Node, newNode *models.Node) bool { } // multi-comparison statements - if newNode.IsDualStack == "yes" { - if newNode.Address6 != currentNode.Address6 { - return true - } - } - if newNode.IsEgressGateway == "yes" { if len(currentNode.EgressGatewayRanges) != len(newNode.EgressGatewayRanges) { return true diff --git a/netclient/wireguard/common.go b/netclient/wireguard/common.go index 7adf9d76..2113dbb9 100644 --- a/netclient/wireguard/common.go +++ b/netclient/wireguard/common.go @@ -14,6 +14,7 @@ import ( "github.com/gravitl/netmaker/netclient/config" "github.com/gravitl/netmaker/netclient/local" "github.com/gravitl/netmaker/netclient/ncutils" + "github.com/gravitl/netmaker/netclient/server" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" "gopkg.in/ini.v1" @@ -229,6 +230,10 @@ func SetWGConfig(network string, peerupdate bool) error { servercfg := cfg.Server nodecfg := cfg.Node + peers, hasGateway, gateways, err := server.GetPeers(nodecfg.MacAddress, nodecfg.Network, servercfg.GRPCAddress, nodecfg.IsIngressGateway == "yes", nodecfg.IsServer == "yes") + if err != nil { + return err + } privkey, err := RetrievePrivKey(network) if err != nil { return err diff --git a/netclient/wireguard/noquick.go b/netclient/wireguard/noquick.go index 93172382..0a278108 100644 --- a/netclient/wireguard/noquick.go +++ b/netclient/wireguard/noquick.go @@ -88,9 +88,14 @@ func ApplyWithoutWGQuick(node *models.Node, ifacename string, confPath string) e runcmds := strings.Split(node.PostUp, "; ") _ = ncutils.RunCmds(runcmds, true) } - if node.Address6 != "" && node.IsDualStack == "yes" { + if node.Address6 != "" { logger.Log(1, "adding address: ", node.Address6) - _, _ = ncutils.RunCmd(ipExec+" address add dev "+ifacename+" "+node.Address6+"/64", true) + netmaskArr := strings.Split(node.NetworkSettings.AddressRange6, "/") + var netmask = "64" + if len(netmaskArr) == 2 { + netmask = netmaskArr[1] + } + ncutils.RunCmd(ipExec+" address add dev "+ifacename+" "+node.Address6+"/"+netmask, true) } return nil }