我有带 BIND9 的 Ubuntu 12.04,用作缓存服务器(转发到 8.8.8.8)。
例如,当我使用 时dig +norecurse @l.root-servers.net www.uniroma1.it
,我获得以下输出
; <<>> DiG 9.8.1-P1 <<>> +norecurse @l.root-servers.net www.uniroma1.it
; (找到 1 个服务器)
;;全局选项:+cmd
;;连接超时;无法访问服务器
使用 Wireshark 我发现传出的查询是正确的,但没有任何传入的答案。为什么?
PS 只需使用dig www.uniroma1.it
我就可以获得正确的答案。
答案1
你的命令在这里工作得很好。我的猜测是,您所在位置或 ISP 处的防火墙正在阻止 DNS 请求或响应。正常情况dig www.uniroma1.it
可能有效,因为所述防火墙允许向某些服务器发出请求,例如您的 ISP 提供的服务器,也许还有8.8.8.8
.
答案2
根服务器不会回答对其不具有权威性的域的查询。如果您运行不带 +norecurse 参数的命令,它应该返回 .it 域的引用列表。您永远不会从根服务器获得 A 记录响应。
答案3
如果dig @nameserver domain.example.com
仅对特定名称服务器不起作用,而对大多数名称服务器有效,则也可能是该名称服务器阻止来自某些来源的流量的问题。他们可能只想回答其他名称服务器(?)。显然这是不好的行为,因为它使调试 DNS 问题变得更加困难。
这不适用于问题中发布的根服务器示例。但是,例如,我看到这种行为与 DNS 托管商 DomainDiscount24 的名称服务器一致:
dig @ns1.domaindiscount.net example.com
; <<>> DiG 9.11.5-P4-5.1ubuntu2.2-Ubuntu <<>> @ns1.domaindiscount.net example.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
(使用example.com
是一个示例,但即使这样也应该产生一个答案,将我指向该example.com
域的正确名称服务器。但是当使用实际托管在 DomainDiscount24 的域时,与上面所示的行为相同。)