|
@@ -13,7 +13,6 @@ import (
|
|
|
"github.com/gravitl/netmaker/logic"
|
|
|
"github.com/gravitl/netmaker/models"
|
|
|
"github.com/gravitl/netmaker/servercfg"
|
|
|
- "github.com/kr/pretty"
|
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
|
)
|
|
|
|
|
@@ -532,164 +531,6 @@ func sendPeers() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func PubPeersforRelay(relay models.Client, peers []models.Client) {
|
|
|
- for _, peer := range peers {
|
|
|
- if peer.Host.ID == relay.Host.ID {
|
|
|
- continue
|
|
|
- }
|
|
|
- update := wgtypes.PeerConfig{
|
|
|
- PublicKey: peer.Host.PublicKey,
|
|
|
- ReplaceAllowedIPs: true,
|
|
|
- Endpoint: &net.UDPAddr{
|
|
|
- IP: peer.Host.EndpointIP,
|
|
|
- Port: peer.Host.ListenPort,
|
|
|
- },
|
|
|
- }
|
|
|
- if peer.Node.Address.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, relay.Node.Address)
|
|
|
- }
|
|
|
- if peer.Node.Address6.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, relay.Node.Address6)
|
|
|
- }
|
|
|
- update.PersistentKeepaliveInterval = &relay.Node.PersistentKeepalive
|
|
|
- data, err := json.Marshal(update)
|
|
|
- if err != nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- pretty.Println("publishing peer update for relay", update)
|
|
|
- publish(&relay.Host, fmt.Sprintf("peer/host/%s/%s", relay.Host.ID.String(), servercfg.GetServer()), data)
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-func PubPeersForRelayedNode(relayed, relay models.Client, peers []models.Client) {
|
|
|
- update := wgtypes.PeerConfig{
|
|
|
- PublicKey: relay.Host.PublicKey,
|
|
|
- ReplaceAllowedIPs: true,
|
|
|
- Endpoint: &net.UDPAddr{
|
|
|
- IP: relay.Host.EndpointIP,
|
|
|
- Port: relay.Host.ListenPort,
|
|
|
- },
|
|
|
- }
|
|
|
- if relayed.Node.Address.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, relayed.Node.Address)
|
|
|
- }
|
|
|
- if relayed.Node.Address6.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, relayed.Node.Address6)
|
|
|
- }
|
|
|
- update.PersistentKeepaliveInterval = &relayed.Node.PersistentKeepalive
|
|
|
-
|
|
|
- for _, peer := range peers {
|
|
|
- if peer.Node.Address.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, peer.Node.Address)
|
|
|
- }
|
|
|
- if peer.Node.Address6.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, peer.Node.Address6)
|
|
|
- }
|
|
|
- if peer.Node.IsEgressGateway {
|
|
|
- for _, egressRange := range peer.Node.EgressGatewayRanges {
|
|
|
- ip, cidr, err := net.ParseCIDR(egressRange)
|
|
|
- if err != nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, net.IPNet{IP: ip, Mask: cidr.Mask})
|
|
|
- }
|
|
|
- }
|
|
|
- if peer.Node.IsIngressGateway {
|
|
|
- extclients, err := logic.GetNetworkExtClients(peer.Node.Network)
|
|
|
- if err != nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- for _, ec := range extclients {
|
|
|
- if ec.IngressGatewayID == peer.Node.ID.String() {
|
|
|
- ip, cidr, err := net.ParseCIDR(ec.Address)
|
|
|
- if err != nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, net.IPNet{IP: ip, Mask: cidr.Mask})
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- data, err := json.Marshal(update)
|
|
|
- if err != nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- pretty.Println("publishing peer update for relayed node", update)
|
|
|
- publish(&relayed.Host, fmt.Sprintf("peer/host/%s/%s", relayed.Host.ID.String(), servercfg.GetServer()), data)
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-func PubPeersForUnrelayedNode(client, relay *models.Client, peers, relayedClients *[]models.Client) {
|
|
|
- for _, peer := range *peers {
|
|
|
- // remove nodes relayed by the relay from list of peers
|
|
|
- if peer.Node.RelayedBy == relay.Host.ID.String() {
|
|
|
- update := wgtypes.PeerConfig{
|
|
|
- PublicKey: peer.Host.PublicKey,
|
|
|
- Remove: true,
|
|
|
- }
|
|
|
- data, err := json.Marshal(update)
|
|
|
- if err != nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- pretty.Println("publishing peer update for relayed node", update)
|
|
|
- publish(&client.Host, fmt.Sprintf("peer/host/%s/%s", client.Host.ID.String(), servercfg.GetServer()), data)
|
|
|
- // add relay addresses and all rela1yed nodes
|
|
|
- } else if peer.Host.ID == relay.Host.ID {
|
|
|
- update := wgtypes.PeerConfig{
|
|
|
- PublicKey: relay.Host.PublicKey,
|
|
|
- ReplaceAllowedIPs: true,
|
|
|
- Endpoint: &net.UDPAddr{
|
|
|
- IP: relay.Host.EndpointIP,
|
|
|
- Port: relay.Host.ListenPort,
|
|
|
- },
|
|
|
- PersistentKeepaliveInterval: &relay.Node.PersistentKeepalive,
|
|
|
- }
|
|
|
-
|
|
|
- if relay.Node.Address.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, relay.Node.Address)
|
|
|
- }
|
|
|
- if relay.Node.Address6.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, relay.Node.Address6)
|
|
|
- }
|
|
|
- for _, peer := range *relayedClients {
|
|
|
- if peer.Node.Address.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, peer.Node.Address)
|
|
|
- }
|
|
|
- if peer.Node.Address6.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, peer.Node.Address6)
|
|
|
- }
|
|
|
- }
|
|
|
- data, err := json.Marshal(update)
|
|
|
- if err == nil {
|
|
|
- pretty.Println("publishing peer update for relayed node", update)
|
|
|
- publish(&relay.Host, fmt.Sprintf("peer/host/%s/%s", relay.Host.ID.String(), servercfg.GetServer()), data)
|
|
|
- }
|
|
|
- return
|
|
|
- } else {
|
|
|
- update := wgtypes.PeerConfig{
|
|
|
- PublicKey: peer.Host.PublicKey,
|
|
|
- ReplaceAllowedIPs: true,
|
|
|
- Endpoint: &net.UDPAddr{
|
|
|
- IP: peer.Host.EndpointIP,
|
|
|
- Port: peer.Host.ListenPort,
|
|
|
- },
|
|
|
- PersistentKeepaliveInterval: &peer.Node.PersistentKeepalive,
|
|
|
- }
|
|
|
- if peer.Node.Address.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, peer.Node.Address)
|
|
|
- }
|
|
|
- if peer.Node.Address6.IP != nil {
|
|
|
- update.AllowedIPs = append(update.AllowedIPs, peer.Node.Address6)
|
|
|
- }
|
|
|
- data, err := json.Marshal(update)
|
|
|
- if err == nil {
|
|
|
- pretty.Println("publishing peer update for unrelayed node", update)
|
|
|
- publish(&client.Host, fmt.Sprintf("peer/host/%s/%s", client.Host.ID.String(), servercfg.GetServer()), data)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
func PubPeerUpdate(client, relay *models.Client, peers *[]models.Client) {
|
|
|
fmt.Println("calculating peer update for", client.Host.Name, " with relay ")
|
|
|
if relay != nil {
|