域名解析异常排查:从 NXDOMAIN 到委派恢复
域名打不开,第一反应通常是“刷新本地 DNS 缓存”。但如果返回的是 NXDOMAIN,刷新本机基本没用,问题多半在上游。
先分清三种失败
- NXDOMAIN:服务器明确回答“这个域名不存在”。
- SERVFAIL:解析器内部出错,或者 DNSSEC 验证失败。
- 超时:网络不通、端口被挡,或者权威服务器不响应。
三者处理路径完全不同。NXDOMAIN 意味着要继续往上游问,超时则先查网络。
逐层往上游查
以 example.com 为例,按顺序查:
# 1. 公共递归
dig example.com A @8.8.8.8
# 2. 顶级域权威,看这一层有没有委派记录
dig example.com NS @a.nic.xyz
# 3. 域名自己的权威服务器
dig example.com A @ns1.example-dns.net
如果第 2 步返回 NXDOMAIN,而第 3 步能正常返回记录,说明注册商那边的记录是对的,注册局还没把域名写进区文件。这种情况只能等注册局发布,改什么都没用。
否定缓存会骗人
NXDOMAIN 也是会被缓存的。缓存时长由所在区的 SOA 里的 minimum 字段决定,常见是 900 到 3600 秒。也就是说,注册局刚发布完,你本地和运营商那边可能还在返回缓存的“不存在”。
要绕开缓存,直接查权威服务器,或者用 DoH 接口:
curl "https://dns.google/resolve?name=example.com&type=A"
委派恢复后
确认根区不再是 NXDOMAIN 后,再刷本地缓存:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
如果本地还是不行,检查路由器是不是也在做 DNS 缓存——很多路由器会把自己的缓存当权威答案返回,刷新电脑没用,得重启路由器或者直接把电脑的 DNS 改成公共解析。