diff --git a/dns/client.go b/dns/client.go index 585c541e..c1c98c79 100644 --- a/dns/client.go +++ b/dns/client.go @@ -214,7 +214,7 @@ func (c *Client) Exchange(ctx context.Context, transport adapter.DNSTransport, m response.Answer = append(response.Answer, validResponse.Answer...) } }*/ - disableCache = disableCache || response.Rcode != dns.RcodeSuccess || len(response.Answer) == 0 + disableCache = disableCache || (response.Rcode != dns.RcodeSuccess && response.Rcode != dns.RcodeNameError) || len(response.Answer) == 0 if responseChecker != nil { var rejected bool // TODO: add accept_any rule and support to check response instead of addresses @@ -364,14 +364,18 @@ func (c *Client) LookupCache(domain string, strategy C.DomainStrategy) ([]netip. Qtype: dns.TypeA, Qclass: dns.ClassINET, }, nil) + if response4 == nil { + return nil, false + } response6, _ := c.loadResponse(dns.Question{ Name: dnsName, Qtype: dns.TypeAAAA, Qclass: dns.ClassINET, }, nil) - if response4 != nil || response6 != nil { - return sortAddresses(MessageToAddresses(response4), MessageToAddresses(response6), strategy), true + if response6 == nil { + return nil, false } + return sortAddresses(MessageToAddresses(response4), MessageToAddresses(response6), strategy), true } return nil, false }