cached rr not provided to recursive clients

Kevin Darcy kcd at daimlerchrysler.com
Tue Mar 2 21:29:37 UTC 2004


Ladislav Vobr wrote:

>I have noticed that bind 9.2.3, albeit having the rr's in the cache as a 
>glue from parent, doesn't provide it to recursive clients, but only to 
>nonrecursive (dig +norec), in case authoritative servers are down.
>
>Most probably bind is trying to verify with the authoritative servers, 
>and without their reply it refuses to provided the data to but only to 
>recursive clients.
>
>Can someone elaborate what are the conditions/verifications/checks 
>required to provide recursive clients cached rrs'? What is the reasoning 
>behind this behavior?
>
>This seems to be a topic of a minor interest, since I have raised 
>several times without much success, but I think I am not the first guy 
>who dumped the cache and see the rr data there, wondering why bind 
>doesn't provide it. Are those non-responding authoritative nameservers 
>considered lame? No, not for bind9 they are not lame since it doesn't 
>log them in the lame.log...
>
Ladislav,
This behavior is the combined result of a) the distinction between 
recursive and iterative resolution and b) the design principle of DNS 
that answers to the same question should be as consistent as possible, 
even in the face of failures in the system.

When a DNS query is made recursively, it is essentially saying "do 
everything you can to get me the answer to this question, because I'm 
relying on you totally for the answer". Therefore the recursive resolver 
tries to get the answer by asking the authoritative servers. If they are 
down or unreachable, the query may time out, the client times out, life 
goes on.

When, on the other hand, a DNS query is made non-recursively, it 
essentially says "give me the best information you have about this name 
without recursing; if the response you give is incomplete or 
untrustworthy, that's OK because I'll just use your information to get 
the real data by myself". Therefore the recursive resolver gives out 
referral/glue information if that's all it happens to have.

Follow me so far? A recursive and a non-recursive query for the same 
RRset may generate different results, depending on what the responding 
resolver happens to have cached. This is normal and natural as the DNS 
protocol is designed.

Now, you seem to be implying that for a recursive query, the resolver 
should first try to get the answer from the authoritative servers, but, 
after a short timeout (shorter than the client's timeout!) it should 
give up and return glue information instead, if it has any. But that 
violates the consistency principle. It means that, in 
intermittent-connectivity situations, the same recursive query could get 
*different* answers -- sometimes glue, sometimes answers from the 
authoritative servers -- even though the base DNS data has not changed 
in any way. Such behavior would play havoc with any attempt to 
troubleshoot such a problem, and as a whole makes the DNS infrastructure 
seem unreliable.

- Kevin




More information about the bind-users mailing list