系统学习 故障排查学习路径:从方法论到系统、网络、数据库与 K8s

windows-dns-failed

Windows 域名解析失败、缓存异常或网卡 DNS 配置错误的定位与修复。

现象

浏览器提示“找不到服务器”或 DNS_PROBE_FINISHED_NXDOMAIN,ping 报“找不到主机”,Resolve-DnsName 超时或返回 DNS name does not exist,nslookup 则可能报 DNS request timed out 或 server can't find。用 IP 能访问、用域名不能访问是最典型的信号。也可能只有内网域名失败、公网正常,或者连接 VPN 后内网域名失效、断开 VPN 后恢复正常。

这类故障不一定在 DNS 服务器:网卡 DNS 地址、DHCP 下发的选项、VPN 的分域策略、hosts 文件、NRPT 规则和本机缓存都可能造成“只有这台机器解析不对”。先对比本机与公共 DNS 的解析结果,再决定改客户端还是查服务器。

快速定位

先看网卡实际使用的 DNS 和全局后缀,再分别向本机配置的服务器与公共服务器查询:

Get-DnsClientServerAddress -AddressFamily IPv4
Get-DnsClientGlobalSetting
Get-NetIPConfiguration | Format-List InterfaceAlias,IPv4Address,IPv4DefaultGateway,DNSServer
Resolve-DnsName example.com
Resolve-DnsName example.com -Server 8.8.8.8
nslookup example.com
nslookup example.com 8.8.8.8

IPv4 正常时也别忽略 IPv6:有些程序优先使用 AAAA 记录,若 IPv6 DNS 指向不可达地址,表现就是“时好时坏”。可用 Get-DnsClientServerAddress -AddressFamily IPv6 一并检查。随后检查缓存、hosts、NRPT 和 DNS 客户端服务:

Get-DnsClientCache | Select-Object -First 20
Get-Content C:\Windows\System32\drivers\etc\hosts
Get-DnsClientNrptPolicy
Get-DnsClientNrptRule
Get-Service Dnscache,Dns,Netlogon -ErrorAction SilentlyContinue
Get-WinEvent -LogName 'Microsoft-Windows-DNS-Client/Operational' -MaxEvents 50 -ErrorAction SilentlyContinue |
  Format-Table TimeCreated,Id,Message -Wrap

Test-NetConnection -ComputerName <dns-ip> -Port 53 只验证 TCP 53,UDP 53 是否可用仍要靠 nslookup 或 Resolve-DnsName 观察。若本机就是 DNS 服务器,再看区域、转发器和根提示:

Get-DnsServerZone
Get-DnsServerForwarder
Get-DnsServerRootHint
Resolve-DnsName example.com -Server 127.0.0.1

常见根因

  1. 网卡静态 DNS 写错,或 DHCP 下发了不可达的 DNS;多网卡、VPN 虚拟网卡的优先级导致查询走了错误接口。
  2. 本机缓存过期或负缓存残留,域名刚变更但客户端仍返回旧结果或 NXDOMAIN。
  3. hosts 文件存在错误条目,NRPT 规则把指定域名指向了不可用的服务器。
  4. DNS 服务器不可达:防火墙、安全组、代理或 VPN 分域策略拦截了 UDP/TCP 53。
  5. 搜索后缀配置不当,单标签短名被拼到错误域;内外网同名域名发生分裂解析。
  6. DNS 服务器侧区域、转发器、递归、根提示或 AD 集成异常;域控场景还可能是 Netlogon 或复制问题。
  7. DNS Client 服务停止、网络栈异常,或第三方安全软件接管了解析。

修复

先做对比实验:本机 DNS 失败而 -Server 8.8.8.8 成功,问题在本地配置或上游服务器;两者都失败,问题在链路、防火墙或目标域名本身。公网可用但内网域名失败时,应检查 VPN 下发的 DNS、NRPT 和内部 DNS 的转发配置,而不是把网卡改成公共 DNS。

网卡 DNS 写错时,按接口索引改回正确服务器,然后清缓存验证:

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 10.0.0.10,10.0.0.11
Clear-DnsClientCache
Resolve-DnsName example.com

地址应使用企业 DNS 或运营商 DNS;把域成员机的 DNS 改成公共服务器会导致无法解析 AD 的 SRV 记录。DHCP 环境先续租,确认拿到的选项正确:

ipconfig /release
ipconfig /renew
ipconfig /flushdns
ipconfig /registerdns

ipconfig /release 会短暂断开网络,远程操作时避免使用。缓存清理后仍异常,检查 hosts 是否有手工条目,并用 Remove-DnsClientNrptRule -Name "<规则名>" 删除错误规则;VPN 客户端可能在下一次连接时重新下发,需从 VPN 配置侧修正。负缓存会按域名的 SOA 最小 TTL 保留一段时间,刚改完记录仍返回旧值并不一定是配置没生效,清缓存后重试并查看 Get-DnsClientCache 中该条目的 TTL。

DNS Client 服务停止时重启它,然后重新测试;若系统提示依赖服务异常,再检查 Netlogon 和网络连接状态:

Restart-Service Dnscache -Force

服务端侧先确认区域已加载、转发器可达、递归未被关闭。AD 域环境可运行 dcdiag /test:dns,并检查域控的 Netlogon 与复制状态;修改转发器或清理服务器缓存前,确认不会影响其他区域:

Clear-DnsServerCache

防火墙或云安全组要同时放行 UDP 53 和 TCP 53,后者用于大响应和区域传送。抓包或在服务器侧看查询日志,可以确认请求到底有没有到达 DNS 服务器;只有客户端超时、服务器从未收到查询时,才优先怀疑链路和防火墙。若解析在代理环境中失败,检查 netsh winhttp show proxy;只有确认代理是根因时才重置,因为该操作会影响所有使用系统代理的程序。

最后才考虑重置网络栈。以下命令会改写网络配置并要求重启,远程机器和带静态路由、VPN 的设备应先备份:

netsh winsock reset
netsh int ip reset

重启后用 Resolve-DnsName、nslookup 和业务访问三层验证,不要只看浏览器是否恢复。

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 怎样用两条查询快速区分“本机 DNS 配置问题”和“上游 DNS 问题”?
  2. 公网域名正常、只有内网域名解析失败,应优先检查哪些配置?
  3. 为什么把域成员机的 DNS 改成公共服务器会造成更多问题?
答案
  1. 先 Resolve-DnsName example.com 使用本机配置的服务器,再 Resolve-DnsName example.com -Server 8.8.8.8 直连公共服务器。前者失败后者成功,问题在本地配置或上游服务器;两者都失败,问题在链路、防火墙或域名本身。
  2. 检查 VPN 下发的 DNS、NRPT 规则、网卡搜索后缀和内部 DNS 的转发器/条件转发,确认内网区域能由内部服务器解析,而不是改用公共 DNS。
  3. 域成员机依赖 DNS 查找域控的 SRV 记录、Kerberos 和组策略。改用公共 DNS 后这些记录无法解析,会出现登录、加域和策略应用失败。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令