使用“dig host.name.here.com A”时,我收到 SERVFAIL 且无响应。但当我执行“dig host.name.here.com ANY”时,我收到 NOERROR 且它返回 A 记录。
对于所讨论的域名可能存在什么问题,您有什么想法吗?
下面是一个经过清理的示例。当我使用其他 @dns_servers 时也会发生同样的事情:
user@server1:~$ dig host.name.here.com A
; <<>> DiG 9.7.3 <<>> host.name.here.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 19887
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;host.name.here.com. IN A
;; Query time: 3719 msec
;; SERVER: 172.16.1.5#53(172.16.1.5)
;; WHEN: Fri Feb 15 01:17:10 2013
;; MSG SIZE rcvd: 39
user@server1:~$ dig host.name.here.com ANY
; <<>> DiG 9.7.3 <<>> host.name.here.com ANY
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24213
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;host.name.here.com. IN ANY
;; ANSWER SECTION:
host.name.here.com. 20 IN A 1.2.3.4
;; Query time: 88 msec
;; SERVER: 172.16.1.5#53(172.16.1.5)
;; WHEN: Fri Feb 15 01:21:45 2013
;; MSG SIZE rcvd: 55
答案1
SERVFAIL 耗时 3.7 秒,这很有趣,它远低于任何正常超时值。
dig
没有@
将使用您的本地解析器配置。您需要排除这是原因。
直接检查全部公司的解析器反过来,这通常是可行的(尽管在某些情况下不行):
for ns in $(dig +short company.com ns); do
dig @$ns host.company.com any;
done
然后依次检查所有自己的解析器:
for ns in $(awk '/nameserver/{print $2}' /etc/resolv.conf); do
dig @$ns host.company.com any;
done
通常观察到的问题是相反的,由于答复太大而导致接收“ANY”出现问题,或者防火墙/IPS 丢弃了“ANY”查询。