mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-18 16:26:38 +00:00
[client] Fix dns ipv6 upstream (#4257)
This commit is contained in:
@@ -586,10 +586,7 @@ func (s *DefaultServer) registerFallback(config HostDNSConfig) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
ns = fmt.Sprintf("%s:%d", ns, defaultPort)
|
ns = formatAddr(ns, defaultPort)
|
||||||
if ip, err := netip.ParseAddr(ns); err == nil && ip.Is6() {
|
|
||||||
ns = fmt.Sprintf("[%s]:%d", ns, defaultPort)
|
|
||||||
}
|
|
||||||
|
|
||||||
handler.upstreamServers = append(handler.upstreamServers, ns)
|
handler.upstreamServers = append(handler.upstreamServers, ns)
|
||||||
}
|
}
|
||||||
@@ -774,7 +771,15 @@ func (s *DefaultServer) updateMux(muxUpdates []handlerWrapper) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getNSHostPort(ns nbdns.NameServer) string {
|
func getNSHostPort(ns nbdns.NameServer) string {
|
||||||
return fmt.Sprintf("%s:%d", ns.IP.String(), ns.Port)
|
return formatAddr(ns.IP.String(), ns.Port)
|
||||||
|
}
|
||||||
|
|
||||||
|
// formatAddr formats a nameserver address with port, handling IPv6 addresses properly
|
||||||
|
func formatAddr(address string, port int) string {
|
||||||
|
if ip, err := netip.ParseAddr(address); err == nil && ip.Is6() {
|
||||||
|
return fmt.Sprintf("[%s]:%d", address, port)
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s:%d", address, port)
|
||||||
}
|
}
|
||||||
|
|
||||||
// upstreamCallbacks returns two functions, the first one is used to deactivate
|
// upstreamCallbacks returns two functions, the first one is used to deactivate
|
||||||
|
|||||||
@@ -2053,3 +2053,56 @@ func TestLocalResolverPriorityConstants(t *testing.T) {
|
|||||||
assert.Equal(t, PriorityLocal, localMuxUpdates[0].priority, "Local handler should use PriorityLocal")
|
assert.Equal(t, PriorityLocal, localMuxUpdates[0].priority, "Local handler should use PriorityLocal")
|
||||||
assert.Equal(t, "local.example.com", localMuxUpdates[0].domain)
|
assert.Equal(t, "local.example.com", localMuxUpdates[0].domain)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFormatAddr(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
address string
|
||||||
|
port int
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "IPv4 address",
|
||||||
|
address: "8.8.8.8",
|
||||||
|
port: 53,
|
||||||
|
expected: "8.8.8.8:53",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "IPv4 address with custom port",
|
||||||
|
address: "1.1.1.1",
|
||||||
|
port: 5353,
|
||||||
|
expected: "1.1.1.1:5353",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "IPv6 address",
|
||||||
|
address: "fd78:94bf:7df8::1",
|
||||||
|
port: 53,
|
||||||
|
expected: "[fd78:94bf:7df8::1]:53",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "IPv6 address with custom port",
|
||||||
|
address: "2001:db8::1",
|
||||||
|
port: 5353,
|
||||||
|
expected: "[2001:db8::1]:5353",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "IPv6 localhost",
|
||||||
|
address: "::1",
|
||||||
|
port: 53,
|
||||||
|
expected: "[::1]:53",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Invalid address treated as hostname",
|
||||||
|
address: "dns.example.com",
|
||||||
|
port: 53,
|
||||||
|
expected: "dns.example.com:53",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
result := formatAddr(tt.address, tt.port)
|
||||||
|
assert.Equal(t, tt.expected, result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user