DNS 泄露是什么:流量进了隧道,域名查询却留在本地
DNS 泄露指的是:VPN 显示已连接,网页流量确实走了加密隧道,但把域名翻译成 IP 地址的 DNS 查询,仍然发给了本地运营商或家用路由器指定的 DNS 服务器。后果很直接:你访问了哪些网站,本地网络依然看得到,连接工具标榜的隐私防护就打了折扣。这篇文章讲清楚泄露是怎么发生的、如何用三步自己检测、发现问题后从哪里入手处理。
先说结论:DNS 泄露不是“某款工具有问题”的专属现象,而是任何一套连接方案都可能出现的配置层问题,检测成本很低,值得在换设备、换系统或升级客户端之后各做一次。
为什么已连接还会泄露
DNS 查询和网页内容是两条独立的请求。客户端建立隧道后,需要同时改两件事:一是路由表,决定数据包从哪块网卡出去;二是 DNS 设置,决定域名问哪台服务器。只改了前者、没有改后者,就会出现“网页走隧道、解析走本地”的错位。常见有三种情形。
系统存在多块网卡,解析请求被同时发往不同出口
Windows 从 8 版本起有“智能多宿主名称解析”机制:系统会把同一个 DNS 查询同时发给所有可用网卡上配置的服务器,并采用最先返回的结果。当物理网卡和虚拟网卡并存时,本地运营商的 DNS 往往返回得更快,于是被采用。macOS 和 Linux 的策略不同,但网卡顺序、解析器优先级设置不当,同样会让请求走错出口。
隧道只接管了 IPv4,IPv6 仍然走本地
如果本地网络同时提供 IPv4 和 IPv6,而客户端只处理了 IPv4,系统就可能通过 IPv6 直接发出查询甚至访问请求。表现是:检测页面显示的 IPv4 地址是线路所在地,IPv6 地址却是本地运营商的。
浏览器自带的安全 DNS 绕开了系统设置
Chrome、Firefox、Edge 都提供了基于 HTTPS 的 DNS(常写作 DoH)。开启后,浏览器会把查询直接发给它自己指定的解析服务,不再理会系统和隧道里的 DNS 设置。这未必算“泄露”:关键要看那条 HTTPS 请求本身是否走了隧道。如果走了,解析内容对本地网络是不可见的;如果没走,就等同于泄露。
三步自测:不需要任何专业工具
检测只需要一个浏览器,按下面的顺序做,每一步都记下结果:
- 先断开 VPN,打开一个 DNS 泄露检测页面(搜索“DNS leak test”即可,选择提供标准测试的页面),记录它列出的解析服务器所属运营商和所在地区,这是你的“本地基线”。
- 连接 VPN,等状态稳定,换一个无痕窗口或清空缓存,再运行一次测试,并把 IPv6 相关的检测项也跑一遍。
- 对比两次结果:如果第二次列出的服务器仍然属于本地运营商、与基线一致,说明发生了泄露;如果列出的是线路所在地区的服务商,或者是公共解析服务,基本可以认为解析请求已经进入隧道。
想在命令行里复核,可以运行 nslookup 加任意域名,看返回的 Server 一栏显示的是哪台服务器;连接前后各运行一次,同样做对比。需要提醒的是,部分系统的本地缓存会让结果滞后,测试前先重启浏览器更稳妥。
现象对照与处理方向
| 检测现象 | 可能原因 | 处理方向 |
|---|---|---|
| 解析服务器与断开时完全一致 | 客户端没有接管系统 DNS | 在客户端设置里开启隧道 DNS 或 DNS 保护,或手动指定隧道内可达的解析服务 |
| 出现多个服务器,其中一个属于本地运营商 | 多网卡并发解析(常见于 Windows) | 关闭不用的虚拟网卡,或启用客户端的 DNS 防泄露选项 |
| IPv4 正常,IPv6 地址是本地的 | 隧道没有接管 IPv6 | 在系统网卡属性里临时关闭 IPv6,或使用支持 IPv6 的线路 |
| 只有浏览器里泄露,其他程序正常 | 浏览器安全 DNS 指向了其他解析服务 | 在浏览器隐私设置里改为使用系统 DNS,或指定同样走隧道的服务 |
| 切换 Wi-Fi 或基站瞬间偶发 | 网络切换时隧道重建,期间请求直连 | 开启断线保护类功能,避免重建期间回落到本地直连 |
改完之后怎么确认修好了
每改一项就重新跑一遍三步自测,并且在“连接—断开—再连接”之后再测一次。很多问题在第一次连接时正常,重连后才暴露,因为客户端重建隧道时 DNS 设置没有被重新应用。
公共 Wi-Fi 下为什么更值得在意
传统 DNS 查询走 UDP 53 端口,内容是明文的。在咖啡馆、酒店这类共享网络里,同一网络内的设备和路由器都有机会看到这些查询记录。所以在公共网络上使用连接工具之前,先做一次 DNS 自测,比事后再担心更有效。
我自己的习惯是:每次升级客户端或换新设备后,都会按上面的三步检查一遍,花不了五分钟。想省去手动排查环节,可以试试 TonBoVPN,装好后用同样的方法自己验证一遍,结果以你所在的网络环境为准,这也是检验任何一款连接工具的通用方法。
小结:确认“流量”和“查询”都进了隧道
已连接不等于已保护。DNS 泄露的本质,是路由和解析两件事没有同步接管;排查时按“基线—连接后—对比”三步走,再对照上面的表逐项处理,大部分问题都能定位。下次换设备或升级客户端之后,不妨顺手花五分钟测一遍。
