|
@@ -3,10 +3,12 @@ package mq
|
|
import (
|
|
import (
|
|
"encoding/json"
|
|
"encoding/json"
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "log"
|
|
"net"
|
|
"net"
|
|
|
|
|
|
"github.com/gravitl/netmaker/logger"
|
|
"github.com/gravitl/netmaker/logger"
|
|
"github.com/gravitl/netmaker/logic"
|
|
"github.com/gravitl/netmaker/logic"
|
|
|
|
+ "github.com/gravitl/netmaker/logic/acls/nodeacls"
|
|
"github.com/gravitl/netmaker/models"
|
|
"github.com/gravitl/netmaker/models"
|
|
"github.com/gravitl/netmaker/servercfg"
|
|
"github.com/gravitl/netmaker/servercfg"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
@@ -41,14 +43,19 @@ func PubPeerUpdate(client, relay *models.Client, peers []models.Client) {
|
|
},
|
|
},
|
|
PersistentKeepaliveInterval: &peer.Node.PersistentKeepalive,
|
|
PersistentKeepaliveInterval: &peer.Node.PersistentKeepalive,
|
|
}
|
|
}
|
|
- update.AllowedIPs = append(update.AllowedIPs, logic.AddAllowedIPs(&peer)...)
|
|
|
|
|
|
+ if nodeacls.AreNodesAllowed(nodeacls.NetworkID(client.Node.Network), nodeacls.NodeID(client.Node.ID.String()), nodeacls.NodeID(peer.Node.ID.String())) {
|
|
|
|
+ log.Println("node allowed", client.Host.Name, peer.Host.Name)
|
|
|
|
+ update.AllowedIPs = append(update.AllowedIPs, logic.AddAllowedIPs(&peer)...)
|
|
|
|
+ } else {
|
|
|
|
+ log.Println("node not allowed", client.Host.Name, client.Node.Address, peer.Host.Name, peer.Node.Address)
|
|
|
|
+ }
|
|
if relay != nil {
|
|
if relay != nil {
|
|
if peer.Node.IsRelayed && peer.Node.RelayedBy == relay.Node.ID.String() {
|
|
if peer.Node.IsRelayed && peer.Node.RelayedBy == relay.Node.ID.String() {
|
|
update.Remove = true
|
|
update.Remove = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if peer.Node.IsRelay {
|
|
if peer.Node.IsRelay {
|
|
- update.AllowedIPs = append(update.AllowedIPs, getRelayAllowedIPs(peer)...)
|
|
|
|
|
|
+ update.AllowedIPs = append(update.AllowedIPs, getRelayAllowedIPs(*client, peer)...)
|
|
}
|
|
}
|
|
p.Peers = append(p.Peers, update)
|
|
p.Peers = append(p.Peers, update)
|
|
}
|
|
}
|
|
@@ -61,7 +68,7 @@ func PubPeerUpdate(client, relay *models.Client, peers []models.Client) {
|
|
}
|
|
}
|
|
|
|
|
|
// getRelayAllowedIPs returns the list of allowedips for a given peer that is a relay
|
|
// getRelayAllowedIPs returns the list of allowedips for a given peer that is a relay
|
|
-func getRelayAllowedIPs(peer models.Client) []net.IPNet {
|
|
|
|
|
|
+func getRelayAllowedIPs(client, peer models.Client) []net.IPNet {
|
|
var relayIPs []net.IPNet
|
|
var relayIPs []net.IPNet
|
|
for _, relayed := range peer.Node.RelayedNodes {
|
|
for _, relayed := range peer.Node.RelayedNodes {
|
|
node, err := logic.GetNodeByID(relayed)
|
|
node, err := logic.GetNodeByID(relayed)
|
|
@@ -69,6 +76,10 @@ func getRelayAllowedIPs(peer models.Client) []net.IPNet {
|
|
logger.Log(0, "retrieve relayed node", err.Error())
|
|
logger.Log(0, "retrieve relayed node", err.Error())
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
|
|
+ if !nodeacls.AreNodesAllowed(nodeacls.NetworkID(client.Node.Network), nodeacls.NodeID(client.Node.ID.String()), nodeacls.NodeID(node.ID.String())) {
|
|
|
|
+ log.Println("node not allowed", client.Host.Name, node.Address.IP)
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
if node.Address.IP != nil {
|
|
if node.Address.IP != nil {
|
|
node.Address.Mask = net.CIDRMask(32, 32)
|
|
node.Address.Mask = net.CIDRMask(32, 32)
|
|
relayIPs = append(relayIPs, node.Address)
|
|
relayIPs = append(relayIPs, node.Address)
|
|
@@ -78,7 +89,7 @@ func getRelayAllowedIPs(peer models.Client) []net.IPNet {
|
|
relayIPs = append(relayIPs, node.Address6)
|
|
relayIPs = append(relayIPs, node.Address6)
|
|
}
|
|
}
|
|
if node.IsRelay {
|
|
if node.IsRelay {
|
|
- relayIPs = append(relayIPs, getRelayAllowedIPs(peer)...)
|
|
|
|
|
|
+ relayIPs = append(relayIPs, getRelayAllowedIPs(client, peer)...)
|
|
}
|
|
}
|
|
if node.IsEgressGateway {
|
|
if node.IsEgressGateway {
|
|
relayIPs = append(relayIPs, getEgressIPs(peer)...)
|
|
relayIPs = append(relayIPs, getEgressIPs(peer)...)
|
|
@@ -192,7 +203,12 @@ func pubRelayedUpdate(client, relay *models.Client, peers []models.Client) {
|
|
if peer.Host.ID == relay.Host.ID || peer.Host.ID == client.Host.ID {
|
|
if peer.Host.ID == relay.Host.ID || peer.Host.ID == client.Host.ID {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- update.AllowedIPs = append(update.AllowedIPs, logic.AddAllowedIPs(&peer)...)
|
|
|
|
|
|
+ if nodeacls.AreNodesAllowed(nodeacls.NetworkID(client.Node.Network), nodeacls.NodeID(client.Node.ID.String()), nodeacls.NodeID(peer.Node.ID.String())) {
|
|
|
|
+ log.Println("node allowed", client.Host.Name, peer.Host.Name)
|
|
|
|
+ update.AllowedIPs = append(update.AllowedIPs, logic.AddAllowedIPs(&peer)...)
|
|
|
|
+ } else {
|
|
|
|
+ log.Println("node not allowed", client.Host.Name, peer.Host.Name)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
p.Peers = append(p.Peers, update)
|
|
p.Peers = append(p.Peers, update)
|
|
data, err = json.Marshal(p)
|
|
data, err = json.Marshal(p)
|