告诉绑定忽略转发器区域上的 SOA 域检查

告诉绑定忽略转发器区域上的 SOA 域检查

我遇到了一个奇怪的绑定问题。

前提:我正在使用安装在 pfSense 上的 bind(版本 9.16_11),但尽管如此,我几乎可以更改 bind 配置上的任何内容。

我配置了一个简单的前向区域,配置如下:

zone "dom001.my-domain.com" {
        type forward;
        forward only;
        forwarders { 192.168.29.10; };
};

现在,如果我尝试对此域中的主机执行 nslookup,则会出现错误。示例:

Non-authoritative answer:
Name:   mail2.dom001.my-domain.com
Address: 192.168.210.126
** server can't find mail2.dom001.my-domain.com: SERVFAIL

奇怪的是,答复收到了(您可以在响应中看到地址)但尽管如此,我看到了 SERVFAIL 错误。

另一件奇怪的事情是,dig 没有报告任何错误:

; <<>> DiG 9.16.6 <<>> mail2.dom001.my-domain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53129
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 3218b8a1b8f64565eb9bd6636124bf73640809a4347f3bcf (good)
;; QUESTION SECTION:
;mail2.dom001.my-domain.com. IN A

;; ANSWER SECTION:
mail2.dom001.my-domain.com. 30 IN A  192.168.210.126

;; Query time: 30 msec
;; SERVER: 172.16.0.2#53(172.16.0.2)
;; WHEN: Tue Aug 24 11:44:19 CEST 2021
;; MSG SIZE  rcvd: 110

在这些查询期间,我在 bind 的日志中看到一些“警告”:

Aug 24 10:42:58 named   19540   lame-servers: info: FORMERR resolving 'mail2.dom001.my-domain.com/AAAA/IN': 192.168.29.10#53
Aug 24 10:42:58 named   19540   resolver: notice: DNS format error from 192.168.29.10#53 resolving mail2.dom001.my-domain.com/AAAA for client 10.16.16.41#38299: Name cluster.local (SOA) not subdomain of zone dom001.my-domain.com -- invalid response

我进一步检查后发现,该问题似乎与转发服务器上的 SOA 记录有关:

;; QUESTION SECTION:
;mail2.dom001.my-domain.com. IN SOA

;; ANSWER SECTION:
cluster.local.          30      IN      SOA     ns.dns.cluster.local. hostmaster.cluster.local. 1629766398 7200 1800 86400 30

事实上答案是cluster.local而不是dom001.my-domain.com

此问题会导致奇怪的行为,具体取决于所使用的操作系统。例如,我发现大多数 Linux 服务器运行良好,而某些版本的 Alpine Linux 无法解析该域上的主机名。

即使服务器运行正常,由于这个问题,我的 bind 日志中还是充满了错误。

不幸的是我无法控制转发服务器并更改 SOA 记录。

我的问题是:如何配置绑定以忽略该转发器的 SOA 记录并接受答案,即使 SOA 不一致?

我知道这不是最好的解决方案,但我需要解决错误配置的转发器。

在此先感谢您的帮助!

答案1

我不相信 BIND 中有任何选项可以让它接受该答案,因为它似乎与查询无关。
看到这种不一致的答案绝对不是意料之中的事,我认为如果您真的想(暂时?)接受并传递这些答案(当然,客户端可能也不喜欢它们),您可能不得不考虑其他不以同样方式关心响应内容的软件。
(我怀疑 dnsdist 作为代理而不是递归器可以为您做到这一点。)

话虽如此,我想我可以稍微澄清一些困惑......

这种nslookup情况是基于如何nslookup默认发送两个单独的查询,一个用于A,一个用于AAAA
查询A成功,并且显然有相关A记录作为答案,AAAA查询失败,可能没有AAAA记录,因为否定响应总是伴随着(应该是)相关SOA记录,这可能会触发您描述的确切问题。

我希望,dig如果您让它发送相同的失败查询,您也可以重现该问题,因此您需要发送一个查询以AAAA获取nslookup与其两个查询之一相同的失败。

至于其他名称服务器的行为,实际上并不是“编辑”的情况,而更像是名称服务器软件中的某种逻辑错误。查找时SOA实际上不可能找到位于树的完全不同分支中的记录。cluster.localmail2.dom001.my-domain.com

相关内容