我的 DNS 有一个非常奇怪的问题。我的域名 ( strugee.net
) 无法从某些网络解析,但可以从其他网络解析。
例如,在我的家庭网络(服务器所在的同一网络)上:
% dig strugee.net
; <<>> DiG 9.10.3-P4 <<>> strugee.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10086
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;strugee.net. IN A
;; ANSWER SECTION:
strugee.net. 1800 IN A 216.160.72.225
;; Query time: 186 msec
;; SERVER: 205.171.3.65#53(205.171.3.65)
;; WHEN: Sat Apr 16 15:42:36 PDT 2016
;; MSG SIZE rcvd: 56
但是,如果我登录到 Digital Ocean 上的服务器,则域无法解析:
% dig strugee.net
; <<>> DiG 9.9.5-9+deb8u3-Debian <<>> strugee.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 58551
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;strugee.net. IN A
;; Query time: 110 msec
;; SERVER: 2001:4860:4860::8844#53(2001:4860:4860::8844)
;; WHEN: Sat Apr 16 18:44:25 EDT 2016
;; MSG SIZE rcvd: 40
但是,直接访问权威域名服务器就可以了:
% dig @dns1.registrar-servers.com strugee.net
; <<>> DiG 9.9.5-9+deb8u3-Debian <<>> @dns1.registrar-servers.com strugee.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30856
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;strugee.net. IN A
;; ANSWER SECTION:
strugee.net. 1800 IN A 216.160.72.225
;; AUTHORITY SECTION:
strugee.net. 1800 IN NS dns3.registrar-servers.com.
strugee.net. 1800 IN NS dns4.registrar-servers.com.
strugee.net. 1800 IN NS dns2.registrar-servers.com.
strugee.net. 1800 IN NS dns1.registrar-servers.com.
strugee.net. 1800 IN NS dns5.registrar-servers.com.
;; Query time: 3 msec
;; SERVER: 216.87.155.33#53(216.87.155.33)
;; WHEN: Sat Apr 16 18:46:36 EDT 2016
;; MSG SIZE rcvd: 172
很明显,某个大型网络存在问题,无法解析我的域,但我似乎无法弄清楚在哪里。我浏览了手册dig
页以寻找可能有帮助的选项,但没有发现任何特别有用的东西。
我在 Namecheap 上既是域名注册商,也是 DNS 托管商。我打开了 DNSSEC 选项。我最近没有对我的 DNS 设置进行任何更改。
如何调试此问题并找到有问题的名称服务器?
daxd5 提供了一些好的入门建议,但这里唯一真正的答案是您需要知道如何像递归 DNS 服务器一样思考。由于权威层有许多错误配置可能导致不一致
SERVFAIL
,因此您需要 DNS 专业或在线验证工具。无论如何,目标不是逃避帮助你,但我想确保你明白这个问题没有决定性的答案。
在您的特定情况下,我注意到这
strugee.net
似乎是一个使用 DNSSEC 签名的区域。从推荐链中存在DS
和记录可以看出这一点:RRSIG
在我们继续之前,我们需要检查签名是否有效。DNSViz是一个经常用于此目的的工具,它确认确实存在问题。图片中愤怒的红色表示您有问题,但与其将鼠标悬停在所有内容上,我们可以展开左侧边栏上的通知:
问题很明显:您所在区域的签名已过期,需要刷新密钥。您看到不一致结果的原因是并非所有递归服务器都启用了 DNSSEC 验证。那些验证的正在删除您的域,而那些没有验证的则照常营业。
编辑: Comcast 的 DNS 基础设施以实施 DNSSEC 验证而闻名,作为他们的客户之一,我可以确认我也看到了
SERVFAIL
。虽然您确实看到权威名称服务器正确响应,但您需要跟进整个 DNS 解析链。也就是说,从根服务器向上遍历整个 DNS 层次结构。
这基本上检查公共 DNS 服务器是否正常工作,并且您正在做与您的 DNS 解析器应该做的事情相同的事情。因此,除非他们的 DNS 解析器出现问题,否则您应该在 Digital Ocean 服务器中得到与上述相同的答案:
如果前两个查询失败,则说明 Digital Ocean 方面的 DNS 失败。检查您的
/etc/resolv.conf
并尝试查询辅助 DNS 服务器。如果第二个有效,只需切换解析器的顺序并重试。