diff --git a/controllers/node.go b/controllers/node.go index b412d9cf..a7f12a53 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -645,6 +645,8 @@ func updateNode(w http.ResponseWriter, r *http.Request) { logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) return } + newNode.RelayedNodes = append(newNode.RelayedNodes, newNode.InetNodeReq.InetNodeClientIDs...) + newNode.RelayedNodes = logic.UniqueStrings(newNode.RelayedNodes) } relayUpdate := logic.RelayUpdates(¤tNode, newNode) if relayUpdate && newNode.IsRelay { diff --git a/logic/peers.go b/logic/peers.go index 9879c9ec..e7eb208e 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -330,7 +330,7 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N peerEndpoint = peerHost.EndpointIPv6 } } - if node.IsRelay && peer.RelayedBy == node.ID.String() && !peer.IsStatic { + if node.IsRelay && peer.RelayedBy == node.ID.String() && peer.InternetGwID == "" && !peer.IsStatic { // don't set endpoint on relayed peer peerEndpoint = nil } diff --git a/mq/publishers.go b/mq/publishers.go index 3542ef8c..a9712bcc 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -113,6 +113,13 @@ func PublishSingleHostPeerUpdate(host *models.Host, allNodes []models.Node, dele if err != nil { return err } + for _, nodeID := range host.Nodes { + + node, err := logic.GetNodeByID(nodeID) + if err == nil && node.Connected && node.InternetGwID != "" { + replacePeers = false + } + } peerUpdate.OldPeerUpdateFields = models.OldPeerUpdateFields{ NodePeers: peerUpdate.NodePeers, OldPeers: peerUpdate.Peers,