Hi John.
Let me add that NOT restricting what the resolver accepts from the
forwarder would be a security hole. In fact is _was_ a security hole in
BIND, see
[CVE-2021-25220] DNS Cache Poisoning Vulnerability
https://gitlab.isc.org/isc-projects/bind9/-/issues/2950
In your example 'baz.local' subtree also needs to be configured as a
forwarder.
HTH.
Petr Špaček
Internet Systems Consortium
On 21. 08. 24 0:05, Greg Choules via bind-users wrote:
Hi John.
The reason is step 4c here:
https://datatracker.ietf.org/doc/html/rfc1034#section-5.3.3
<https://datatracker.ietf.org/doc/html/rfc1034#section-5.3.3>
The A record in the response is for a name that BIND wasn't asked for
(otherwise why a CNAME at all?), so in the interests of not just
believing random answers that might potentially poison the cache, BIND
needs to check for itself, even if the resulting fetch is sent to the
same forwarder.
Your resolver somehow needs to be able to get an answer to the target of
the CNAME. Not knowing your setup I can't say *how* it could do this.
But possibly by forwarding that name, or a (grand)parent of that domain
to another resolver that can get the answer for it?
Hope that helps.
Cheers, Greg
On Tue, 20 Aug 2024 at 21:28, John Thurston <john.thurs...@alaska.gov
<mailto:john.thurs...@alaska.gov>> wrote:
__
We are asked to forward queries for foo.example.com
<http://foo.example.com> to a set of private resolvers. So we have
something like this in our .conf
zone "foo.example.com <http://foo.example.com>" {type forward;
forward only;
forwarders { 10.1.2.3; 10.1.4.5; };
};
And when queried for an A-record for bar.foo.example.com
<http://bar.foo.example.com> (and the A-record exists), the query is
forwarded, the answer is received, cached, and returned to the customer.
But in the case where bar.foo.example.com
<http://bar.foo.example.com> is an alias to a record in some other
domain (e.g. foo.baz.local), the behavior is different.
With a packet capture, I can see the query being forwarded to one of
the targets (with the 'recursion desired' bit set). I can see the
reply coming back with the 'recursion available' bit set, and the
answer containing the CNAME, and the ultimate A-record. The distant
server has performed the requested recursion.
My recursive server does not, however, return the final A-record to
the customer. It attempts to resolve the intermediate CNAME, and
(since the CNAME is to another private domain of which I have no
knowledge) it fails. An NXDOMAIN is returned to the customer.
I understood the 'type forward' to be a 'hand off'. My server would
set the rd-bit, forward the query on, and accept (and return)
whatever answer was received. If I'm correctly interpreting what I
see, my server will accept whatever answer is received but only for
exactly the zone named in zone-statement. When the answer contains
an alias to some other domain, my server hands that name back into
its own recursing process.
Is there some way to configure BIND so it will simply pass back to
the customer whatever answer is received from the distant resolver?
--
Petr Špaček
--
Visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe from
this list
ISC funds the development of this software with paid support subscriptions.
Contact us at https://www.isc.org/contact/ for more information.
bind-users mailing list
bind-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/bind-users