DNS解析怎么排查?故障处理与运维实用手册

适用场景:网站打不开、域名偶尔丢包、解析不稳定、内网 DNS 异常、CDN 域名解析失败、客户端 / 服务器域名无法解析。 排查思路:先区分是客户端问题、本地 DNS 问题、权威 DNS 问题,还是网络链路问题,由近到远排查。

一、基础原理快速回顾

  1. 递归 DNS(本地 DNS):电脑配置的 DNS,如 114.114.114.114、8.8.8.8、企业内网 DNS。负责替你向权威服务器查询域名。
  2. 权威 DNS:域名服务商的 DNS 服务器,保存域名真实解析记录 (A/AAAA/CNAME 等)。
  3. 解析流程:客户端查本地 hosts → 查本地 DNS 缓存 → 递归 DNS 查询 → 权威 DNS 返回记录 → 客户端缓存结果。

故障分层:hosts 文件 > 本机 DNS 缓存 > 递归 DNS > 网络连通性 > 权威 DNS > 域名状态(过期、锁定)

二、必备排查命令(Windows / Linux /macOS)

1. nslookup(最常用,验证 DNS解析结果)

复制代码
# 基础查询,使用系统默认DNS
nslookup example.com

# 指定DNS服务器查询(关键!用来区分是本地DNS还是权威问题)
nslookup example.com 223.5.5.5

结果判断:

  • 返回正确 IP:解析本身没问题,大概率是网络、防火墙、服务端口问题。
  • Server failed / Timed out:DNS 服务器不可达,或者拒绝查询。
  • NXDOMAIN:域名不存在,权威 DNS 没有该记录。

2. dig(Linux/macOS,信息最全,运维首选)

复制代码
dig example.com
# 指定DNS
dig @223.5.5.5 example.com
# 只看简要结果
dig example.com +short
# 查询权威DNS记录
dig example.com +nssearch
# 跟踪完整解析过程
dig example.com +trace

重点看:ANSWER SECTION(解析结果)、Query time、SERVER、STATUS。

  • NOERROR:正常;NXDOMAIN:无记录;SERVFAIL:权威 DNS 返回失败。

3. ping(简单验证,不能单独用来判断 DNS)

复制代码
ping example.com

⚠️ ping 失败≠DNS 故障:DNS 解析成功拿到 IP,但目标服务器禁 ping、防火墙拦截,ping 也不通。

4. 查看 / 清理本地 DNS 缓存

Windows:

复制代码
# 查看缓存
ipconfig /displaydns
# 清空DNS缓存
ipconfig /flushdns

macOS:

复制代码
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Linux:

复制代码
# systemd-resolved
sudo systemd-resolve --flush-caches
# nscd
sudo nscd -i hosts

5. hosts 检查

Windows 路径:C:\Windows\System32\drivers\etc\hosts Linux/macOS:/etc/hosts

hosts 优先级高于 DNS,这里写了错误 IP 会直接覆盖解析结果。

6. 网络连通性测试(DNS 端口 UDP 53)

DNS 默认使用 UDP 53 端口,超时很多是防火墙拦截 53 端口。

复制代码
# Windows测试端口连通
telnet 223.5.5.5 53
# Linux/macOS
nc -zv 223.5.5.5 53

很多公司防火墙、出口策略会拦截外网 UDP53,导致 DNS 超时。

三、标准排查步骤【由近到远,运维标准流程】

核心判断逻辑:换一个公共 DNS 查询,如果结果正常 → 问题在原来的递归 DNS;如果所有 DNS 都查不到 → 问题在权威 DNS / 域名本身

Step1:确认故障范围

先判断是单台机器 ,还是所有机器都无法解析:

  1. 仅本机:本机 hosts、本机 DNS 配置、本机缓存、本机防火墙。
  2. 全部终端:内网 DNS 服务器故障、出口防火墙拦截 UDP53、运营商链路问题。

Step2:检查本机配置

  1. 查看本机 DNS 配置
    • Windows:ipconfig /all
    • Linux:cat /etc/resolv.conf
  2. 检查是否配错 DNS,是否是内网 DNS。
  3. 检查 hosts 文件是否被篡改。
  4. 清空本地 DNS 缓存,重试。

Step3:使用不同公共 DNS 交叉验证(最重要一步)

公共 DNS 推荐:

  • 阿里:223.5.5.5 / 223.6.6.6
  • 腾讯:119.29.29.29
  • 114:114.114.114.114
  • Google:8.8.8.8(国内访问不稳定)

操作示例:

复制代码
nslookup example.com 223.5.5.5
nslookup example.com 119.29.29.29

场景判断: ✅ 用阿里 DNS 能解析,本机配置的内网 DNS 不能解析:内网 DNS 服务故障 。 ❌ 所有公共 DNS 都查不到:权威 DNS / 域名记录问题,去域名服务商后台检查。

Step4:检查权威 DNS 与域名状态

登录域名服务商后台检查:

  1. 域名是否过期、是否被注册商暂停。
  2. 域名 NS 记录是否正确(是否改成了自己的 DNS 服务商)。
  3. A/CNAME 记录是否填写正确,有没有输错。
  4. 是否开启域名锁定(禁止修改 NS)。
  5. 记录 TTL 值:TTL 是缓存时间,修改记录后需要等待 TTL 过期才能全网生效。

TTL 说明:比如 TTL=300(5 分钟),递归 DNS 会缓存 5 分钟,修改记录后旧 IP 还会持续存在一段时间。调试阶段可以临时把 TTL 改小。

Step5:检查链路与防火墙

常见坑:

  1. 出口防火墙 / 安全组拦截 UDP 53 端口,DNS 查询超时。部分设备只放行 TCP53,会导致小包 DNS 正常、大包 DNS(EDNS0)失败。
  2. 运营商劫持 DNS,返回错误 IP。
  3. 内网 DNS 服务器上行链路断网。

Step6:验证 TCP 53(大包 DNS)

当解析域名返回很长记录(很多子域名、泛域名),UDP 包超过 512 字节,会切换 TCP53。如果防火墙只放 UDP53,会间歇性解析失败。

复制代码
dig example.com +tcp @223.5.5.5

四、常见故障现象、原因、解决方案

表格

现象 可能原因 处理方案
nslookup 返回 NXDOMAIN 权威无记录、域名输错、域名过期 核对域名解析记录,检查域名状态
DNS 查询超时 UDP53 端口被防火墙拦截、DNS 服务器不可达 测试 53 端口连通性,放通防火墙策略,更换 DNS
偶尔解析成功,偶尔失败 1. DNS 服务器负载高;2. 丢包;3. TTL 缓存;4. EDNS0 大包被防火墙丢弃 dig +trace 排查,尝试关闭 EDNS0,放通 TCP53
本机 ping 域名是旧 IP,别人正常 本机 / 本地 DNS 缓存未过期 清空客户端缓存,等待 TTL
内网机器无法解析内网域名,外网域名正常 内网 DNS 没有配置对应记录 在内网 DNS 添加 A 记录
域名解析到一个错误 IP(劫持) 运营商 DNS 劫持、hosts 篡改 切换公共 DNS,清理 hosts
dig 返回 SERVFAIL 权威 DNS 故障,或者 NS 配置异常 检查域名 NS 记录,联系域名服务商

五、运维监控与预防性维护

  1. 监控指标
    • DNS 查询成功率
    • DNS 响应延迟(Query time)
    • DNS 超时率
    • 权威 DNS NS 服务器存活状态
  2. 巡检脚本思路:定时 dig/nslookup 探测域名,异常告警。
  3. 最佳实践:
    • 企业内网配置主备 DNS,避免单点故障。
    • 关键业务域名不要使用泛解析。
    • 生产环境修改解析记录,先降低 TTL,等待生效再改记录,变更完成后恢复 TTL。
    • 重要域名配置多 NS 服务器,防止单一权威 DNS 宕机。
    • 防火墙策略同时放行 UDP53 和 TCP53。

六、排障报告模板(运维工单输出)

复制代码
DNS故障工单
1. 故障现象:xxx域名无法解析,单台/全部主机
2. 故障范围:内网所有PC / 仅服务器A
3. 测试结果:
   - 默认DNS nslookup:xxx
   - 公共DNS 223.5.5.5查询:xxx
   - dig +trace结果:xxx
4. 检查项:hosts、本机缓存、DNS端口连通性、域名NS状态
5. 根因:xxx
6. 处理动作:xxx
7. 验证结果:xxx

七、排障避坑清单

  1. ❌ 不要只用 ping 判断 DNS;ping 通 IP 不代表解析正常。
  2. ❌ 修改域名记录后立刻测试,忽略 TTL 缓存。
  3. ❌ 只测试本机 DNS,不使用外部 DNS 交叉验证。
  4. ❌ 忽略 UDP53/TCP53 大包问题,出现偶发解析失败。
  5. ❌ 忽略 hosts 文件优先级问题。
相关推荐
元岳数字人小元8 小时前
数字人私有化部署:企业级AI数字场景长效落地优选方案
运维·人工智能·开源·人机交互·交互
为思念酝酿的痛9 小时前
数据链路层--帧传输与链路控制
网络·网络协议·计算机网络·数据链路层
头发还在的女程序员9 小时前
【无标题】
网络·数据库·短剧小程序·短剧系统·海外短剧·短剧后台
Thneonl9 小时前
全集群钟差 300 毫秒会发生什么:证书悄悄过期,日志倒流
运维·后端
是jin奥9 小时前
Ubuntu 访问 Windows 共享目录
linux·运维·ubuntu
Gauss松鼠会9 小时前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
科技象限9 小时前
数据防泄密系统怎么选?看它怎么把几道防线叠成网
运维·安全·网络安全·安企神
luiyarch9 小时前
汽车电子ISO 21448 SOTIF系列(第26期):未知危险场景的确认方法(下)——AI驱动的场景发现
网络·人工智能·安全·车载系统·汽车
砚凝霜9 小时前
【软考信息安全】第十六章 网络安全风险评估项目流程与应用
网络·安全·web安全
Mr_韩9 小时前
子网路由实战:无需公网 IP,异地直接访问家庭内网全部设备
运维·网络·物联网·nas