常见 DNS 故障与排查清单

域名打不开时,先分清是 DNS 解析问题还是服务器问题,再用 dig/nslookup 按记录、权威、链路逐层定位。

域名突然打不开,原因大致分两类:DNS 解析出错(拿不到正确 IP)和服务器 / 网络不通(拿到了 IP 但连不上)。先做这一步判断,能省掉大量瞎猜。

第一步:先分清 DNS 还是服务器

先看能不能解析出 IP:

# Linux / macOS
dig +short example.com
# Windows
nslookup example.com
  • 解析不出 IP 或 IP 明显错误 → 是 DNS 问题,继续往下查。
  • 能解析出正确 IP,但网站还是打不开 → 大概率是服务器或网络问题,用 ping <IP>、curl -v http://<IP> 直连 IP 验证服务本身。

第二步:核对记录是否正确

确认权威 DNS 上真正配置的记录:

dig A example.com          # 查 A 记录(IPv4)
dig AAAA example.com       # 查 AAAA 记录(IPv6)
dig CNAME www.example.com  # 查别名
dig +trace example.com     # 从根逐级追踪解析路径

对照你在域名控制台里填的值:主机名(@ / www)、记录类型、目标值有没有填错、有没有多余的空格或结尾的点。

第三步:是否已生效(TTL 缓存)

改了记录却没变化,常常是 TTL 缓存没过期。绕过本地缓存,直接问公共 DNS:

dig @8.8.8.8 example.com +short    # 问 Google DNS
dig @1.1.1.1 example.com +short    # 问 Cloudflare DNS

如果 @8.8.8.8 已是新值、本机还是旧值,就是缓存问题。清本地缓存:

# Windows
ipconfig /flushdns
# Linux (systemd)
sudo systemd-resolve --flush-caches

改记录前把 TTL 调低(如 300 秒)能让下次生效更快。

第四步:NS 是否指对

如果记录在控制台里对、外面却查不到,检查域名的 NS 是否指向了你正在编辑的那家 DNS:

dig NS example.com +short

在注册商处换了 DNS 服务商却忘了改 NS,是最常见的"改了不生效"。

第五步:CNAME 链与 DNSSEC

  • CNAME 链错:CNAME 必须指向域名而非 IP,且不能在根域(@)上用;链条过长或指向已失效的目标会解析失败。用 dig +trace 看每一跳。
  • DNSSEC 配错:签名与记录不一致时,校验型解析器会直接返回 SERVFAIL。用下面命令确认:
dig example.com +dnssec

若怀疑 DNSSEC,先在注册商处核对 DS 记录,必要时临时关闭再排查。

第六步:解析对了却"不通"(被墙)

如果各地 dig 都拿到正确 IP,但特定网络就是连不上,可能是 IP 被屏蔽 / 线路问题,而非 DNS。用多地节点或手机流量对比;traceroute example.com(Windows 用 tracert)看在哪一跳断掉。这类问题换 DNS 无效,需要换 IP 或线路。

排查速查表

| 现象 | 优先怀疑 | 关键命令 | |---|---|---| | 完全解析不出 IP | NS 未指对 / 记录缺失 | dig NS、dig A | | 改了记录不生效 | TTL 缓存 | dig @8.8.8.8、ipconfig /flushdns | | 返回 SERVFAIL | DNSSEC / 权威故障 | dig +dnssec、dig +trace | | 解析对但打不开 | 服务器 / 被墙 | ping、curl -v、tracert |

小结

排查 DNS 的核心是分层:先判断是解析还是连通问题,再依次核对记录内容、缓存生效、NS 指向、CNAME/DNSSEC,最后区分"被墙"这类非 DNS 故障。掌握 dig(Windows 用 nslookup)、dig @8.8.8.8 对比、dig +trace 三板斧,绝大多数域名打不开都能在几分钟内定位。