DNS 请求可能泄露你访问的网站信息。本文介绍 DNS 泄露的原理,以及如何使用 DNS over HTTPS 等技术保护隐私。
DNS 泄露指的是:你的设备把域名查询发送到了你以为受保护的通道之外,通常是发往运营商(ISP)的解析器,而不是 VPN 的解析器,结果即便其余流量已经加密,你访问过的每一个网站仍然暴露无遗。要防止泄露,需要让 DNS 走 VPN 隧道(或使用 DoH、DoT 等加密解析器),禁用明文回退,并堵住 IPv6 与 WebRTC 这两条旁路。确认自己是否安全最快的方法,就是运行一次 DNS 泄露测试,看看出现的是哪些解析器 IP。
什么是 DNS 解析,为何它涉及隐私
每次打开网站时,浏览器都需要把像 browserinsight.net 这样人类可读的名称翻译成数字 IP 地址。完成这项翻译的,就是域名系统(DNS)。你的设备会向一台 DNS 解析器发起询问——如果你没有改过设置,这台解析器通常由运营商运营——解析器返回地址后,连接才能建立。
隐私问题很直接:运营这台解析器的人,能看到一份按时间排列、记录你查询过的每一个域名的日志。即便网页本身通过 HTTPS 加载、内容已被加密,你想访问的站点名称仍会在 DNS 这一步暴露出来。默认情况下,传统 DNS 查询以明文形式经 UDP 53 端口传输,因此不仅解析器运营方能看到,网络路径上的任何人都能看到。
可以把 DNS 想象成互联网的通讯录。即使把信封里的信件加了密(HTTPS),如果你每次寄信都要大声喊出收件人的名字,加密也帮不上太多忙。
什么是 DNS 泄露
DNS 泄露是指你的 DNS 查询逃出了你以为它正在使用的那条私密或加密通道。最常见的情形是:你连上 VPN,以为所有流量都会走隧道,但操作系统却仍然把 DNS 查询直接发给运营商的解析器。你的数据包确实经过加密并通过 VPN 转发,可运营商照样收到了一份完整、带时间戳的访问域名清单。这就让 VPN 的意义大打折扣。
这种泄露之所以"隐蔽",是因为表面上一切正常——网页照常打开。你只有通过测试才会发现它。
DNS 泄露的常见原因
- 操作系统解析器绕过隧道。 操作系统有时会保留此前配置的 DNS 服务器,或采用"谁先响应用谁"的策略,让 VPN 解析器和运营商解析器赛跑,结果可能选错。
- 分流(Split Tunneling)。 如果你只让部分应用或网段走 VPN,被排除流量的 DNS——有时甚至是全部流量的 DNS——会直接发出去。
- IPv6 泄露。 很多 VPN 配置只承载 IPv4。如果你的网络支持 IPv6 而 VPN 对其视而不见,IPv6 的 DNS 查询就会毫无保护地溜出去。
- 配置不当或过于简陋的客户端。 有些 VPN 应用不强制使用自己的 DNS,或在设备休眠、切换网络、重新连接后没能恢复保护。
- 透明 DNS 劫持。 部分运营商会拦截所有 53 端口流量并自行应答,无论你配置了哪台解析器——除非你的 DNS 已加密,否则必然泄露。
为什么即便用了 VPN 仍需关注
人们常以为只要开了 VPN 就匿名了。VPN 确实会加密流量、对目标服务器隐藏你的 IP,但它只有在客户端被配置为捕获并隧道化这些查询时,才会保护 DNS。一旦 DNS 泄露,运营商——以及与其共享数据的政府或广告商——就能按域名重建你的浏览历史,尽管他们读不到页面内容。同样的逻辑也适用于 WebRTC,它能完全独立于 DNS、直接从浏览器内部暴露你的真实 IP,这条旁路可参阅我们的阻止 WebRTC IP 泄露指南。
如果你想核实外界看到的真实 IP 与解析器是什么样子,BrowserInsight 的 IP 情报检测会显示服务器实际看到的地址,VPN/代理检测工具则会标示你的连接看起来像 VPN、代理,还是裸露的运营商线路。
加密 DNS:DoH、DoT 与 DNSCrypt
从根本上修复明文 DNS 的办法,是对查询本身加密,让网络路径和试图干预的运营商都既读不到也劫持不了。目前主流有三种方案:
- **DNS over HTTPS(DoH)**把 DNS 查询封装在普通的 HTTPS 流量中,走 443 端口。由于它看起来与普通网页流量无异,很难被单独识别或封锁,且已内置于现代浏览器(Chrome、Firefox、Edge)的"安全 DNS"功能中。
- **DNS over TLS(DoT)**把 DNS 包裹在 TLS 会话里,使用专用的 853 端口。它清晰、便于在网络层监控,因此常用于操作系统级和路由器级配置——但专用端口也更容易被敌对网络封锁。
- DNSCrypt 是一种较老的协议,用于在你和支持它的解析器之间对查询进行认证与加密。如今较为小众,但仍有部分隐私工具在使用。
明文 DNS、DoH、DoT 与 VPN 隧道 DNS 对比
| 方式 | 传输 / 端口 | 是否加密 | 是否对运营商隐藏查询 | 备注 |
|---|---|---|---|---|
| 明文 DNS | UDP/TCP 53 | 否 | 否 | 默认;运营商与路径上的观察者均可见 |
| DNS over HTTPS(DoH) | HTTPS 443 | 是 | 是 | 与网页流量混同;可按应用或浏览器配置 |
| DNS over TLS(DoT) | TLS 853 | 是 | 是 | 易于系统/路由器级部署;端口可能被封 |
| DNSCrypt | UDP/TCP,自定义 | 是 | 是 | 小众;可对解析器进行认证 |
| VPN 隧道 DNS | VPN 隧道内 | 是(经隧道) | 是(对运营商) | 运营商一无所知;你需信任 VPN 的解析器 |
加密 DNS 能对网络隐藏你的查询,但你选用的那台解析器依然看得到。请挑选你真正信任的解析器——从"我的运营商无所不知"变成"某家会记录日志的第三方无所不知",并不算升级。评估服务商时,可参阅我们的隐私工具对比。
值得信赖的 VPN 应如何处理 DNS
一款做得好的 VPN 不会只加密数据,它会从头到尾掌控 DNS。具体来说,它应当:
- 在隧道内运行自己的 DNS 解析器,让查询永不接触运营商。
- 强制所有 DNS 走隧道,覆盖操作系统配置的服务器,不存在任何泄漏到 53 端口的"抢答"竞速。
- 处理或禁用 IPv6,使 IPv6 查询无法从仅承载 IPv4 的隧道逃逸。
- 内置断网保护开关(Kill Switch),在隧道断开时阻断包括 DNS 在内的所有流量,而不是退回到运营商解析器"裸奔"。
如果一款 VPN 客户端连这些都不保证,那么在你亲自测试之前,请把它当作有泄露风险来对待。
如何测试 DNS 泄露
测试只需一分钟,却是唯一能确认的方法。连上 VPN(或启用加密 DNS)后,查看是哪些解析器 IP 在应答你的查询。如果出现的是运营商解析器,或一个地理定位指向你所在地区的地址,而不是 VPN 的解析器,那就说明发生了泄露。一个解析器 IP 究竟能把你的位置定位得多精确,则是另一个问题——参阅 IP 地理定位到底有多准。
在命令行中可以直接检查解析过程:
# 单次查询发往哪台解析器、返回了什么?
nslookup browserinsight.net
# Linux(systemd-resolved):按链路显示实际使用的 DNS 服务器
resolvectl status
# Linux/macOS:查看某次查询返回的解析器(看 SERVER:)
dig browserinsight.net
留意 Server: / SERVER: 这一行:它应当是你的 VPN 解析器或你选定的加密 DNS 服务商,绝不应是运营商的设备。想从浏览器一侧看到外界如何识别你,可在连接前后各运行一次 BrowserInsight 的 IP 检测——IP 及其识别出的网络应当发生变化。VPN/代理检测则有助于确认流量是否从你预期的出口离开。
具体的防护步骤
操作系统
- 在系统级设置可信解析器。 Windows 11 中,进入"设置 → 网络 → DNS 服务器分配"即可启用加密 DNS(DoH)。macOS 上可安装 DNS 配置描述文件,或使用能强制 DoH/DoT 的客户端。Linux 上可为
systemd-resolved配置DNSOverTLS=yes并显式填写DNS=项。 - 若 VPN 不承载 IPv6,则禁用 IPv6,或改用明确处理 IPv6 的 VPN,以免从 v6 协议栈泄露。
- 启用 VPN 断网保护开关,让隧道断开时无法回退到明文 DNS。
浏览器
- 在浏览器设置中开启安全 DNS / DNS over HTTPS(Chrome:隐私和安全 → 安全 → 使用安全 DNS;Firefox:设置 → 隐私与安全 → DNS over HTTPS)。
- 禁用 WebRTC,或使用能阻止 WebRTC 暴露本地与公网 IP 的扩展——这是与 DNS 不同的另一条泄露途径,但同样会暴露你。
- 避免使用会悄悄更改你 DNS 或代理设置的扩展。
路由器
- 在路由器层面配置加密 DNS,可一次性保护网络内所有设备,包括那些无法自行运行客户端的设备。这也是对抗运营商透明 DNS 劫持最可靠的防线,因为查询离开你的网络时就已经加密。
常见问题
使用 VPN 就能自动防止 DNS 泄露吗?
不能。只有当 VPN 客户端强制 DNS 走隧道并妥善处理 IPv6 时,它才能防止泄露。许多泄露恰恰发生在 VPN 已连接期间,因为操作系统仍在悄悄使用运营商的解析器。请始终测试,而不要想当然。
加密 DNS(DoH/DoT)和 VPN 是一回事吗?
不是。加密 DNS 只保护域名的查询过程;它对网络隐藏了你查询了哪些站点,却不会加密其余流量,也不会对你访问的站点隐藏你的 IP。VPN 才负责后者。两者相辅相成,不能互相替代。
用了 DoH,运营商还能看到我的浏览记录吗?
一旦你的 DNS 查询用 DoH 加密,运营商就再也读不到这些查询,也就无法据此记录域名。但它仍可能从你连接的 IP 地址,以及 TLS 握手时发送的服务器名称(SNI)中推断出部分目标。DoH 专门封堵的是 DNS 这条通道。
我怎么知道自己实际在用哪台解析器?
运行 nslookup 或 dig 并查看 Server: 行,或在 Linux 上使用 resolvectl status。想快速从外部一眼看清,BrowserInsight 的 IP 检测会显示外界看到的 IP 与网络——连接 VPN 时,它应当与你的 VPN 相符,而不是你家的运营商。
DNS泄漏暴露的是你自己的查询给错误的解析器,但DNS解析同样可以反过来被用在你身上:网站所有者可以用一条CNAME记录,把某个子域名别名指向追踪者的服务器,让追踪者的响应看起来像第一方。具体原理以及哪些浏览器现在能识破它,见CNAME伪装:把追踪者伪装成第一方。

