From 7dff0e2f70e40a2461286bfb22a98e3a8bfbd5e7 Mon Sep 17 00:00:00 2001 From: Viktor Liu Date: Tue, 7 Apr 2026 18:40:09 +0200 Subject: [PATCH] Keep successful DNS answers when only one address family query fails --- client/internal/routemanager/dynamic/route_ios.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/client/internal/routemanager/dynamic/route_ios.go b/client/internal/routemanager/dynamic/route_ios.go index 6498bd77f..1ae281d56 100644 --- a/client/internal/routemanager/dynamic/route_ios.go +++ b/client/internal/routemanager/dynamic/route_ios.go @@ -26,6 +26,7 @@ func (r *Route) getIPsFromResolver(domain domain.Domain) ([]net.IP, error) { startTime := time.Now() var ips []net.IP + var queryErr error for _, qtype := range []uint16{dns.TypeA, dns.TypeAAAA} { msg := new(dns.Msg) @@ -33,7 +34,10 @@ func (r *Route) getIPsFromResolver(domain domain.Domain) ([]net.IP, error) { response, _, err := nbdns.ExchangeWithFallback(nil, privateClient, msg, r.resolverAddr.String()) if err != nil { - return nil, fmt.Errorf("DNS query for %s (type %d) after %s: %s", domain.SafeString(), qtype, time.Since(startTime), err) + if queryErr == nil { + queryErr = fmt.Errorf("DNS query for %s (type %d) after %s: %w", domain.SafeString(), qtype, time.Since(startTime), err) + } + continue } if response.Rcode != dns.RcodeSuccess { @@ -51,6 +55,9 @@ func (r *Route) getIPsFromResolver(domain domain.Domain) ([]net.IP, error) { } if len(ips) == 0 { + if queryErr != nil { + return nil, queryErr + } return nil, fmt.Errorf("no A or AAAA records found for %s", domain.SafeString()) }