Skip to content

Commit 7f08983

Browse files
authored
Include expired and routing peers in DNS record filtering (#4708)
1 parent eddea14 commit 7f08983

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

management/server/types/account.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ func (a *Account) GetPeerNetworkMap(
301301
if dnsManagementStatus {
302302
var zones []nbdns.CustomZone
303303
if peersCustomZone.Domain != "" {
304-
records := filterZoneRecordsForPeers(peer, peersCustomZone, peersToConnect)
304+
records := filterZoneRecordsForPeers(peer, peersCustomZone, peersToConnectIncludingRouters, expiredPeers)
305305
zones = append(zones, nbdns.CustomZone{
306306
Domain: peersCustomZone.Domain,
307307
Records: records,
@@ -1682,7 +1682,7 @@ func peerSupportsPortRanges(peerVer string) bool {
16821682
}
16831683

16841684
// filterZoneRecordsForPeers filters DNS records to only include peers to connect.
1685-
func filterZoneRecordsForPeers(peer *nbpeer.Peer, customZone nbdns.CustomZone, peersToConnect []*nbpeer.Peer) []nbdns.SimpleRecord {
1685+
func filterZoneRecordsForPeers(peer *nbpeer.Peer, customZone nbdns.CustomZone, peersToConnect, expiredPeers []*nbpeer.Peer) []nbdns.SimpleRecord {
16861686
filteredRecords := make([]nbdns.SimpleRecord, 0, len(customZone.Records))
16871687
peerIPs := make(map[string]struct{})
16881688

@@ -1693,6 +1693,10 @@ func filterZoneRecordsForPeers(peer *nbpeer.Peer, customZone nbdns.CustomZone, p
16931693
peerIPs[peerToConnect.IP.String()] = struct{}{}
16941694
}
16951695

1696+
for _, expiredPeer := range expiredPeers {
1697+
peerIPs[expiredPeer.IP.String()] = struct{}{}
1698+
}
1699+
16961700
for _, record := range customZone.Records {
16971701
if _, exists := peerIPs[record.RData]; exists {
16981702
filteredRecords = append(filteredRecords, record)

management/server/types/account_test.go

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,7 @@ func Test_FilterZoneRecordsForPeers(t *testing.T) {
845845
peer *nbpeer.Peer
846846
customZone nbdns.CustomZone
847847
peersToConnect []*nbpeer.Peer
848+
expiredPeers []*nbpeer.Peer
848849
expectedRecords []nbdns.SimpleRecord
849850
}{
850851
{
@@ -857,6 +858,7 @@ func Test_FilterZoneRecordsForPeers(t *testing.T) {
857858
},
858859
},
859860
peersToConnect: []*nbpeer.Peer{},
861+
expiredPeers: []*nbpeer.Peer{},
860862
peer: &nbpeer.Peer{ID: "router", IP: net.ParseIP("10.0.0.100")},
861863
expectedRecords: []nbdns.SimpleRecord{
862864
{Name: "router.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.100"},
@@ -890,7 +892,8 @@ func Test_FilterZoneRecordsForPeers(t *testing.T) {
890892
}
891893
return peers
892894
}(),
893-
peer: &nbpeer.Peer{ID: "router", IP: net.ParseIP("10.0.0.100")},
895+
expiredPeers: []*nbpeer.Peer{},
896+
peer: &nbpeer.Peer{ID: "router", IP: net.ParseIP("10.0.0.100")},
894897
expectedRecords: func() []nbdns.SimpleRecord {
895898
var records []nbdns.SimpleRecord
896899
for _, i := range []int{1, 5, 10, 25, 50, 75, 100} {
@@ -924,7 +927,8 @@ func Test_FilterZoneRecordsForPeers(t *testing.T) {
924927
{ID: "peer1", IP: net.ParseIP("10.0.0.1"), DNSLabel: "peer1", ExtraDNSLabels: []string{"peer1-alt", "peer1-backup"}},
925928
{ID: "peer2", IP: net.ParseIP("10.0.0.2"), DNSLabel: "peer2", ExtraDNSLabels: []string{"peer2-service"}},
926929
},
927-
peer: &nbpeer.Peer{ID: "router", IP: net.ParseIP("10.0.0.100")},
930+
expiredPeers: []*nbpeer.Peer{},
931+
peer: &nbpeer.Peer{ID: "router", IP: net.ParseIP("10.0.0.100")},
928932
expectedRecords: []nbdns.SimpleRecord{
929933
{Name: "peer1.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.1"},
930934
{Name: "peer1-alt.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.1"},
@@ -934,11 +938,35 @@ func Test_FilterZoneRecordsForPeers(t *testing.T) {
934938
{Name: "router.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.100"},
935939
},
936940
},
941+
{
942+
name: "expired peers are included in DNS entries",
943+
customZone: nbdns.CustomZone{
944+
Domain: "netbird.cloud.",
945+
Records: []nbdns.SimpleRecord{
946+
{Name: "peer1.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.1"},
947+
{Name: "peer2.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.2"},
948+
{Name: "expired-peer.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.99"},
949+
{Name: "router.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.100"},
950+
},
951+
},
952+
peersToConnect: []*nbpeer.Peer{
953+
{ID: "peer1", IP: net.ParseIP("10.0.0.1")},
954+
},
955+
expiredPeers: []*nbpeer.Peer{
956+
{ID: "expired-peer", IP: net.ParseIP("10.0.0.99")},
957+
},
958+
peer: &nbpeer.Peer{ID: "router", IP: net.ParseIP("10.0.0.100")},
959+
expectedRecords: []nbdns.SimpleRecord{
960+
{Name: "peer1.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.1"},
961+
{Name: "expired-peer.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.99"},
962+
{Name: "router.netbird.cloud", Type: int(dns.TypeA), Class: nbdns.DefaultClass, TTL: 300, RData: "10.0.0.100"},
963+
},
964+
},
937965
}
938966

939967
for _, tt := range tests {
940968
t.Run(tt.name, func(t *testing.T) {
941-
result := filterZoneRecordsForPeers(tt.peer, tt.customZone, tt.peersToConnect)
969+
result := filterZoneRecordsForPeers(tt.peer, tt.customZone, tt.peersToConnect, tt.expiredPeers)
942970
assert.Equal(t, len(tt.expectedRecords), len(result))
943971
assert.ElementsMatch(t, tt.expectedRecords, result)
944972
})

0 commit comments

Comments
 (0)