Birds – Flying beyond the wall

DNS解析失败怎么办?按范围定位并修复

更新于 2026-10-31 · birds.mom

简答:DNS解析失败不一定是网络断了:先用同一设备打开多个网站,再换手机热点或另一台设备测试。若只有一个域名失败,重点查域名记录、NS、DNSSEC和缓存;若多个设备都失败,重点查路由器、DNS服务器或网络路径。Windows可先运行 nslookup 和 ipconfig /flushdns,其他平台则检查当前DNS、私有DNS、VPN和代理设置。

定义:DNS解析是把域名转换为IP地址的过程;解析失败表示设备或递归DNS没有得到可用的域名记录,但不等于服务器一定宕机。

先试这一步:三分钟判断故障范围

先不要直接反复更换DNS。按下面顺序测试,可以快速判断问题在设备、当前网络,还是域名本身。

  1. 在出错设备上分别打开两个平时能访问的网站,以及出错域名。
  2. 关闭代理、VPN或自定义DNS后重试;如果是办公网络,先确认是否必须使用企业DNS。
  3. 让另一台设备连接同一个Wi-Fi测试,再让出错设备切换到手机热点或其他网络。
  4. 记录浏览器提示、查询结果和测试时间。域名刚改过记录时,不要只依据一台设备的缓存下结论。
按测试结果定位责任范围
现象优先检查下一步
只有一台设备失败本机缓存、Hosts、DNS设置、VPN或安全软件查看当前DNS并清缓存,再用指定DNS查询
同一Wi-Fi下多台设备失败路由器DHCP、DNS转发、网络防火墙重启路由器,检查下发的DNS和端口53连通性
多个网络都只有同一域名失败域名NS、A、AAAA、CNAME、DNSSEC或域名状态从多个DNS服务器查询,并核对权威DNS
所有网站都打不开网络连接、网关、代理或线路先确认设备是否获得有效IP、网关和DNS

DNS客户端问题通常来自客户端配置、DNS服务器配置,或两者之间的中间设备。微软建议先检查客户端IP配置、默认网关和DNS服务器,再继续查询测试。Microsoft DNS客户端排查说明

看懂 NXDOMAIN、SERVFAIL、REFUSED 和 TIMEOUT

错误码比“网页打不开”更有定位价值,但它们只说明查询阶段的结果,不能单独证明网站服务器状态。

常见DNS结果与处理方向
结果通常表示优先处理
NXDOMAIN查询的域名不存在,或递归DNS缓存了“名称不存在”的结果核对域名拼写、NS和权威区域;刚改记录时等待负缓存过期
SERVFAIL服务器无法处理查询,可能涉及权威数据、转发链或DNSSEC验证分别查询不同递归DNS与权威DNS,重点检查DNSSEC和NS一致性
REFUSEDDNS服务器因策略或权限拒绝处理查询确认是否使用了错误的企业DNS、受限解析器或不允许递归的服务器
TIMEOUT查询没有在规定时间内收到响应,可能是DNS服务器不可达或端口被拦截检查网络、UDP/TCP 53、防火墙、代理和配置的DNS地址

RFC对这些返回码有明确区分:NXDOMAIN表示名称不存在,SERVFAIL表示服务器无法处理查询,REFUSED表示服务器因策略等原因拒绝查询。NXDOMAIN和部分否定结果还可能按SOA提供的TTL被递归DNS缓存,因此刚修改记录后,清本机缓存不一定立即改变所有网络的结果。RFC 9499 DNS术语 RFC 9520 DNS失败的负缓存

Windows:先查询,再清缓存和检查配置

Windows上先打开命令提示符或PowerShell,替换其中的域名为实际出错域名。

  1. 查看当前网络和DNS:运行ipconfig /all,确认设备有有效IPv4或IPv6地址、默认网关以及可达的DNS服务器。
  2. 查询默认DNS:运行nslookup example.com。如果失败,再运行nslookup example.com 1.1.1.1或使用你确认可用的指定DNS进行对照。
  3. 清除本机DNS缓存:运行ipconfig /flushdns,然后重新执行查询。微软说明,客户端缓存中保存了否定结果时,清缓存可以让设备重新发起查询。
  4. 检查Hosts文件:打开C:\Windows\System32\drivers\etc\hosts,确认没有把目标域名指向错误地址。Hosts命中时,系统可能不会再向DNS服务器发起查询。
  5. 若出现超时,检查防火墙或安全软件是否拦截UDP或TCP 53;也可在PowerShell运行Resolve-DnsName example.com观察结果。

如果更换指定DNS后能解析,而默认DNS不能解析,问题更可能在当前网络的递归DNS或DNS转发链;如果所有DNS都返回NXDOMAIN或SERVFAIL,则应转向检查域名和权威DNS,而不是继续清缓存。Microsoft DNS客户端解析故障场景

macOS、Linux、Android 和 iPhone 的处理方法

macOS:打开“系统设置”→“网络”→选择当前网络→“详细信息”→“DNS”,查看或暂时调整DNS服务器列表。Apple说明,该页面也可管理搜索域;修改后重新连接网络,再用终端执行nslookup example.com或dig example.com验证。Apple:在Mac上更改DNS设置

Linux:如果系统使用systemd-resolved,可先运行resolvectl status查看当前生效的DNS,再运行sudo resolvectl flush-caches清理本地缓存。不同发行版可能使用NetworkManager、resolv.conf或其他解析服务,命令名称应以当前系统为准。resolvectl手册

Android:Android 10及以上通常可在“设置”→“网络和互联网”→“私人DNS”中选择“关闭”“自动”或“私人DNS提供商主机名”;厂商菜单名称可能不同,设置后重新连接Wi-Fi。私人DNS只处理DNS查询和响应,不能替代完整的网络连接或VPN排查。Google Android高级网络设置

iPhone:打开“设置”→“Wi-Fi”→当前网络右侧的信息按钮,可查看并配置DNS、HTTP代理等网络设置。若怀疑Wi-Fi配置损坏,可先“忽略此网络”后重新加入;最后才考虑“设置”→“通用”→“传输或还原iPhone”→“还原”→“还原网络设置”,因为这会移除已保存的Wi-Fi和部分VPN网络设置。Apple:管理iPhone Wi-Fi设置 Apple:还原iPhone设置

域名刚修改后仍解析失败:检查权威链路

如果只有一个域名失败,并且多个网络、多个DNS服务器都出现相同结果,不要把问题归因于本机。登录域名注册商或DNS托管平台,逐项核对以下内容:

  • NS记录:注册商处委派的NS是否与实际托管DNS服务商一致;只在某个平台改记录,但域名仍指向另一组NS时,修改不会生效。
  • A和AAAA记录:A记录对应IPv4,AAAA记录对应IPv6。若AAAA指向不可达地址,部分设备可能优先尝试IPv6而表现为打不开。
  • CNAME链:确认目标主机名仍存在,避免出现链路断裂或循环。
  • DNSSEC:如果启用了DNSSEC,DS记录、签名密钥或权威区域不一致可能导致SERVFAIL;可用支持DNSSEC诊断的查询工具进一步确认。Cloudflare DNSSEC排查说明
  • 缓存和TTL:TTL决定缓存可保留时间;降低TTL不会让已经存在的旧缓存立即消失,负缓存也可能继续保留NXDOMAIN结果。
  • 域名状态:确认域名没有过期、暂停、被Hold或处于未完成转移状态;这类状态需在注册商或域名管理后台核对,不能仅凭浏览器报错判断。

完成修改后,使用nslookup或dig分别查询默认DNS、另一台递归DNS和权威NS。只有当权威DNS已经返回正确记录,才有理由等待递归缓存逐步更新。

失败分流:什么时候不要继续换DNS

更换DNS只能帮助排除“当前递归DNS不可用、缓存异常或网络下发错误”等情况,不能修复错误的A、AAAA、CNAME、NS或DNSSEC配置。

  • 若指定DNS能返回正确地址,默认DNS超时:检查路由器DHCP、运营商DNS、企业DNS策略和端口53连通性。
  • 若所有DNS都返回NXDOMAIN:优先核对域名拼写、权威NS和记录是否存在。
  • 若多个DNS都返回SERVFAIL:优先检查权威DNS、DNSSEC、NS委派和区域数据。
  • 若DNS查询成功但网页仍打不开:问题可能已经进入TCP连接、TLS、代理、IPv6、MTU或应用服务器层,不要继续把它当作DNS故障。
  • 若只有代理或网络客户端连接后失败:分别测试关闭该客户端和恢复系统自动DNS,避免客户端内置DNS、浏览器DoH与系统DNS互相覆盖。

验证结果应至少包括:查询使用的DNS服务器、返回码、A/AAAA结果、是否能在另一网络复现,以及修改前后的时间。这样更容易把问题交给网络管理员、域名托管商或服务提供方继续处理。

常见问题

DNS解析失败是不是代表网站服务器宕机?

不一定。DNS解析发生在连接网站服务器之前;如果域名没有得到IP地址,可能是本机、路由器、递归DNS、域名记录或DNSSEC问题。先用多个网络查询该域名,若能得到IP但网页仍打不开,再排查连接、TLS或服务器。

直接更换公共DNS能解决DNS解析失败吗?

只能解决部分问题,例如当前DNS服务器不可达、缓存异常或网络下发的DNS错误。它不能修复域名不存在、NS委派错误、A或AAAA记录错误、CNAME断链或DNSSEC配置问题。

Windows运行ipconfig /flushdns后还是失败怎么办?

先运行ipconfig /all确认实际使用的DNS,再用nslookup域名和nslookup域名指定DNS进行对照。若指定DNS也失败,检查域名记录和权威DNS;若指定DNS成功,则检查当前网络、路由器、代理、防火墙或安全软件。

DNS_PROBE_FINISHED_NXDOMAIN应该怎么处理?

先确认域名拼写,再用多个DNS查询。如果多个DNS都返回NXDOMAIN,检查域名是否存在、NS是否指向正确托管商以及目标记录是否已创建;如果只是某台设备出现,先清本机DNS缓存并检查Hosts、VPN和浏览器DNS设置。

域名改了DNS记录,为什么还没有生效?

递归DNS和本机可能仍保留旧记录或NXDOMAIN负缓存,TTL不会让已存在的缓存立即消失。先确认权威DNS已经返回新记录,再根据TTL和负缓存情况等待缓存更新,同时用不同网络和DNS进行对照。

相关阅读

参考资料

  1. Microsoft Learn:Troubleshoot DNS Client Name Resolution Issues
  2. Microsoft Learn:Troubleshooting DNS clients
  3. Apple Support:Change DNS settings on Mac
  4. Apple Support:Manage Wi-Fi settings on iPhone
  5. Google Android Help:Manage advanced network settings
  6. man7.org:resolvectl manual
  7. Cloudflare DNS docs:Troubleshooting DNSSEC
  8. RFC 9499:DNS Terminology
  9. RFC 9520:Negative Caching of DNS Resolution Failures
  10. support.apple.com