首页
/
加密与隐私
/

DNS 泄露是什么、为什么会发生,以及三种自查方法

加密与隐私

DNS 泄露是什么、为什么会发生,以及三种自查方法

VPN 连上了,域名查询却可能仍然发给本地网络的解析器。本文解释 DNS 泄露为什么会发生,并给出三种不依赖第三方站点的验证方式。

DNS 泄露是什么、为什么会发生,以及三种自查方法 封面

DNS 泄露是指域名查询没有经过 VPN 隧道,而是发给了本地网络下发的解析器。网页流量虽然走了隧道,运营商和公共 Wi-Fi 的管理者仍然能从查询记录里看到你访问了哪些域名。这是最容易被忽略的 VPN 配置问题之一。

DNS 查询为什么会绕过隧道

隧道只处理被路由进去的流量。DNS 查询发往哪个解析器,由系统的解析设置决定,与路由表是两件事。只要系统仍指向本地网卡上的 DNS,查询就会从物理网卡发出。

DNS 查询的去向决定是否泄露
DNS 查询的去向决定是否泄露

多网卡同时查询会发生什么

Windows 8 起的智能多宿主名称解析会把同一个查询并行发到所有网卡的 DNS 服务器,取最先返回的结果。隧道网卡和物理网卡都在候选里,本地解析器往往更快,查询就被广播到了隧道之外。

IPv6 为什么会让解析走到本地

如果隧道只承载 IPv4,系统通过 IPv6 下发的 DNS 服务器仍然可用,且优先级不低。这时 AAAA 查询会直接从本地网络出去,和 IPv6 流量泄露是同一类问题。

浏览器内置的 DoH 会不会绕开系统设置

会。Firefox 和 Chrome 都可以启用 DNS over HTTPS,直接用浏览器自己配置的解析服务器,不再读取系统 DNS。查询仍然是加密的,但发往的是不受你控制的第三方,和 VPN 的预期不一致。

三种自查方法

自查的思路是确认“查询到底从哪张网卡、发给了谁”。下面三种方法按验证强度从低到高排列。

三种自查方法
三种自查方法

方法一:对比连接前后的解析器

连接 VPN 前后分别执行命令查看当前解析器地址:Linux 用 resolvectl status,macOS 用 scutil --dns,Windows 用 ipconfig /all。连接后解析器应当变成隧道内的地址,如果还是路由器的地址,就已经泄露。

方法二:抓包观察 53 端口

在物理网卡上抓包,例如 sudo tcpdump -ni eth0 port 53,然后在浏览器里访问一个很少用到的域名。只要物理网卡上看到了这个域名的查询,就说明有查询绕过了隧道。这一项结论最直接,不依赖任何外部服务。

方法三:用唯一子域名检测站点

在线检测站点的原理是让浏览器解析一个随机生成的子域名,再读取权威服务器记录到的查询来源。如果来源属于你的运营商或当前网络,就是泄露。它使用起来最省事,但只能给出结论,不能解释原因。

泄露现象与修复思路

现象原因修复思路
连接后解析器仍是路由器地址隧道没有下发 DNS在配置里指定隧道内解析器
Windows 物理网卡上仍有 53 端口查询多网卡并行查询阻止隧道之外的 DNS,或调整网卡优先级
仅浏览器访问时泄露浏览器内置 DoH关闭 DoH,或把它指向隧道内解析器
只有 AAAA 查询泄露IPv6 DNS 仍然可用一并承载 IPv6 或禁用 IPv6

怎么从根上止住泄露

WireGuard 在 Interface 里用 DNS = 10.8.0.1 指定隧道内解析器;OpenVPN 用 dhcp-option DNS 下发解析器,Windows 上再加 block-outside-dns 阻止其他网卡的查询。Linux 上可以用 systemd-resolved 的路由域把所有域名都导向隧道网卡。最稳妥的做法是同时加防火墙规则,只允许 53 端口流量走隧道网卡,这样即使配置被改动,查询也发不出去。

DNS 泄露
DNS
VPN
隐私

相关文章

链路笔记

链路笔记:分享网络与隐私工程的实践笔记,涵盖协议原理、加密与隐私、连接排错与性能调优。

© 2026 链路笔记