![为什么 DNS 查找仅对特定域很慢?](https://linux22.com/image/689595/%E4%B8%BA%E4%BB%80%E4%B9%88%20DNS%20%E6%9F%A5%E6%89%BE%E4%BB%85%E5%AF%B9%E7%89%B9%E5%AE%9A%E5%9F%9F%E5%BE%88%E6%85%A2%EF%BC%9F.png)
我们正在运行 Windows DNS 服务器,但它们不具有权威性。因此,我们将缓存服务器作为转发器。
也就是说,对于以下两个域名,DNS查找会延迟很长时间如果该域名尚未缓存到我们的内部 DNS。
- 互联网2.edu
- PostgreSQL 社区
到目前为止,我们还没有发现任何其他表现出此类症状的域名。
我已经在端口 53 上进行了数据包捕获,并测试了dig
使用该选项和不使用该+trace
选项的情况。
一旦它被缓存在我们的 DNS 服务器上,后续查询使用 会非常快速地返回dig
。+trace
如果不使用+trace
选项,它会相当快地缓存NS
信息和一些A
记录(dns、dns2、dns3)。它会继续返回,status: SERVFAIL
直到最终缓存A
的记录internet.edu
。一旦缓存,查找就会像预期的那样超级快。如果A
从缓存中删除记录,长时间的延迟会再次发生。
对于为什么会发生这种情况有什么想法吗?
$ time dig internet2.edu @dc01
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> +time=300 internet2.edu @dc01
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 33488
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;internet2.edu. IN A
;; Query time: 10401 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Thu Sep 8 13:37:55 2016
;; MSG SIZE rcvd: 31
real 0m15.411s
user 0m0.001s
sys 0m0.004s
$ time dig internet2.edu @dc01
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> internet2.edu @dc01
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65026
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;internet2.edu. IN A
;; ANSWER SECTION:
internet2.edu. 56 IN A 207.75.164.248
;; Query time: 2335 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Thu Sep 8 13:39:09 2016
;; MSG SIZE rcvd: 47
real 0m2.340s
user 0m0.003s
sys 0m0.001s