今天早上醒来发现以下一堆事情:
root@foo:/etc/bind# dig @1.2.3.4 foo.example.com
; <<>> DiG 9.6.1-P2 <<>> @1.2.3.4 foo.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 36121
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;;foo.example.com. IN A
;; Query time: 0 msec
;; SERVER: 1.2.3.4#53(1.2.3.4)
;; WHEN: Thu Apr 1 09:57:59 2010
;; MSG SIZE rcvd: 31
关于虚构的“1.2.3.4”的一些背景信息。它是我名称服务器“农场”中的一个从属名称服务器。从技术上讲,我有 ns1(作为主服务器)和 ns2/ns3。目前 ns1/ns2 因维护而停机,所以我让 ns3 继续提供实时流量。这就是重点,DNS 应该是有弹性的。
现在奇怪的是,“1.2.3.4”在过去 4-5 天内一直很好地为 example.com 提供请求。今天早上我接到一个电话说它没有响应。经过调查,我看到了上面的消息,SERVFAIL。
我查看了区域文件并看到以下内容:
example.com IN SOA ns1.example.com. hostmaster.mail.example.com. (
我想知道此时名称服务器是否认为它对 example.com 没有权威性,并将其调整为以下内容:
example.com IN SOA ns3.example.com. hostmaster.mail.example.com. (
之后,它又开始响应 example.com 的所有权威查询。我不知道为什么。我以为这些事情应该在从 ns1 到 ns3 的区域传输时正常化?
有人能举例说明为什么会发生这种情况以及如何防止这种情况再次发生吗?我从未遇到过类似的问题,而且由于我不太了解,我可能错过了这个问题的一些关键信息。所以请告诉我我是否可以进一步添加任何细节以使事情更清楚。
还有一件事需要注意:我拥有其他域名的权限,它们的 SOA 仍然是 ns1.example.com。而不是 ns3.example.com。这些域名可以很好地处理请求!它们停止服务是否也是时间问题,我必须将 SOA 更改为 ns3.example.com?这是否也只是因为 ns1 和 ns2 目前处于离线状态才需要这样做?
答案1
你可能违反了记录中的“EXPIRE”字段SOA
- 来自§3.3.13RFC 1035:
EXPIRE A 32 bit time value that specifies the upper limit on
the time interval that can elapse before the zone is no
longer authoritative.
如果主服务器不再响应,此字段将告诉辅助服务器为区域提供服务多长时间。
当您更改“ns3”上的区域文件时,您是否还重新配置了 BIND,以便将区域列为“主”而不是“从”? 如果是这样,那么SOA
实际上是该更改而不是对第一个字段的更改修复了该问题。