DNS 泄漏是指:本应通过 VPN 或代理等隐私服务转发全部网络流量的设备,却无意中通过默认的 ISP DNS 服务器把 DNS 查询直接发往互联网,从而暴露了用户的上网活动。即使主连接看起来是加密的,互联网服务提供商(ISP)仍可记录访问过的网站和服务,因此隐私会受到损害。
理解 DNS 解析
Domain Name System(DNS)把人类可读的域名(例如 example.com)转换为机器可读的 IP 地址(例如 192.0.2.1)。当用户尝试访问网站时,操作系统会向配置的 DNS 服务器发送 DNS 查询。在没有代理或 VPN 的情况下,该查询通常发往 ISP 的 DNS 服务器。使用代理或 VPN 时,本意是让这些查询安全地经由该服务转发,通常使用该服务自有的 DNS 解析器,或以安全方式转发查询。
标准 DNS(UDP/TCP 53 端口)
传统 DNS 查询以明文发送,主要走 UDP 53 端口。这使其容易被窃听和篡改。即便主数据流量已被代理或 VPN 加密,未加密的 DNS 查询仍可能暴露浏览习惯。
加密 DNS 协议
为降低标准 DNS 的隐私与安全风险,出现了若干加密协议:
- DNS over HTTPS(DoH):将 DNS 查询封装在 HTTPS 流量中,通常走 TCP 443 端口。这使 DNS 流量与普通网页流量混杂,更难被识别和屏蔽。
- DNS over TLS(DoT):使用 TLS 加密 DNS 查询,通常走 TCP 853 端口。DoT 为 DNS 提供了专用的加密通道。
- DNSCrypt:一种较早的协议,用于加密客户端与 DNS 解析器之间的 DNS 流量。
这些协议通过阻止第三方观察或篡改 DNS 查询来增强隐私。但如果系统在特定情况下退回到未加密的 DNS,使用这些协议本身并不能防止 DNS 泄漏。
DNS 泄漏的成因机制
DNS 泄漏通常源于配置错误,或源于绕过预期安全隧道的特定操作系统行为。
操作系统层面的 DNS 处理
操作系统可能表现出导致泄漏的行为:
- Windows Smart Multi-Homed Name Resolution:在拥有多个活动网络接口的 Windows 系统上(例如 Wi-Fi 与以太网,或 VPN/代理接口与物理接口),系统可能同时向所有可用 DNS 服务器发起查询,并采用响应最快的结果。如果最快的响应来自 ISP 的 DNS 服务器,就会发生泄漏。
- IPv6 回退:即使 IPv4 流量已正确通过代理或 VPN 转发,操作系统仍可能尝试用 IPv6 解析域名。如果代理/VPN 服务不完全支持 IPv6,或其 IPv6 DNS 解析器配置不当,IPv6 DNS 查询可能绕过隧道,直接发往 ISP 的 IPv6 DNS 服务器。
- DHCP 下发的 DNS 服务器:接入网络时,设备会通过 DHCP 获得 DNS 服务器地址。如果代理/VPN 客户端未能正确覆盖或屏蔽这些默认 DNS 设置,操作系统可能会继续使用它们。
代理/VPN 客户端故障
- 软件崩溃或断连:如果代理或 VPN 客户端软件意外崩溃或断开,系统可能在用户察觉之前退回到默认网络设置,包括 ISP 的 DNS 服务器。
- 分流(split tunneling)配置错误:分流本身是一项正当功能,但配置不当会导致被排除的应用或目标地址的 DNS 查询绕过安全隧道。
- 缺少 DNS 泄漏保护:部分代理或 VPN 服务未实现可靠的防泄漏机制,例如自动指定自有 DNS 服务器或屏蔽外部 DNS 查询。
浏览器专属的 DNS 设置
部分浏览器(例如 Chrome、Firefox)提供自带的 DoH 实现,可独立于系统 DNS 设置进行配置。如果浏览器被设置为使用特定的 DoH 服务商,而代理/VPN 服务未拦截或接管这一行为,浏览器的 DNS 查询就可能绕过安全隧道。
DNS 泄漏的后果
- 隐私受损:这是最严重的后果。您的 ISP 以及可能监控 ISP 流量的其他机构能够看到您的 DNS 查询,从而得知您访问的网站、流媒体服务和在线应用。这些数据可用于用户画像、定向广告或政府监控。
- 绕过地域限制失败:如果用户依靠代理服务绕过地域限制,DNS 泄漏会向内容提供方暴露其真实地理位置,导致访问被拦截。
- 安全风险:若用户接入了企业网络,DNS 查询可能泄露内部网络资源的敏感信息。此外,未加密的 DNS 查询容易遭受 DNS 欺骗(DNS spoofing),攻击者可借此把用户重定向到恶意网站。
检测 DNS 泄漏
可以采用多种方法检测 DNS 泄漏。
在线 DNS 泄漏测试工具
很多网站提供自动化的 DNS 泄漏检测。这类工具通常按以下步骤工作:
1. 指示您的浏览器解析一组唯一的域名。
2. 观察是哪些 DNS 服务器完成了这些域名的解析。
3. 将执行解析的 DNS 服务器 IP 地址与您的代理/VPN 隧道出口节点 IP 地址进行比对。
4. 如果这些 DNS 服务器 IP 属于您的 ISP 或任何与您的代理/VPN 服务无关的第三方,则说明存在泄漏。
此类工具的例子包括 dnsleaktest.com 和 ipleak.net。
手动核查 DNS 服务器
命令行工具可以显示系统当前正在使用的 DNS 服务器。
Windows:
ipconfig /all
在活动网络适配器下查看 DNS Servers 一项。
检查 53 端口上的活动连接:
netstat -an | findstr ":53"
该命令会列出 53 端口上的活动 UDP 和 TCP 连接。如果看到指向代理/VPN 的 DNS 或 127.0.0.1(代理在本地处理 DNS 时)以外的 IP 地址,说明可能存在泄漏。
macOS:
scutil --dns
查看 nameserver[0] 条目。
检查 53 端口上的活动连接:
lsof -i :53
Linux:
cat /etc/resolv.conf
其中的 nameserver 条目表示已配置的 DNS 服务器。请注意,在使用 systemd-resolved 等服务的系统上,resolv.conf 可能指向本地解析器(例如 127.0.0.53),再由其转发查询。此时需要进一步检查本地解析器的配置。
检查 53 端口上的活动连接:
sudo netstat -tulpn | grep :53
防止 DNS 泄漏
有效防止 DNS 泄漏需要多层次的方案:既依靠可靠的代理/VPN 客户端功能,也要配合操作系统层面的配置。
1. 使用可靠的代理/VPN 服务
优质的代理或 VPN 服务应内置 DNS 泄漏保护。关键功能包括:
* 自有 DNS 服务器:服务应将所有 DNS 查询通过其自有的安全加密 DNS 服务器转发。
* DNS rebinding 防护:防止恶意 DNS 响应把流量重定向到内部网络地址。
* Kill switch:安全连接中断时自动切断所有互联网流量,防止数据和 DNS 泄漏。
* IPv6 泄漏防护:将 IPv6 流量纳入隧道、禁用 IPv6,或将 IPv6 DNS 查询交由自有解析器处理。
2. 配置操作系统的 DNS 设置
手动配置系统 DNS 可覆盖默认设置并防止泄漏。
将 DNS 设为回环地址(127.0.0.1):
如果所用的代理或 VPN 客户端本身充当本地 DNS 解析器,请将网络适配器的 DNS 设置为 127.0.0.1。这会强制所有 DNS 查询由本地客户端处理,再由其经隧道安全转发。
禁用 Windows Smart Multi-Homed Name Resolution:
该功能可通过组策略编辑器或注册表编辑器禁用。
- 组策略编辑器(gpedit.msc)— Windows 专业版/企业版:
- 依次进入
Computer Configuration>Administrative Templates>Network>DNS Client。 - 找到
Turn off Smart Multi-Homed Name Resolution。 - 将其设为
Enabled。
- 依次进入
- 注册表编辑器(regedit.exe)— 所有 Windows 版本:
- 定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters。 - 新建一个名为
DisableSmartNameResolution的 DWORD(32 位)值。 - 将其数值数据设为
1。
- 定位到
禁用 IPv6(如非必需):
如果您的代理/VPN 服务不完全支持 IPv6 隧道,在网络适配器上禁用 IPv6 可以避免与 IPv6 相关的 DNS 泄漏。
- Windows:
- 进入
Network and Sharing Center>Change adapter settings。 - 右键点击活动网络适配器 >
Properties。 - 取消勾选
Internet Protocol Version 6 (TCP/IPv6)。
- 进入
- macOS/Linux:
请查阅对应发行版/版本的文档以禁用 IPv6,通常涉及修改网络配置文件或内核参数。
3. 配置防火墙规则
将防火墙配置为:屏蔽所有并非源自代理/VPN 应用、也未被其显式放行的出站 DNS 流量(UDP/TCP 53 端口、DoT 的 TCP 853 端口、DoH 的 TCP 443 端口)。这样任何绕过安全隧道发送 DNS 查询的尝试都会被拦截。
4. 浏览器层面的 DNS 配置
如果使用内置 DoH 的浏览器,请将其配置为使用符合您隐私要求的 DoH 服务商,或直接关闭浏览器层面的 DoH,确保所有 DNS 请求都交由系统(也就是代理/VPN)的解析器处理。
5. 在系统层面使用加密 DNS 协议
可以考虑将系统直接配置为使用 DoH、DoT 或 DNSCrypt 解析器,尤其是当您的代理服务支持转发到特定加密 DNS 端点时。这会在 DNS 查询到达代理服务的 DNS 解析器之前,再增加一层加密。
DNS 解析方式对比
| 特性 | 标准 DNS(UDP/TCP 53) | DNS over TLS(DoT — TCP 853) | DNS over HTTPS(DoH — TCP 443) |
|---|---|---|---|
| 加密 | 无 | 有(TLS) | 有(HTTPS/TLS) |
| 端口 | 53 | 853 | 443 |
| 流量混杂 | 特征明显 | 特征明显 | 与网页流量混杂 |
| 被屏蔽的难易度 | 容易 | 中等(专用端口) | 困难(与网页共用) |
| 隐私性 | 低 | 高 | 高 |
| 性能影响 | 极小 | 低 | 低到中等 |
| 适用场景 | 旧系统、内部网络 | 专用安全 DNS | 以网页为主、规避防火墙 |
理解 DNS 泄漏的成因机制并落实上述防范策略,用户在使用代理服务时就能显著提升自身的在线隐私与安全。
