首页/网络/网络排障速查/hosts 文件与 nsswitch 解析顺序
DNS 与解析排查46 条

hosts 文件与 nsswitch 解析顺序

Linux/Windows 默认先查本地 hosts 再走 DNS:『解析结果不对』时先确认 hosts 没被写死,排查 DNS 却看不到问题就栽在这。

网络排障速查网络更新于 2026-10-13

为什么 dig 正常但应用不对

Linux 与 Windows 默认的解析顺序都是先查本地 hosts 文件,再走 DNS;Linux 上这个顺序由 nsswitch.conf 的 hosts 行控制(常见写法是 files dns)。这意味着 dig 直接查询 DNS 得到的结果,未必等于应用程序看到的地址——应用走的是 NSS 全链路,hosts 里的静态记录会优先命中。排查「同一域名两台机器解析不同」这类问题时,这一步必须先在前面做掉。

基本信息

适用平台Linux(/etc/hosts 与 nsswitch.conf)、Windows(System32\drivers\etc\hosts)
解析顺序Linux 由 nsswitch.conf 的 hosts 行决定;Windows 固定为 hosts 优先
关键命令getent hosts 走 NSS 全链路,与 ping、应用行为一致
验证手段dig 与 getent 结果不一致,说明命中了 hosts 或其他 NSS 源
容器环境容器内 hosts 通常由编排平台注入,改宿主机文件无效

典型使用场景

  • 域名指向不对:先确认 hosts 里没有写死旧地址
  • 迁移后部分机器仍访问老服务:核对 hosts 中的临时记录是否清理
  • 排查「dig 结果正确但应用连不上」:用 getent 验证应用实际拿到的地址
  • 容器内解析异常:确认容器内的 hosts 与 DNS 配置来源
  • 统一解析口径:确认 nsswitch.conf 是否被改成了先走其他解析源

Linux 核对

Linux 核对
grep -v '^#' /etc/hosts                    # 查看 hosts 里的有效记录
grep '^hosts' /etc/nsswitch.conf           # 例:hosts: files dns(files 优先)
getent hosts example.com                   # 走 NSS 全链路,与 ping 行为一致
dig +short example.com                     # 只查 DNS,两者结果不一致即命中了 hosts
# 追踪实际访问了哪些解析来源
strace -e trace=openat,connect getent hosts example.com 2>&1 | head -20

Windows 核对

Windows 核对
Get-Content C:\Windows\System32\drivers\etc\hosts | Where-Object {$_ -notmatch '^\s*#' -and $_.Trim()}
Resolve-DnsName example.com -DnsOnly        # 绕过 hosts,直接看 DNS 记录
Get-DnsClientCache | Where-Object {$_.Entry -eq 'example.com'}   # 查看本地 DNS 缓存

两种查询口径对比

命令是否读 hosts用途
getent hosts是,走 NSS 全链路与应用行为一致,用于复现真实结果
dig / nslookup否,只查 DNS验证 DNS 记录本身是否正确
ping是,与 getent 一致快速确认应用侧看到的地址
Resolve-DnsName -DnsOnly否(Windows)绕过 hosts 验证 DNS 记录
/etc/hosts 直接查看—确认是否存在静态记录干扰
getent hosts 与 dig 都查一遍:两者结果不一致,说明走了 hosts 或其他 NSS 源。这个方法对「同一域名在两台机器上结果不同」类问题尤其有效。

易错点

  • 排查只信 dig:应用走的是 NSS 链路,hosts 优先命中,dig 的正常结果不能代表应用行为
  • 在容器里改宿主机 hosts:容器内的 hosts 由编排平台注入,改宿主机文件对容器无效
  • 临时迁移记录不清理:hosts 里的旧地址长期残留,服务下线后表现为「本地访问异常、其他机器正常」
  • 忽略 nsswitch.conf 被改动:hosts 行顺序变化或被替换成其他解析源,解析路径与预期完全不同

数据来源与参考

  • nsswitch.conf(5) 手册
  • Microsoft:hosts 文件解析顺序

相关工具

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