我们在 CentOS 上运行 BIND 的一些缓存名称服务器中遇到了问题,因为它们似乎运行不正确,无法正确处理包含粘合记录的“附加记录”。当询问 d.gtld-servers.net 时,dig 会获取粘合记录:
$ dig @192.31.80.30 ns1.teamsystem.com
; DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5 @192.31.80.30 ns1.teamsystem.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; -HEADER- opcode: QUERY, status: NOERROR, id: 48270
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;ns1.teamsystem.com. IN A
;; AUTHORITY SECTION:
teamsystem.com. 172800 IN NS ns1.teamsystem.com.
teamsystem.com. 172800 IN NS ns2.teamsystem.com.
;; ADDITIONAL SECTION:
ns1.teamsystem.com. 172800 IN A 2.115.99.97
ns2.teamsystem.com. 172800 IN A 2.115.99.98
;; Query time: 100 msec
;; SERVER: 192.31.80.30#53(192.31.80.30)
;; WHEN: Mon Aug 6 10:22:54 2012
;; MSG SIZE rcvd: 100
我想知道它是否是域本身的问题还是我们配置不正确。以下是释义的 tcpdump。
# dig +trace ns1.teamsystem.com
- Standard query NS <Root>
- Standard query response NS ... (lists all the root nameservers)
- Standard query A d.gtld-servers.net
- Standard query response A 192.31.80.30
- Standard query A ns1.teamsystem.com
- Standard query response
-- Additional Records
--- ns1.teamsystem.com: type A, class IN, addr 2.115.99.97
--- ns2.teamsystem.com: type A, class IN, addr 2.115.99.98
此时,dig 开始使用 /etc/resolv.conf 中的名称服务器来获取 ns1.teamsystem.com 的 AAAA
- Standard query AAAA ns1.teamsystem.com
- Standard query response, Server failure
我们有 3 个名称服务器条目,因此它会尝试所有条目,但收到相同的失败。然后它会重试 A 记录请求。
- Standard query A ns1.teamsystem.com
- Standard query response, Server failure
这证明我们的解析器上的 BIND 无法或不愿意跟踪“附加记录”部分中清楚提供的粘合记录。
我们发现该区域的唯一问题是 SOA 与粘合记录中的名称服务器不匹配:
$ dig +short @2.115.99.98 teamsystem.com SOA
ns.teamsystem.com. postmaster.teamsystem.com. 1 3600 600 86400 3600