|
@@ -14,7 +14,6 @@ import (
|
|
|
"github.com/gravitl/netmaker/logger"
|
|
|
"github.com/gravitl/netmaker/logic/acls/nodeacls"
|
|
|
"github.com/gravitl/netmaker/models"
|
|
|
- "github.com/gravitl/netmaker/netclient/ncutils"
|
|
|
"github.com/gravitl/netmaker/servercfg"
|
|
|
"golang.org/x/exp/slices"
|
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
@@ -97,9 +96,9 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|
|
return models.PeerUpdate{}, err
|
|
|
}
|
|
|
|
|
|
- if node.IsRelayed == "yes" {
|
|
|
- return GetPeerUpdateForRelayedNode(node, udppeers)
|
|
|
- }
|
|
|
+ // if node.IsRelayed == "yes" {
|
|
|
+ // return GetPeerUpdateForRelayedNode(node, udppeers)
|
|
|
+ // }
|
|
|
|
|
|
// #1 Set Keepalive values: set_keepalive
|
|
|
// #2 Set local address: set_local - could be a LOT BETTER and fix some bugs with additional logic
|
|
@@ -121,15 +120,15 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|
|
// if the node is not a server, set the endpoint
|
|
|
var setEndpoint = !(node.IsServer == "yes")
|
|
|
|
|
|
- if peer.IsRelayed == "yes" {
|
|
|
- if !(node.IsRelay == "yes" && ncutils.StringSliceContains(node.RelayAddrs, peer.PrimaryAddress())) {
|
|
|
- //skip -- will be added to relay
|
|
|
- continue
|
|
|
- } else if node.IsRelay == "yes" && ncutils.StringSliceContains(node.RelayAddrs, peer.PrimaryAddress()) {
|
|
|
- // dont set peer endpoint if it's relayed by node
|
|
|
- setEndpoint = false
|
|
|
- }
|
|
|
- }
|
|
|
+ // if peer.IsRelayed == "yes" {
|
|
|
+ // if !(node.IsRelay == "yes" && ncutils.StringSliceContains(node.RelayAddrs, peer.PrimaryAddress())) {
|
|
|
+ // //skip -- will be added to relay
|
|
|
+ // continue
|
|
|
+ // } else if node.IsRelay == "yes" && ncutils.StringSliceContains(node.RelayAddrs, peer.PrimaryAddress()) {
|
|
|
+ // // dont set peer endpoint if it's relayed by node
|
|
|
+ // setEndpoint = false
|
|
|
+ // }
|
|
|
+ // }
|
|
|
if !nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID), nodeacls.NodeID(peer.ID)) {
|
|
|
//skip if not permitted by acl
|
|
|
continue
|
|
@@ -238,6 +237,16 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|
|
peerUpdate.ServerAddrs = serverNodeAddresses
|
|
|
peerUpdate.DNS = getPeerDNS(node.Network)
|
|
|
peerUpdate.PeerIDs = peerMap
|
|
|
+ if node.IsRelayed == "yes" {
|
|
|
+ relayNode := FindRelay(node)
|
|
|
+ relayEndpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayNode.Endpoint, relayNode.LocalListenPort))
|
|
|
+ if err != nil {
|
|
|
+ logger.Log(1, "failed to resolve relay node endpoint: ", err.Error())
|
|
|
+ }
|
|
|
+ peerUpdate.IsRelayed = true
|
|
|
+ peerUpdate.RelayTo = relayEndpoint
|
|
|
+
|
|
|
+ }
|
|
|
return peerUpdate, nil
|
|
|
}
|
|
|
|
|
@@ -338,60 +347,60 @@ func GetAllowedIPs(node, peer *models.Node, metrics *models.Metrics) []net.IPNet
|
|
|
}
|
|
|
}
|
|
|
// handle relay gateway peers
|
|
|
- if peer.IsRelay == "yes" {
|
|
|
- for _, ip := range peer.RelayAddrs {
|
|
|
- //find node ID of relayed peer
|
|
|
- relayedPeer, err := findNode(ip)
|
|
|
- if err != nil {
|
|
|
- logger.Log(0, "failed to find node for ip ", ip, err.Error())
|
|
|
- continue
|
|
|
- }
|
|
|
- if relayedPeer == nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- if relayedPeer.ID == node.ID {
|
|
|
- //skip self
|
|
|
- continue
|
|
|
- }
|
|
|
- //check if acl permits comms
|
|
|
- if !nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID), nodeacls.NodeID(relayedPeer.ID)) {
|
|
|
- continue
|
|
|
- }
|
|
|
- if iplib.Version(net.ParseIP(ip)) == 4 {
|
|
|
- relayAddr := net.IPNet{
|
|
|
- IP: net.ParseIP(ip),
|
|
|
- Mask: net.CIDRMask(32, 32),
|
|
|
- }
|
|
|
- allowedips = append(allowedips, relayAddr)
|
|
|
- }
|
|
|
- if iplib.Version(net.ParseIP(ip)) == 6 {
|
|
|
- relayAddr := net.IPNet{
|
|
|
- IP: net.ParseIP(ip),
|
|
|
- Mask: net.CIDRMask(128, 128),
|
|
|
- }
|
|
|
- allowedips = append(allowedips, relayAddr)
|
|
|
- }
|
|
|
- relayedNode, err := findNode(ip)
|
|
|
- if err != nil {
|
|
|
- logger.Log(1, "unable to find node for relayed address", ip, err.Error())
|
|
|
- continue
|
|
|
- }
|
|
|
- if relayedNode.IsEgressGateway == "yes" {
|
|
|
- extAllowedIPs := getEgressIPs(node, relayedNode)
|
|
|
- allowedips = append(allowedips, extAllowedIPs...)
|
|
|
- }
|
|
|
- if relayedNode.IsIngressGateway == "yes" {
|
|
|
- extPeers, _, err := getExtPeers(relayedNode)
|
|
|
- if err == nil {
|
|
|
- for _, extPeer := range extPeers {
|
|
|
- allowedips = append(allowedips, extPeer.AllowedIPs...)
|
|
|
- }
|
|
|
- } else {
|
|
|
- logger.Log(0, "failed to retrieve extclients from relayed ingress", err.Error())
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // if peer.IsRelay == "yes" {
|
|
|
+ // for _, ip := range peer.RelayAddrs {
|
|
|
+ // //find node ID of relayed peer
|
|
|
+ // relayedPeer, err := findNode(ip)
|
|
|
+ // if err != nil {
|
|
|
+ // logger.Log(0, "failed to find node for ip ", ip, err.Error())
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // if relayedPeer == nil {
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // if relayedPeer.ID == node.ID {
|
|
|
+ // //skip self
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // //check if acl permits comms
|
|
|
+ // if !nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID), nodeacls.NodeID(relayedPeer.ID)) {
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // if iplib.Version(net.ParseIP(ip)) == 4 {
|
|
|
+ // relayAddr := net.IPNet{
|
|
|
+ // IP: net.ParseIP(ip),
|
|
|
+ // Mask: net.CIDRMask(32, 32),
|
|
|
+ // }
|
|
|
+ // allowedips = append(allowedips, relayAddr)
|
|
|
+ // }
|
|
|
+ // if iplib.Version(net.ParseIP(ip)) == 6 {
|
|
|
+ // relayAddr := net.IPNet{
|
|
|
+ // IP: net.ParseIP(ip),
|
|
|
+ // Mask: net.CIDRMask(128, 128),
|
|
|
+ // }
|
|
|
+ // allowedips = append(allowedips, relayAddr)
|
|
|
+ // }
|
|
|
+ // relayedNode, err := findNode(ip)
|
|
|
+ // if err != nil {
|
|
|
+ // logger.Log(1, "unable to find node for relayed address", ip, err.Error())
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // if relayedNode.IsEgressGateway == "yes" {
|
|
|
+ // extAllowedIPs := getEgressIPs(node, relayedNode)
|
|
|
+ // allowedips = append(allowedips, extAllowedIPs...)
|
|
|
+ // }
|
|
|
+ // if relayedNode.IsIngressGateway == "yes" {
|
|
|
+ // extPeers, _, err := getExtPeers(relayedNode)
|
|
|
+ // if err == nil {
|
|
|
+ // for _, extPeer := range extPeers {
|
|
|
+ // allowedips = append(allowedips, extPeer.AllowedIPs...)
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // logger.Log(0, "failed to retrieve extclients from relayed ingress", err.Error())
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
return allowedips
|
|
|
}
|
|
|
|