0

如果我使用类(不是类型!)ANY 对本地递归 BIND9 DNS 进行查询,它会递归地向转发器发送查询,但类 = IN。如何让他发送与我发送的相同类的递归查询?可能吗?

我想要的是:

****** QUERY WITH CLASS "ANY" *********************** CLASS "ANY" *************
* ME *----------------------->* Local Recursive DNS *------------>* FORWARDER *
******                        ***********************             *************

实际发生的情况:

****** QUERY WITH CLASS "ANY" *********************** CLASS "IN" *************
* ME *----------------------->* Local Recursive DNS *----------->* FORWARDER *
******                        ***********************            *************

配置是

options {
    directory "/var/cache/bind";

    allow-query { any; };

    forwarders {
            8.8.8.8
    };
    forward only;

    listen-on {
            ...
    };

    auth-nxdomain no;    # conform to RFC1035
};
4

1 回答 1

1

有趣的角落案例。

撇开整个“你为什么要这样做?” 事情,我认为答案是它实际上并没有很好地定义递归的QCLASS ANY含义。

RFC 1035 指定NS记录包含有关“指定类和域”的名称服务器的数据(RFC 1035 第 3.3.11 节)。这意味着不同的类可能有不同的 NS RRSet。这反过来意味着递归到达具有如此不同集合的点将不得不从两组名称服务器拆分并继续。没有定义的过程可以将这种拆分递归的结果合并为单个响应,并且单个递归不能有多个响应。所以,不是一个定义明确的过程。还有一个复杂的问题是 RFC 1034 和 1035 都指定对查询的响应永远不能是权威的。QCLASS ANY

dig ns -c CH www.google.com +trace通过比较 和 的输出,您可以相当清楚地了解会发生什么dig ns -c IN www.google.com +trace,并尝试想象将这两者作为同一查找过程的一部分意味着什么。这真的没有意义。

我怀疑,您从 BIND 看到的确切行为仅仅是没有人尝试实现ANY QCLASS递归的结果。可以合理地辩称,您的查询变成查询是一个错误IN,并且更正确的响应将是FORMERR(RFC 1035 第 4.1.1 节,“名称服务器无法解释查询”)。

于 2017-02-03T11:42:57.090 回答