尝试在 BIND 服务器本身(CentOS 6.2 服务器)上进行解析时,dig 会为 .org 或 .info tld 中的任何域返回一个空的“A”记录。# dig @localhost text-lb.eqiad.wikimedia.org
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> @localhost text-lb.eqiad.wikimedia.org
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 58440
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;text-lb.eqiad.wikimedia.org. IN A
;; Query time: 156 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jan 7 06:26:24 2014
;; MSG SIZE rcvd: 45
但是,当我对端口进行 tcpdump 时,我在转储中看到的是这样的(实际上我必须先仔细查看所有的 CNAME 内容,我没有包括这些内容):
06:24:20.772293 IP services1i.box11.org.46014 > ns1.wikimedia.org.domain: 65338% [1au] A? text-lb.eqiad.wikimedia.org. (56)
06:24:20.864571 IP ns1.wikimedia.org.domain > services1i.box11.org.46014: 65338*- 1/3/5 A 208.80.154.224 (202)
它显然返回了域的 A 记录,但输出不包括该 A 记录。当我查询 google dns 时,一切都正常(当然):
# dig @8.8.8.8 text-lb.eqiad.wikimedia.org
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> @8.8.8.8 text-lb.eqiad.wikimedia.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17362
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;text-lb.eqiad.wikimedia.org. IN A
;; ANSWER SECTION:
text-lb.eqiad.wikimedia.org. 3489 IN A 208.80.154.224
;; Query time: 61 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 7 06:26:16 2014
;; MSG SIZE rcvd: 61
我不相信我改变了任何配置,但这确实在重启后开始发生,所以可能存在一些奇怪的配置更改(我已多次重新启动命名而没有任何问题,并且我很确定自从重新启动命名以来我没有改变任何配置)。
我不明白的是,为什么服务器似乎正在请求 A 记录,并且似乎得到了答案,但没有将该答案返回给客户端。查询日志显示了这一个孤独的条目:
07-Jan-2014 06:30:59.766 client 127.0.0.1#60966: view internal: query: text-lb.eqiad.wikimedia.org IN A + (127.0.0.1)
这是一个示例域名,任何 .org 或 .info 都会出现同样的问题。奇怪的是,.com 似乎运行正常。
答案1
感谢 Nick 的指导。没有任何日志条目可以提供帮助,但在仔细查看服务器后,我发现禁用 dnssec 明确导致服务正常运行。然后我查看了系统上的时间/日期,发现它几乎偏离了轨道一个小时……ntpd 无法启动,时钟不知何故出现偏差。将时钟同步到正确的时间允许 BIND 正确返回 A 记录。我将 dnssec 设置恢复为原样(接受默认值),系统继续运行。
所以...解决方案是同步时钟,使其接近准确的时间。