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
先做对比实验:本机 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 和业务访问三层验证,不要只看浏览器是否恢复。
合上页面,先回答,再展开对照。
Resolve-DnsName example.com 使用本机配置的服务器,再 Resolve-DnsName example.com -Server 8.8.8.8 直连公共服务器。前者失败后者成功,问题在本地配置或上游服务器;两者都失败,问题在链路、防火墙或域名本身。
小程序版
微信扫码,随时查命令