首页/系统/Linux 运维命令速查/场景:域名解析排查
网络命令82 条

场景:域名解析排查

解析比连通更绕:分成「本地配置 → 缓存服务器 → 权威链路」三段查,dig 是主武器,getent 验证系统真实解析路径。

Linux 运维命令速查系统更新于 2026-10-13

这个场景解决什么

域名解析出问题比连通性问题更容易误判,因为「解析」这条链路上有三段:本机的名字服务开关与 hosts 文件、本机配置的 DNS 服务器、以及再往上的权威服务器。排查方法是分段验证:先用 getent 看系统真实解析结果,再用 dig 逐级直问,最后对比缓存与权威的答案。这样才能区分是本地配置问题、上游缓存问题,还是权威记录本身有问题。

基本信息

适用场景解析失败、解析结果不对、只有个别机器解析异常
核心工具getent 验证系统实际结果,dig 逐级查询,resolvectl 查看本地解析服务状态
关键文件/etc/nsswitch.conf 决定查询顺序,/etc/hosts 通常优先于 DNS
判断原则先分清「解析问题」与「连通问题」,两者报错表现完全不同

典型使用场景

  • 应用报未知主机:应用连不上某个域名,先确认是解析不到还是连不上
  • 改了 DNS 记录不生效:区分是本地缓存、上游缓存还是 TTL 未到期
  • 只有一台机器异常:优先怀疑该机的 hosts 文件与 nsswitch 配置
  • 内网域名分裂解析:内外网同名域名指向不同地址,验证是否命中了预期的解析路径
  • 切换 DNS 服务后验证:确认新配置真的生效,而不是被本地缓存掩盖

第 1 步:系统实际解析路径

第 1 步:系统实际解析路径
getent hosts app.example.com              # 走 nsswitch 的真实结果,含 /etc/hosts
grep -v '^#' /etc/hosts | grep -i app     # 本地是否有手工记录
grep ^hosts /etc/nsswitch.conf           # 确认 files 与 dns 的先后顺序
getent ahostsv4 app.example.com | head   # 只看 IPv4 结果

第 2 步:逐级对照查询

第 2 步:逐级对照查询
dig +short app.example.com                 # 用本机配置的 DNS
dig +short @1.1.1.1 app.example.com        # 换公共 DNS 对照
dig +short @10.0.0.53 app.example.com      # 直问内网 DNS
dig +short @ns1.example.com app.example.com   # 直问权威服务器
dig +noall +answer app.example.com         # 看 TTL,判断缓存还有多久过期

第 3 步:缓存与服务

第 3 步:缓存与服务
resolvectl status                          # systemd-resolved 的分流与上游配置
resolvectl query app.example.com           # 用 resolved 自己的解析结果
resolvectl flush-caches                    # 清本地缓存后重查
curl -sS --resolve app.example.com:443:10.0.0.9 https://app.example.com/ -I   # 绕过 DNS 直测目标 IP

三段解析路径对照

环节查什么异常表现
/etc/hosts 与 nsswitch本地是否有记录、查询顺序如何只有个别机器结果不同,其它机器正常
本机配置的 DNSdig 不带 @ 的结果与上游是否一致整批机器都解析失败或拿到旧地址
缓存与 TTL答案里的 TTL 是否在递减改了记录但一段时间内仍是旧值
权威服务器直问权威是否返回预期记录全网都拿不到正确结果,属于记录本身的问题
「只有某台机器解析不对」几乎总能在 /etc/hosts 或 nsswitch 里找到答案;「整批机器都不对」则要往上游缓存与权威记录方向查,别在单机上耗时间。
dig 默认不读 /etc/hosts,也不走本机的名字服务开关,所以它给出的结果可能与应用的实测行为不同。要模拟应用行为,用 getent 验证才准。

易错点

  • 用 ping 的报错来判断故障类型:ping 报未知主机是解析问题,报请求超时是连通问题,两者处置方向完全不同
  • 只用 dig 验证却不看 /etc/hosts:域名在 hosts 文件里有旧记录时,dig 的结果与应用实际使用的地址会不一致
  • 修改 DNS 记录后立刻断言无效:本地缓存与上游缓存都会保留一段时间,先看答案里的 TTL 再判断
  • 排查时不保留对照证据:换公共 DNS、直问权威这两步的原始输出是判断归属的关键,随手截断会让结论无法复现

数据来源与参考

  • man 1 dig(BIND 9 手册)
  • man 1 getent

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌