From 284f10b296eb5cb64ea9dc81fd10371e055e0bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Tue, 22 Apr 2025 23:08:24 +0800 Subject: [PATCH] Fix DNS Lookup --- dns/client.go | 9 ++++++--- dns/router.go | 3 +-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dns/client.go b/dns/client.go index f456f878..2cf75da6 100644 --- a/dns/client.go +++ b/dns/client.go @@ -268,10 +268,13 @@ func (c *Client) Lookup(ctx context.Context, transport adapter.DNSTransport, dom return nil }) err := group.Run(ctx) - if len(response4) == 0 && len(response6) == 0 { + if len(response4) > 0 || len(response6) > 0 { + return sortAddresses(response4, response6, options.Strategy), nil + } else if err != nil { return nil, err + } else { + return nil, RcodeError(dns.RcodeNameError) } - return sortAddresses(response4, response6, options.Strategy), nil } func (c *Client) ClearCache() { @@ -483,7 +486,7 @@ func (c *Client) loadResponse(question dns.Question, transport adapter.DNSTransp } func MessageToAddresses(response *dns.Msg) ([]netip.Addr, error) { - if response.Rcode != dns.RcodeSuccess && response.Rcode != dns.RcodeNameError { + if response.Rcode != dns.RcodeSuccess { return nil, RcodeError(response.Rcode) } addresses := make([]netip.Addr, 0, len(response.Answer)) diff --git a/dns/router.go b/dns/router.go index 44edadbd..dbfdcfb8 100644 --- a/dns/router.go +++ b/dns/router.go @@ -332,8 +332,7 @@ func (r *Router) Lookup(ctx context.Context, domain string, options adapter.DNSQ r.logger.ErrorContext(ctx, E.Cause(err, "lookup failed for ", domain)) } } else if len(responseAddrs) == 0 { - r.logger.ErrorContext(ctx, "lookup failed for ", domain, ": empty result") - err = RcodeNameError + panic("unexpected empty result") } } responseAddrs, cached = r.client.LookupCache(domain, options.Strategy)