<div dir="ltr"><div>Running pdns-recursor 4.2.1, I'm encountering an issue where the pdns-recursor returns a SERVFAIL to the client on domains that are resolvable by pretty much any public DNS resolver - Level3, Google, OpenDNS, Comcast, etc.<br></div><div><br></div><div>I understand from tracing the query (rec_control trace-regex) and from reading that the default behavior of pdns-recursor is that if it receives a response that does not have the AA bit set, the answer is discarded and the next authoritative server for the domain is tried. This seems like a very reasonable default behavior and obvious from the recursor trace logs.</div><div><br></div><div>In reading <a href="https://github.com/PowerDNS/pdns/issues/8513">https://github.com/PowerDNS/pdns/issues/8513</a>, it appears the current ability in handling this is to configure forward-zones or forward-zones-recurse to treat the zone as a recursing zone and not require the AA bit set in replies. Obviously, this is less than desirable when the upstream dns server is external and the authoritative server addresses may change at any time without warning or coordination.</div><div><br></div><div>The question I have is if there is a configuration ability to remove the AA bit requirement for resolution? Or is the forward-zone configuration the only option available to handle this scenario? Of course other than the offending operator correcting their configuration.<br></div><div><br></div><div>Recursor trace output below...</div><div><br></div><div></div><div>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: accept answer '<a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>|A|161.7.129.10' from 'gov' nameservers? ttl=86400, place=3 YES!<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: accept answer '<a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>|A|161.7.38.10' from 'gov' nameservers? ttl=86400, place=3 YES!<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: accept answer '<a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>|A|161.7.38.11' from 'gov' nameservers? ttl=86400, place=3 YES!<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: OPT answer '.' from 'gov' nameservers<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] : got initial zone status Indeterminate for record <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>|A<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] : got initial zone status Indeterminate for record <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>|A<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] : got initial zone status Indeterminate for record <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>|A<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] : got initial zone status Indeterminate for record <a href="http://mt.gov">mt.gov</a>|NS<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: determining status after receiving this packet<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: got NS record '<a href="http://mt.gov">mt.gov</a>' -> '<a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>.'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: got NS record '<a href="http://mt.gov">mt.gov</a>' -> '<a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>.'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: got NS record '<a href="http://mt.gov">mt.gov</a>' -> '<a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>.'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: status=did not resolve, got 3 NS, looping to them<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>.: Nameservers: <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>(16.59ms), <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>(24.33ms), <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>(24.83ms)<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Trying to resolve NS '<a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>' (1/3)<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>: Wants NO DNSSEC processing, NO auth data in query for A<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>: Looking for CNAME cache hit of '<a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>|CNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>: Looking for DNAME cache hit of 'gov|DNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>: Looking for DNAME cache hit of '<a href="http://mt.gov">mt.gov</a>|DNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>: No CNAME or DNAME cache hit of '<a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>' found<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>: Found cache hit for A: 161.7.129.10[ttl=86400]<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a>: updating validation state with cache content for <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a> to Indeterminate<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Resolved '<a href="http://mt.gov">mt.gov</a>' NS <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a> to: 161.7.129.10<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Trying IP <a href="http://161.7.129.10:53">161.7.129.10:53</a>, asking '<a href="http://leg.mt.gov">leg.mt.gov</a>|A'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Got 2 answers from <a href="http://mtdnstri.mt.gov">mtdnstri.mt.gov</a> (161.7.129.10), rcode=0 (No Error), aa=0, in 54ms<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] Removing record '<a href="http://leg.mt.gov">leg.mt.gov</a>|A|161.7.35.124' in the answer section without the AA bit set received from <a href="http://mt.gov">mt.gov</a><br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: OPT answer '.' from '<a href="http://mt.gov">mt.gov</a>' nameservers<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: determining status after receiving this packet<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Trying to resolve NS '<a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>' (2/3)<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>: Wants NO DNSSEC processing, NO auth data in query for A<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>: Looking for CNAME cache hit of '<a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>|CNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>: Looking for DNAME cache hit of 'gov|DNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>: Looking for DNAME cache hit of '<a href="http://mt.gov">mt.gov</a>|DNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>: No CNAME or DNAME cache hit of '<a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>' found<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>: Found cache hit for A: 161.7.38.10[ttl=86400]<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a>: updating validation state with cache content for <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a> to Indeterminate<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Resolved '<a href="http://mt.gov">mt.gov</a>' NS <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a> to: 161.7.38.10<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Trying IP <a href="http://161.7.38.10:53">161.7.38.10:53</a>, asking '<a href="http://leg.mt.gov">leg.mt.gov</a>|A'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Got 2 answers from <a href="http://mtdnspri.mt.gov">mtdnspri.mt.gov</a> (161.7.38.10), rcode=0 (No Error), aa=0, in 81ms<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] Removing record '<a href="http://leg.mt.gov">leg.mt.gov</a>|A|161.7.35.124' in the answer section without the AA bit set received from <a href="http://mt.gov">mt.gov</a><br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: OPT answer '.' from '<a href="http://mt.gov">mt.gov</a>' nameservers<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: determining status after receiving this packet<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Trying to resolve NS '<a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>' (3/3)<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>: Wants NO DNSSEC processing, NO auth data in query for A<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>: Looking for CNAME cache hit of '<a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>|CNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>: Looking for DNAME cache hit of 'gov|DNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>: Looking for DNAME cache hit of '<a href="http://mt.gov">mt.gov</a>|DNAME'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>: No CNAME or DNAME cache hit of '<a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>' found<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>: Found cache hit for A: 161.7.38.11[ttl=86399]<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547]    <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a>: updating validation state with cache content for <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a> to Indeterminate<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Resolved '<a href="http://mt.gov">mt.gov</a>' NS <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a> to: 161.7.38.11<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Trying IP <a href="http://161.7.38.11:53">161.7.38.11:53</a>, asking '<a href="http://leg.mt.gov">leg.mt.gov</a>|A'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Got 2 answers from <a href="http://mtdnssec.mt.gov">mtdnssec.mt.gov</a> (161.7.38.11), rcode=0 (No Error), aa=0, in 81ms<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] Removing record '<a href="http://leg.mt.gov">leg.mt.gov</a>|A|161.7.35.124' in the answer section without the AA bit set received from <a href="http://mt.gov">mt.gov</a><br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: OPT answer '.' from '<a href="http://mt.gov">mt.gov</a>' nameservers<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: determining status after receiving this packet<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: Failed to resolve via any of the 3 offered NS at level '<a href="http://mt.gov">mt.gov</a>'<br>Apr 15 10:18:49 pdnsrbtest pdns_recursor[18430]: [2547] <a href="http://leg.mt.gov">leg.mt.gov</a>: failed (res=-1)<br></div><div><br></div><div><br></div><div>I appreciate any guidance.<br></div><div><br></div><div>Best,</div><div><br></div><div>--Caleb</div><div><br></div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Caleb Bontrager<br>Milford, DE</div><div><br></div></div></div></div></div></div></div>