跳到主要内容

VPN 亮起了绿色对勾,应用也说已连接,可打开的每一个页面都以同样的提示收场:“无法访问此网站”“DNS_PROBE_FINISHED_NO_INTERNET”或“找不到服务器”。聊天软件有时仍能用,因为它们保持着长连接,这让问题看起来像是随机的。出现这种情况时,最可能的原因其实根本不在隧道上,而在 DNS,也就是把 example.com 这样的名称转换成设备所需的数字地址的系统。

本文讲的是如何证明这个判断并把它修好。你会了解到:解析失败是什么样子,三个能把 DNS 与其他原因区分开的简单测试,VPN 连上之后 DNS 出问题的各种原因,以及在手机、笔记本和路由器上该改什么。如果需要背景知识,DNS 如何工作讲解了整个解析链路。如果应用本身连不上,先看 VPN 连接不上。如果网页失败的原因与域名无关,VPN 已连接但没有网络涵盖了范围更广的原因。

DNS 故障是什么样子

DNS 是互联网的电话簿。设备向解析器询问“这个名称的地址是什么”,解析器作出回答。所有使用名称的操作都依赖这个答案,因此解析失败会让网页浏览、大多数应用和电子邮件停摆,而已经持有地址的东西可能还能继续运行。

线索如下:

  • VPN 显示已连接,但测速应用或游戏可能仍能工作,因为它们使用缓存或内置的地址。
  • 浏览器显示的是域名解析错误,而不是超时或证书警告。
  • 问题恰好在连接 VPN 之后开始,断开后消失。
  • 有些网站能开,有些不能,因为部分答案是在隧道建立之前缓存的。
  • 在 Wi-Fi 和移动数据之间切换,现象会发生变化。

不要把它与网站本身宕机或拦截 VPN 地址混为一谈。拦截 VPN 访客的网站通常会加载一部分、显示验证页面或拒绝访问的提示;DNS 故障则连页面都得不到。如果症状是验证页面,请看网站打不开或出现验证码。

证明是 DNS 的三个测试

大约两分钟就能得出结论。

**测试一:地址与名称。**在浏览器里用数字地址打开网站,例如知名的公共地址 1.1.1.1。如果能加载(某些环境下可能出现证书警告,这同样证明数据在流动),说明隧道可以传输数据。然后用名称打开同一服务。如果地址可以、名称不行,就是 DNS 坏了。

**测试二:直接询问。**在电脑上打开终端或命令提示符,执行一次查询。Windows、macOS 和 Linux 都可以使用命令 nslookup example.com。看输出:

  • 打印出它所询问的服务器和一个或多个地址:查询通过该服务器正常工作。
  • 显示“timed out”“no servers could be reached”或“server failed”:它询问的解析器没有回应。
  • 打印了地址,但“Server”一行显示出乎意料的内容,比如隧道里根本不会用到的路由器地址:查询被发到了你原本没打算去的地方。

**测试三:与关闭隧道时对比。**断开 VPN,重做测试二。如果关闭 VPN 时查询正常、打开时失败,说明隧道改变了回答名称的方式,这正是本文要解决的情形。如果关闭 VPN 时查询也失败,就是你平时使用的网络存在 DNS 问题,应先修好它,从路由器开始。

VPN 连上后 DNS 为什么会坏

隧道建立起来时,通常会改变设备上的三件事:流量走的路线、设备在隧道内的地址,以及询问哪个解析器。问题就从第三项开始。下面是典型的原因。

原来的解析器已经够不着了

使用 VPN 之前,设备询问路由器分配的解析器,往往是 192.168.x.x 之类的私有地址。隧道启动后,流量应当走加密路径。如果设备仍然询问原来的私有解析器,而通往它的路现在进了隧道,问题就到不了那里,最终超时。配置良好的 VPN 客户端会为隧道换上解析器来避免这一点;没做到时,就会出现上述症状。

其他应用在设置 DNS

好几类软件都想控制 DNS:广告拦截器、“安全 DNS”应用、安全套件、家长过滤器,以及浏览器和操作系统中的加密 DNS 选项。两个程序都声称掌握解析器设置,就会互相争夺,结果得到一个两边都不是的解析器。浏览器的情形很常见:使用自带加密 DNS(DNS over HTTPS,思路见 RFC 8484)的浏览器,可能直接把查询发给某个服务商,而系统使用的是隧道的解析器。当其中一条路径失败时,只有那个应用会坏。

设备或路由器上写死的 DNS

有些人多年前在笔记本、手机或路由器上设置了固定的 DNS 服务器。这个设置可能会覆盖 VPN 提供的值。通常 VPN 仍能工作,但固定的服务器可能只能从你家的网络访问,或者拒绝来自隧道地址的请求,结果就是查询失败。

本地名称与分流网络

办公室和家庭实验环境里常有只有内部解析器才认识的本地名称,比如打印机或文件服务器。隧道建立后,所有查询都发往隧道的解析器,这些本地名称就失效了。这与前面的问题正好相反:公网名称正常,本地名称失败。一种叫分流 DNS(split DNS)的功能,只把特定名称发给一个解析器,其余发给另一个。分流 DNS 一文解释了它的原理和局限。

有 IPv6 的答案,却没有 IPv6 的路径

很多解析器会同时返回 IPv4 和 IPv6 地址。如果设备拿到网站的 IPv6 地址并优先尝试,而隧道内没有可用的 IPv6 路由,页面就会在设备等待回退时卡住。这感觉像 DNS,实际上是路由不匹配。关于 IPv6 泄漏和 IPv4 与 IPv6 对 VPN 的影响的文章说明了这种情况如何造成妨碍。

缓存里存着过期答案

设备和浏览器会保存近期的答案以加快速度。如果这些答案是在隧道建立之前收集的,或者是被缓存下来的失败结果,连接之后它们可能依然生效。结果是有些名称失败、有些不失败,而重启似乎突然就有用了。

认证门户或网络过滤器

在酒店和公共 Wi-Fi 上,网络可能在你登录门户之前自己回答查询。如果在完成门户登录之前就连接 VPN,应用和网络可能互相干扰。请先完成门户,再连接。

在手机上的修复

Android 和 iPhone 上的步骤相似。请按顺序操作,每一步后都测试一下。

  1. **关闭再重新打开 VPN。**中间等十秒。这会重建应用推送的解析器设置。
  2. **切换网络。**用移动数据代替 Wi-Fi,或者反过来。如果问题只在其中一种上出现,说明路由器或该网络有关。
  3. **检查其他 DNS 设置。**Android 系统有“私人 DNS”选项;如果设置成了某个特定主机名,可能与 VPN 冲突。测试时请设为自动,参见 Android 上的私人 DNS 与 VPN。在 iPhone 上,请到 Wi-Fi 设置里查看是否手动配置了 DNS,以及有没有添加了 DNS 的配置描述文件或广告拦截应用,测试时先关闭。
  4. **关闭其他 VPN 或过滤类应用。**一个 VPN 通道,一个所有者。
  5. 开关一下飞行模式几秒钟,以清除移动网络状态。
  6. 重启手机,这会清空系统的 DNS 缓存。
  7. 更新或重装应用,如果问题是在更新之后才出现的,请使用下载页面的官方链接。

如果只有一个浏览器失败,请到该浏览器的设置里找“安全 DNS”或“DNS over HTTPS”,测试时将它设为使用系统解析器。

在电脑上的修复

清除缓存

清除本机缓存既快又安全。在 Windows 上,以管理员身份打开终端并执行 ipconfig /flushdns。在 macOS 上,命令随版本略有不同;重启 DNS 服务或重启电脑效果一样。在 Linux 上,清除你的发行版所用的解析服务的缓存。之后再执行一次 nslookup。

查看正在使用哪个解析器

隧道开启时再次运行 nslookup example.com,看“Server”一行。如果显示的是你家庭网络的地址而不是隧道的地址,说明系统仍在询问原来的解析器。这时请打开网络适配器设置,查看 DNS 项:任何手动输入的服务器都应删除,使其变成自动,至少测试时如此。关于 Windows 上的 DNS 泄漏和 Mac 上的 DNS 泄漏的文章展示了这些设置所在的位置,以及正确的表现应当是什么样。

移除相互冲突的软件

暂停运行自己解析器的本地广告拦截器、带有“网页防护”功能的安全套件,或第二个 VPN 客户端,然后再次测试。如果 VPN 开始正常工作,就逐个重新启用,并记下是哪一个造成了问题。

检查 hosts 文件和代理

系统 hosts 文件里遗留的条目,或系统设置里配置的代理,都会覆盖相关名称的 DNS。如果只有一个网站失败而其他正常,请在 hosts 文件中查找它。如果只在浏览器里全部失败,请检查浏览器的代理设置。

睡眠后重新连接

带着 VPN 睡眠的笔记本,唤醒后有时会带着上一个网络的解析器设置。请断开连接,等 Wi-Fi 稳定后重新连接,不要让旧会话继续存活。

在路由器和家庭网络上的修复

如果所有设备上 DNS 都失败,而且只在开着 VPN 时发生,就要检查路由器。

  1. 拔掉电源三十秒后重新启动。
  2. 打开设置,查看 DNS 栏。如果有人设置了固定服务器,测试时切换为自动。
  3. 找一找是否有把 DNS 拦截或重定向到它自己解析器的功能。有些路由器为了家长控制或广告拦截会这样做,该功能可能与隧道冲突。
  4. 检查“DNS 重绑定保护”或类似的安全功能是否拦截了指向私有地址的答案,如果你使用本地名称,这一点很重要。
  5. 有更新时升级固件。

如果你运行着全网络的广告拦截器,请在把使用 VPN 的设备排除在其规则之外的情况下测试。在路由器上更改 DNS 会影响家里所有人,所以修改之前请先记下原来的值。

一个完整的例子

阿杰在咖啡馆里打开笔记本上的 VPN。应用显示已连接,但浏览器对每个网站都提示域名错误,只有之前已经打开的那个例外。他运行 nslookup,结果超时,并显示一个私有地址作为服务器。关闭 VPN 后,同一命令通过咖啡馆的解析器成功执行,说明网络本身没问题。

他打开适配器设置,发现几个月前自己为家庭网络手动填了一个 DNS 服务器,隧道生效后,从咖啡馆是够不着它的。他把这一项改成自动,清除缓存并重新连接。这时 nslookup 显示的是隧道的解析器,并返回了地址,网页也能打开了。整个修复用了六分钟,没有动 VPN 应用里的任何东西。

常见错误

  • 真正的故障是固定的 DNS 条目,却去重装 VPN 应用。
  • 为了“修好”而填入一个公共 DNS 地址,几个月后又忘了。
  • 把安全套件或过滤器永久关闭,而不是只为一次测试关闭。
  • 只用浏览器测试,而浏览器可能有自己的 DNS 设置。
  • 把 DNS 失效与泄漏混为一谈,去用毫无作用的泄漏修复方法。
  • 跳过与关闭 VPN 时的对比,而那恰恰是能证明故障位置的测试。

小结

VPN 显示已连接而网页因域名错误失败时,请检查 DNS。通过直接加载数字地址、运行查询,以及与关闭 VPN 时对比来证明。常见原因包括无法访问的旧解析器、相互冲突的 DNS 设置、写死的服务器、本地名称、IPv6 不匹配和过期缓存。把 DNS 设为自动,逐个移除冲突的工具,并清除缓存。

如果想要一个新的通行证在另一个网络上测试,可以在价格页面查看选项。

常见问题

怎么判断是 DNS 问题而不是 VPN 隧道本身的问题?

如果应用显示已连接,网页提示找不到服务器地址或 DNS 错误,但用数字地址却能打开网站,就说明隧道在传输数据,坏的只是域名解析。再用查询命令验证,如果失败或超时,就可以确认。

清除 DNS 缓存能解决吗?

有时可以。缓存里可能保存着 VPN 启动之前的答案或失败的结果。清除既快又无害,但如果设备正在询问的解析器根本连不上,还需要修正使用的是哪个解析器。

开着 VPN 时应该自己设置 DNS 服务器吗?

通常不需要。VPN 一般会为隧道带来自己的解析器设置。设备或路由器上写死的 DNS 可能覆盖它们,导致失败或让查询跑到隧道之外。先用自动设置测试。

为什么只在公司或家里的网络上出问题?

有些网络有本地名称、带过滤功能的解析器,或会拦截查询的路由器。隧道改变了路线后,这些本地规则和名称可能不再适用或发生冲突。

这和 DNS 泄漏是一回事吗?

不是。泄漏指本不该走隧道之外的查询却走了出去;DNS 失效指查询根本得不到回答。两者可能有共同原因,但症状和测试方法不同。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

  • XPASS VPN 创始人
  • eSIMonline.asia 联合创始人
  • 7 年以上网络营销经验
  • Cojourney Visa 与 Cojourney Travel 创始人

短途出行或忙碌的一个月,需要 VPN?

XPASS 提供按天数计算的预付通行证。一次付款,不会自动续费。

查看通行证

继续阅读

VPN 基础

DNS 是如何工作的:从域名到 IP 地址

DNS 是把网站名称转换成设备实际连接的 IP 地址的查询系统。本文逐步讲解一次查询的过程,以及它为什么与隐私有关。

阅读约 9 分钟

故障排除

VPN 已连接却无法上网?排查与解决方法

应用显示已连接,却什么都加载不出来。本文解释原因,并依次排查 DNS、MTU、IPv6、设备设置和网络环境。

阅读约 7 分钟

VPN 安全

什么是 DNS 泄漏?

DNS 泄漏是指设备在 VPN 隧道之外查询网站地址。本文说明它为什么发生、如何检测,以及该怎么处理。

阅读约 10 分钟

VPN 安全

VPN 的 Split DNS(分流 DNS)是什么

Split DNS 让设备按域名选择不同的解析器:内部名称走 VPN,其他名称走平时的解析器。本文介绍原理、使用场景和检查方法。

阅读约 9 分钟

VPN 安全

安卓“私人 DNS”与 VPN 如何配合

安卓的私人 DNS 与 VPN 都会接管域名查询。本文讲清两者同时开启时谁说了算、谁能看到什么,以及网页打不开时该怎么排查。

阅读约 10 分钟