Robert Edmonds wrote:
Paul Vixie wrote:
the implication of REFUSED is that if someone else asked this question, we
might be able to answer. so if BIND is doing what you say, it's wrong.
In theory, any authoritative nameserver could secretly also be a
resolver that will answer from cache if the right client sends it the
same question. Does that make it OK, then?
no, because it can, should, and probably will have different responses
and different reasons for those responses based on the query's RD value.
in this sense, we (i was at ISC when it happened) got
"allow-query-cache" almost precisely wrong. with what confusion, you can
now witness.
The REFUSED RCODE is documented as:
Refused - The name server refuses to perform the specified operation
for policy reasons. For example, a name server may not wish to
provide the information to the particular requester, or a name
server may not wish to perform a particular operation (e.g., zone
transfer) for particular data.
In this case the server's policy would be that it doesn't perform a
particular operation (i.e., QUERY) for particular data (i.e., data that
it's not authoritative for).
if the reason were due to something about the specified operation such
as the RD bit (like, it's 1 when it has to be 0) then i'd follow your
reasoning here.
Where does the implication that REFUSED is only appropriate if the
server might be able to answer if "someone else" asks the question come
from?
first, the example, "provide the information to the particular
requester". as in, some other requester might get a non-REFUSED answer.
second, the example, "zone transfer". when i added my very first BIND4
feature it was "allow-xfer" and i did indeed return REFUSED when asked
by someone who wasn't allowed. this also happens on TSIG failures today.
third, the differences and distinctions in initiator behaviour. there is
no difference in desired or expected initiator behaviour between "i am
out of disk space and can't write a secondary zone file, so while i am
configured to be a secondary server for this zone, i can't do it", vs.
"i am configured to be a primary server for this zone but there is no
zone file so i can't do it", vs. "i am not configured to be a server for
this zone and either RA=0 or RD=0 or both".
in all three cases, we want the initiator to cache our inability to
satisfy it so as not to melt the tubez with repeated (doomed) requests,
try other name servers (but not other addresses for this name server),
and retry here later (after, say, ten minutes) in case the situation
improves. the only hoped-for reason i can imagine for sending SERVFAIL
in the first two cases and REFUSED in the last case is to control the
logging on the initiator -- expecting the sysadmin to behave differently
when cleaning up the resulting mess.
using REFUSED vs. SERVFAIL in this case is a distinction without a
difference, and a costly one, because REFUSED actually has a different
intended reaction in the initiator than SERVFAIL. but i've covered that
in the archives (several times) and won't repeat it again here.
--
P Vixie
_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop