如何修复 DNS_PROBE_FINISHED_NXDOMAIN
当 Chrome 显示 DNS_PROBE_FINISHED_NXDOMAIN 时,意味着浏览器向 DNS 解析器查询某个域名对应的 IP 地址时,收到了 NXDOMAIN 响应——字面意思就是"域名不存在"。在 Chrome 发起任何 TCP 连接之前,它必须先将你输入的可读域名(例如 example.com)转换成数字 IP 地址。当解析器报告该域名不存在时,Chrome 就会停止并显示这个错误,而不是加载页面。
这个错误几乎从来不是 Chrome 自身的 Bug。它处于你的操作系统 DNS 缓存、路由器、ISP 递归解析器以及域名的权威域名服务器这几者的交叉点上。这就是为什么同一个网站在你的手机蜂窝网络上可以正常打开,却在笔记本的 Wi-Fi 上失败,或者在一个浏览器里能用、另一个里却不行。下面 6 个步骤按照你最可能遇到的顺序逐一排查,从简单的缓存过期一直到域名失效。
DNS_PROBE_FINISHED_NXDOMAIN 是什么?
每个网址都包含一个域名。互联网上的计算机通过 IP 地址互相寻址,而不是通过名称,因此域名必须先被翻译。这个翻译过程就是 DNS 解析,它的工作方式像一条查询链:
- 浏览器缓存。Chrome 先检查自己的内部 DNS 缓存。如果最近解析过该域名,就直接复用 IP 并在此停止。
- 系统缓存。接着检查操作系统的解析器缓存。Windows、macOS 和 Linux 都会保存最近的查询结果,以避免重复的网络往返。
- 路由器缓存。请求会被发送到你的家用或办公路由器,它通常运行自己的缓存转发器。
- 递归解析器。路由器将查询转发给递归 DNS 服务器——通常是 ISP 提供的,或者像 Google 的
8.8.8.8、Cloudflare 的1.1.1.1这样的公共 DNS。 - 权威服务器。递归解析器遍历 DNS 层级:先问根域名服务器,再问顶级域(TLD)服务器(例如
.com),最后问域名的权威域名服务器,由它返回最终的 A 或 AAAA 记录及对应的 IP 地址。
如果这条链路中任何一环返回 NXDOMAIN——缓存中存了被污染或过期的负缓存记录、解析器不可达、权威服务器报告该域名不存在,或者域名根本没有任何 DNS 记录——解析就会失败,Chrome 就会抛出 DNS_PROBE_FINISHED_NXDOMAIN。完整的提示信息通常是"无法访问此网站。找不到 example.com 的服务器 IP 地址。"
常见原因
下表将每个根本原因映射到最容易识别的症状以及对应的修复方法。在完整阅读分步指南之前,可以用它快速定位问题。
| 原因 | 症状 | 修复方法 |
|---|---|---|
| 本地 DNS 缓存过期或污染 | 所有浏览器都无法打开某域名,重启后短暂恢复 | 刷新系统与 Chrome 的 DNS 缓存 |
| DNS 服务器不可用或响应慢 | 偶发性解析失败,更换网络后立即恢复 | 更换为公共 DNS(8.8.8.8 / 1.1.1.1) |
| 浏览器缓存或 HSTS 异常 | 仅 Chrome 失败,其他浏览器正常 | 清除浏览器缓存、Cookie 和 HSTS 记录 |
| hosts 文件被篡改 | 仅特定域名解析到错误 IP 或被屏蔽 | 检查并修正 hosts 文件 |
| VPN / 代理劫持 DNS | 开启 VPN 时失败,关闭后正常 | 禁用 VPN 和系统代理 |
| 域名未注册或 DNS 记录缺失 | 所有人、所有网络都无法访问该域名 | 用 dig/nslookup 确认,联系域名注册商 |
分步修复指南
按以下 6 个步骤依次排查。每一步针对 DNS 解析链的不同层级,因此即使前面的步骤没有解决问题,也能为下一步缩小范围。
步骤 1:刷新 DNS 缓存
最快的修复方法。如果缓存中保存了一条负面的 NXDOMAIN 回答(即"负缓存"记录),后续每次请求都会复用这个错误答案,直到缓存过期。手动清除它,强制解析器重新获取记录。
# Windows(CMD 或 PowerShell)
ipconfig /flushdns
# Linux(systemd-resolved)
sudo systemd-resolve --flush-caches
# 较新版本使用 resolvectl:
sudo resolvectl flush-caches
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
刷新后,完全退出 Chrome(不是只关闭标签页)再重新打开,让浏览器自己的内部缓存也被清除。重新访问该网站。如果能加载,说明就是缓存过期的问题。
步骤 2:更换 DNS 服务器
如果刷新缓存无效,问题可能在上游:你的 ISP 递归解析器可能宕机、劫持了 NXDOMAIN 响应,或者只是不够稳定。切换到快速公共解析器可以完全绕过它。
最常用的两个选择是 Google 公共 DNS 和 Cloudflare DNS:
- Google:
8.8.8.8和8.8.4.4 - Cloudflare:
1.1.1.1和1.0.0.1 - Quad9:
9.9.9.9(带安全过滤)
在 Windows 上,进入设置 > 网络和 Internet > 适配器属性 > IPv4 属性,手动设置首选和备用 DNS 服务器。在 macOS 上,使用系统设置 > 网络 > 详细信息 > DNS。在 Linux 上,编辑 /etc/resolv.conf 或 NetworkManager 的 DNS 设置。如果在路由器上修改 DNS,可以一次性修复网络上的所有设备。
步骤 3:清除 Chrome 缓存和 Cookie
当只有 Chrome 报错而其他浏览器正常时,问题多半在浏览器侧。Chrome 拥有独立的 DNS 缓存和强制某些域名使用 HTTPS 的 HSTS 列表,这里面的损坏条目可以只破坏 Chrome 中的单个网站。清除浏览数据来重置它们。
# 直接打开 Chrome 内部 DNS 页面
chrome://net-internals/#dns
# 然后点击 "Clear host cache"
# 同时清除 socket 池:chrome://net-internals/#sockets
更彻底的重置方法是进入Chrome > 设置 > 隐私和安全 > 清除浏览数据,勾选Cookie 及其他网站数据和缓存的图片和文件,针对受影响的网站或所有时间清除。这会移除过期的 HSTS 固定和 Service Worker 注册,它们同样可能干扰解析。如果网站在隐身窗口中能打开但在常规配置文件中不行,那几乎可以肯定是缓存条目或扩展程序的问题。
步骤 4:检查 hosts 文件
操作系统的 hosts 文件优先级高于真实 DNS。来自旧测试、迁移甚至恶意软件的遗留条目可能将某个域名固定到一个失效的 IP,而无论你怎么刷新缓存或切换服务器都无法修复,因为在发送任何 DNS 查询之前系统会先查阅这个文件。
# Windows 路径
C:\Windows\System32\drivers\etc\hosts
# Linux 和 macOS 路径
/etc/hosts
以管理员权限打开该文件,查找任何提及无法加载域名的行。典型的覆盖条目看起来像 127.0.0.1 example.com。在该行开头加上 # 将其注释掉,保存文件,然后重新加载页面。记得之后刷新 DNS 缓存,以免旧的覆盖仍然被缓存。
步骤 5:禁用 VPN 和代理
VPN 会通过加密隧道路由你的 DNS 查询。如果 VPN 客户端崩溃、隧道端点失效,或者 VPN 内部 DNS 服务器出现故障,你的查询就会无处可去,每个网站都会报告 DNS_PROBE_FINISHED_NXDOMAIN。遗留的手动代理设置(例如 VPN 没有清理干净留下的)也会导致同样的问题。
完全关闭 VPN 并测试。在 Windows 上,检查设置 > 网络和 Internet > 代理,禁用任何手动代理。在 macOS 上,检查系统设置 > 网络 > 详细信息 > 代理。在 Chrome 中,检查已安装的扩展程序,禁用任何强制代理或安全 DNS 设置的扩展。如果关闭 VPN 后网站能加载,说明 VPN 配置有问题——更新客户端或将其 DNS 设置切换为公共解析器。
步骤 6:检查域名 DNS 记录
如果前五步都失败,而且网站对所有人都打不开(换一个网络或请朋友帮忙测试),那么问题出在域名侧。域名可能已过期、权威域名服务器可能宕机,或者根本没有配置 A 或 CNAME 记录。使用 dig 和 nslookup 直接查询 DNS 层级。
# 使用默认解析器查询 A 记录
dig example.com A +short
# 查询指定的权威服务器
dig @ns1.example.com example.com A
# 从根服务器追踪完整的解析路径
dig +trace example.com
# nslookup(Windows 和 Linux 均可用)
nslookup example.com
nslookup example.com 8.8.8.8
如果 dig 返回 NXDOMAIN,说明该域名在 DNS 中不存在——检查它是否已在注册商处过期。如果返回 SERVFAIL,说明权威服务器配置错误或不可达。如果返回 NOERROR 但没有答案,说明域名存在但没有 A/AAAA 记录;在 DNS 服务商控制台中添加正确的记录并等待传播。
DNS 诊断命令
下面给出排查 DNS_PROBE_FINISHED_NXDOMAIN 时最常用的诊断命令,可直接复制使用。
dig — 检查记录并追踪解析链:
# 完整查询(含 TTL 和权威段)
dig example.com
# 查询域名的 NS 服务器
dig example.com NS +short
# 验证 CNAME 链
dig www.example.com CNAME
# 从根服务器追踪完整路径
dig +trace example.com
nslookup — 快速交互式查询,Windows 上常用:
# 基本查询
nslookup example.com
# 查询指定记录类型和服务器
nslookup -type=NS example.com 8.8.8.8
resolv.conf(Linux)— 定义系统使用的递归解析器:
# /etc/resolv.conf
nameserver 1.1.1.1
nameserver 8.8.8.8
options timeout:2 attempts:3
Cloudflare DNS-over-HTTPS API — 无需 VPN 即可从外部网络验证解析:
curl -s "https://1.1.1.1/dns-query?name=example.com&type=A" \
-H "accept: application/dns-json"
快速参考表
DNS 响应携带状态码(定义于 RFC 1035 / RFC 6895)。了解你的解析器返回的是哪一个,就能准确判断解析链在哪里断裂。
| 错误码 / 状态 | 名称 | 含义 | 典型原因 |
|---|---|---|---|
NOERROR |
无错误 | 查询成功 | 域名正常解析;若网站仍失败请排查其他原因 |
NXDOMAIN |
域名不存在 | 该域名在 DNS 中不存在 | 域名过期、网址拼写错误或 DNS 尚未配置 |
SERVFAIL |
服务器失败 | 解析器无法完成查询 | 权威服务器宕机、DNSSEC 验证失败 |
REFUSED |
查询被拒绝 | 服务器拒绝回答 | 速率限制、访问控制列表或受限递归解析器 |
FORMERR |
格式错误 | 查询格式有误 | 客户端损坏或解析器软件 Bug |
常见问题
DNS_PROBE_FINISHED_NXDOMAIN 和 ERR_CONNECTION_REFUSED 有什么区别?
DNS_PROBE_FINISHED_NXDOMAIN 发生在连接建立之前——Chrome 根本没找到主机名对应的 IP 地址,因为解析器返回了 NXDOMAIN 状态。ERR_CONNECTION_REFUSED 发生在 DNS 解析成功之后——Chrome 找到了 IP 并尝试连接,但服务器主动拒绝了 TCP 连接。简而言之,前者是名称查找失败,后者是端口级拒绝。
为什么 DNS_PROBE_FINISHED_NXDOMAIN 只影响一台设备?
当只有一台设备失败而同一网络上的其他设备正常时,问题就在那台设备本地。最可能的原因是 DNS 缓存中保存了负缓存条目、hosts 文件中有遗留行、仅在该设备上运行的 VPN 或代理,或 Chrome 特有的缓存 HSTS 条目。刷新缓存并清除浏览器数据通常就能解决。
DNS 更改需要多久才能生效?
传播速度取决于每条 DNS 记录上设置的 TTL(生存时间)。300 秒的低 TTL 可以在几分钟内更新,而 86,400 秒(24 小时)的默认 TTL 意味着部分解析器可能在整整一天内仍提供旧记录。你可以通过刷新本地缓存并直接查询像 1.1.1.1 这样的公共解析器来加快速度,因为公共解析器通常比 ISP 缓存刷新得更快。
路由器会导致 DNS_PROBE_FINISHED_NXDOMAIN 吗?
会。许多家用路由器运行自己的缓存 DNS 转发器。如果路由器缓存损坏、其上游 DNS 服务器不可达,或固件存在 Bug,该路由器后面的每台设备都可能无法解析域名。重启路由器可以清除其缓存,将路由器的 DNS 服务器改为 8.8.8.8 或 1.1.1.1 则可修复整个网络的持续性解析器问题。
总结
DNS_PROBE_FINISHED_NXDOMAIN 看起来吓人,但归根结底只有一个事实:Chrome 收到了 NXDOMAIN 响应,无法获取主机名的 IP 地址。沿着解析链逐一排查——浏览器缓存、系统缓存、路由器、递归解析器,最后是域名的权威服务器——你就能精确定位失败的具体层级。大多数情况下修复很快:刷新缓存、切换到 8.8.8.8 或 1.1.1.1 等公共解析器,或删除过期的 hosts 条目。当问题对所有人、所有地方都持续存在时,问题就在域名本身,dig 或 nslookup 会告诉你它是已过期、配置错误,还是缺少 DNS 记录。
养成保留一个公共解析器作为备用、每次网络变更后刷新缓存的习惯,你就能在一分钟内解决大多数 DNS_PROBE_FINISHED_NXDOMAIN 错误。