我遇到了一个奇怪的绑定问题。
前提:我正在使用安装在 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.local
mail2.dom001.my-domain.com