mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-13 22:47:30 +00:00
wgengine/magicsock: disable Peer Relay if CryptoRouting is disabled
Updates tailscale/corp#31083 Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
@@ -2982,6 +2982,10 @@ func (c *Conn) onNodeViewsUpdate(update NodeViewsUpdate) {
|
||||
peersChanged := c.updateNodes(update)
|
||||
|
||||
relayClientEnabled := update.SelfNode.Valid() &&
|
||||
// Peer Relay depends on CryptoRouting in [Conn.receiveIP]. If
|
||||
// CryptoRouting is disabled, then Peer Relay MUST also be disabled to
|
||||
// avoid traffic blackholes. See http://go/corp/31083.
|
||||
!update.SelfNode.HasCap(tailcfg.NodeAttrDisableMagicSockCryptoRouting) &&
|
||||
!update.SelfNode.HasCap(tailcfg.NodeAttrDisableRelayClient) &&
|
||||
!update.SelfNode.HasCap(tailcfg.NodeAttrOnlyTCP443)
|
||||
|
||||
|
@@ -3625,6 +3625,10 @@ func TestConn_onNodeViewsUpdate_updateRelayServersSet(t *testing.T) {
|
||||
selfNodeNodeAttrOnlyTCP443.CapMap = make(tailcfg.NodeCapMap)
|
||||
selfNodeNodeAttrOnlyTCP443.CapMap[tailcfg.NodeAttrOnlyTCP443] = nil
|
||||
|
||||
selfNodeNodeAttrDisableMagicSockCryptoRouting := selfNode.Clone()
|
||||
selfNodeNodeAttrDisableMagicSockCryptoRouting.CapMap = make(tailcfg.NodeCapMap)
|
||||
selfNodeNodeAttrDisableMagicSockCryptoRouting.CapMap[tailcfg.NodeAttrDisableMagicSockCryptoRouting] = nil
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
filt *filter.Filter
|
||||
@@ -3693,6 +3697,24 @@ func TestConn_onNodeViewsUpdate_updateRelayServersSet(t *testing.T) {
|
||||
wantRelayServers: make(set.Set[candidatePeerRelay]),
|
||||
wantRelayClientEnabled: false,
|
||||
},
|
||||
{
|
||||
name: "no candidate relay server because self has tailcfg.NodeAttrDisableMagicSockCryptoRouting",
|
||||
filt: filter.New([]filtertype.Match{
|
||||
{
|
||||
Srcs: peerNodeCandidateRelay.Addresses,
|
||||
Caps: []filtertype.CapMatch{
|
||||
{
|
||||
Dst: selfNodeNodeAttrDisableMagicSockCryptoRouting.Addresses[0],
|
||||
Cap: tailcfg.PeerCapabilityRelayTarget,
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil, nil, nil, nil, nil),
|
||||
self: selfNodeNodeAttrDisableMagicSockCryptoRouting.View(),
|
||||
peers: []tailcfg.NodeView{peerNodeCandidateRelay.View()},
|
||||
wantRelayServers: make(set.Set[candidatePeerRelay]),
|
||||
wantRelayClientEnabled: false,
|
||||
},
|
||||
{
|
||||
name: "self candidate relay server",
|
||||
filt: filter.New([]filtertype.Match{
|
||||
|
Reference in New Issue
Block a user