如果我使用类(不是类型!)查询本地递归BIND9 DNS!任何情况下,它都会递归地向转发器发送一个查询,但是使用class = 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
};发布于 2017-02-03 11:42:57
有趣的角落案子。
撇开“你为什么要那么做?”问题是,我认为答案是,使用QCLASS ANY的递归实际上并没有很好地定义。
RFC 1035指定NS记录保存关于名称服务器的数据“用于指定的类和域”(RFC 1035节3.3.11)。这意味着对于不同的类,可能存在不同的NS RRSets。这又意味着,到达具有不同集合的点的递归必须从两组名称服务器中分离并继续进行。没有将这种拆分递归的结果合并为单个响应的定义过程,单个递归不能有多个响应。所以,不是一个明确的过程。另外,RFCs 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,“名称服务器无法解释查询”)。
https://stackoverflow.com/questions/42003005
复制相似问题