首页/系统/信创系统运维速查/DNS 解析异常的分段排查
常见问题65 条

DNS 解析异常的分段排查

解析问题分三段:本机配置、上游 DNS 可达性、查询结果;用 dig 直连与 getent 对照,快速定位卡在哪一环。

信创系统运维速查系统更新于 2026-10-13

DNS 解析异常怎么分段排查

解析问题可以拆成三段:本机实际使用的 DNS 配置是否正确、上游 DNS 是否可达并能返回结果、以及查询结果是否被本机解析链路正确处理。实用做法是用直连查询与系统解析两条路径对照:直连 DNS 服务器查询能看到上游返回情况与耗时,用系统解析接口查询则反映应用真实走到的结果。两者结论不一致时,问题通常出在本机配置或被网络管理组件重写的配置上。

基本信息

本机配置/etc/resolv.conf 中实际生效的服务器地址
系统解析getent hosts 走完整的名称服务切换链路
直连查询dig @服务器 域名 指定某个 DNS 查询
解析顺序/etc/nsswitch.conf 中 hosts 行的顺序
覆盖风险网络管理组件可能重写 resolv.conf

典型使用场景

  • 能 ping 通 IP 但 ping 不通域名,快速确认是否为解析层问题
  • 解析变慢,需要区分是上游响应慢还是本机配置了无效的 DNS 地址
  • 内网域名解析异常,核对 DNS 指向与搜索域设置
  • 服务器变更网络配置后域名解析失效,确认配置是否被组件重写
  • 应用连接外部服务失败,先排除解析问题再查网络
  • 批量终端排查解析一致性,找出配置偏离基线的机器

分段验证

分段验证
cat /etc/resolv.conf                    # 查看实际生效的 DNS 服务器
getent hosts www.example.com            # 走系统解析链路的结果
dig @<DNS服务器> www.example.com +stats # 直连指定 DNS,看返回与耗时
dig www.example.com +short              # 默认链路的简短结果
grep hosts /etc/nsswitch.conf           # 查看 hosts 与 dns 的顺序
ping -c1 www.example.com                # 快速验证解析是否正常
cat /etc/hosts | head                   # 本地静态记录会优先命中
systemd-resolve --status 2>/dev/null | head   # 使用解析服务时查看状态
# 网络管理组件接管时 resolv.conf 会被重写:改连接配置而非手工改文件

现象与所在环节

现象可能环节验证方式
IP 通域名不通解析层dig 直连与 getent 对照
解析很慢上游响应或超时叠加看查询耗时与配置的服务器列表
部分域名失败上游数据或转发策略换服务器直连查询对比
重启后配置变化配置被组件重写检查管理组件的连接配置
本地记录优先静态记录命中查看 hosts 文件内容
用直连查询与系统解析两条路径同时验证,能快速判断问题在上游还是本机:直连正常而系统解析失败,问题基本在本机配置或被覆盖的设置上。
手工修改 /etc/resolv.conf 可能被网络管理组件覆盖,改动会在重启或重连后失效;应修改对应连接的配置或解析服务的配置,让改动具备持久性。

易错点

  • 手工编辑 resolv.conf 后不确认是否会组件覆盖,问题在网络重连后再次出现
  • 配置了多个 DNS 而首选地址不可达,导致每次解析都要等待超时,表现为整体变慢
  • 只看单个域名的解析结果,不做直连与系统解析对照,无法判断问题所在环节
  • 忽略本地静态记录与缓存的影响,把命中缓存的结果当成真实上游返回

数据来源与参考

  • man 5 resolv.conf
  • man 1 dig
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌