【问题标题】:How to make BIND DNS recursively send a query with CLASS = ANY (255)?如何使 BIND DNS 递归发送 CLASS = ANY (255) 的查询?
【发布时间】:2023-03-30 14:03:02
【问题描述】:

如果我使用类(不是类型!)ANY 对本地递归 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
};

【问题讨论】:

    标签: recursion dns bind9


    【解决方案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 +tracedig ns -c IN www.google.com +trace 的输出,并尝试想象将这两者作为同一查找过程的一部分意味着什么,就可以相当清楚地了解会发生什么。这真的没有意义。

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

    【讨论】:

    • 谢谢Calle,它很好地解释了这种行为!
    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多