DNS 防泄漏硬核解析:Fake-IP 与 DoH/DoT 的协同工作原理
🔍 DNS 泄漏:你看不见的隐私漏洞
当你在浏览器中访问一个网站时,第一步通常是域名解析(DNS)。正常情况下,操作系统会将域名查询发送给路由器或运营商分配的 DNS 服务器。如果此时你的代理工具没有接管 DNS 请求,这些明文的查询就会绕过代理隧道直接暴露给本地网络。即使后续网页内容通过加密隧道传输,监控者仍然可以通过 DNS 记录知道你访问了哪些网站。
更隐蔽的是,一些浏览器或应用会绕过系统设置的 DNS,自行进行查询(如 Chrome 的异步 DNS 或 Firefox 的 DNS-over-HTTPS 独立设置),如果代理客户端没有在 IP 层或 TUN 层强制接管,泄漏就会悄然发生。
- 系统代理模式下,仅接管了浏览器 HTTP 流量,DNS 查询依然走本地。
- TUN 模式下未配置
dns-hijack,部分应用使用硬编码的 DNS 服务器。 - IPv6 优先导致 DNS 查询走 IPv6 通道,绕过了仅配置 IPv4 的代理规则。
- 浏览器开启了 DoH 但使用了国内 DNS 服务商,看似加密实则仍可被识别。
🧠 Fake-IP:从根源消除 DNS 泄漏
Fake-IP 模式是 Mihomo 内核(以及之前的 Clash 系列)提供的一种特殊 DNS 处理机制。它的核心思想是:本地完全不发起真实的 DNS 请求。当客户端发起 DNS 查询时,Fake-IP 模块会立即返回一个虚假的 IP 地址(默认段 198.18.0.0/16),并将域名与这个假 IP 的映射记录在内存中。随后,当 IP 数据包到达 TUN 接口时,Mihomo 内核通过目标 IP 反查出原始域名,再通过代理隧道前往远端 DNS 进行真实解析。
由于本地从未向运营商 DNS 或任何第三方服务器发送真实域名,即使对本地网络进行抓包,也完全看不到域名信息。这就是 Fake-IP 最根本的防泄漏能力。
🔐 DoH/DoT:为远端解析增加加密层
Fake-IP 保证了本地不会发生泄漏,但真实 DNS 解析最终仍然需要在远端完成。如果远端 DNS 服务器使用传统的 UDP 53 端口明文协议,那么在你代理出口到 DNS 服务器之间的链路上,DNS 请求依然可能被监听或篡改。因此,我们需要为远端解析引入 DNS-over-HTTPS (DoH) 或 DNS-over-TLS (DoT),将 DNS 查询封装在加密信道中。
| 方案 | 本地 DNS 请求 | 远端 DNS 请求 | 防泄漏程度 |
|---|---|---|---|
| 传统 UDP (53) 无代理 | 明文,直接泄漏 | 明文,可能被监听 | 极低 |
| 传统 DNS + 代理分流 | 可能绕过分流规则 | 明文,但走代理 | 中等 |
| Fake-IP + 传统 DNS | 完全无泄漏 | 明文,在出口处可能被监听 | 较高 |
| Fake-IP + DoH/DoT | 完全无泄漏 | 加密传输 | 极高 |
Clash Verge Rev 的 DNS 配置中,你可以分别为国内和国外域名指定不同的 DNS 服务器:nameserver 用于国内直连域名(通常使用国内的 DoH 如 https://doh.pub/dns-query),fallback 用于代理域名(使用国外的 DoH 如 https://dns.google/dns-query 或 DoT tls://1.1.1.1:853)。配合 fallback-filter 的地理位置过滤,可以确保国内域名走国内 DNS 获得最优 CDN 解析,国外域名走国外加密 DNS 防止污染。
⚙️ 完整配置示例:Fake-IP + DoH/DoT 协同
下面是一份经过生产环境验证的 DNS 配置片段,可直接用于 Clash Verge Rev 的 config.yaml。
同时,TUN 模式下必须启用 DNS 劫持,以防止应用绕过系统 DNS:
🛠️ 验证防泄漏是否生效
1. 在线检测网站
最直接的方式是访问 ipleak.net 或 dnsleaktest.com。如果配置正确,页面显示的 DNS 服务器 IP 应与代理出口节点所在地理位置一致,且不应出现任何你本地运营商的 DNS 地址。
2. 命令行验证
在终端执行 nslookup twitter.com 或 dig twitter.com,观察返回的 DNS 服务器地址。如果看到 198.18.x.x 的 IP(Fake-IP 返回),说明 DNS 已被 Clash 接管。
3. 抓包验证(进阶)
使用 Wireshark 监听本地网卡,过滤 dns 流量。在 Fake-IP 模式下,你应该看不到任何对真实域名的 DNS 查询包,只有应用程序向 198.18.x.x 发起的 TLS 连接。
dns-hijack 是否正确配置,确保它劫持了所有出口的 53 端口请求(包括 IPv6)。此外,某些浏览器(如 Firefox)可能开启了自身的 DoH 设置,需要在浏览器中关闭或将其指向 Clash 的 DNS 监听地址。
🚫 常见误区与排查
- 误区一:“我用了 DoH 就不需要 Fake-IP 了。” —— DoH 只加密传输,但本地请求仍然可能绕过代理,Fake-IP 是本地零泄漏的保障。
- 误区二:“开启了 TUN 模式就自动防泄漏。” —— TUN 模式必须配合
dns-hijack和正确的 DNS 配置才能防止泄漏,否则部分流量仍可能绕过。 - 误区三:“Fake-IP 会影响国内网站访问速度。” —— 通过
fallback-filter和nameserver的合理分流,国内域名会直接走国内 DNS 解析,不影响 CDN 调度。
::1 或 any:53 已包含)。否则部分系统可能通过 IPv6 默认路由将 DNS 发送到本地路由器,造成泄漏。
🏁 总结
DNS 防泄漏是网络隐私保护的基石。Clash Verge Rev 提供的 Fake-IP + DoH/DoT 组合拳,在本地和远端同时实现了 DNS 请求的零暴露。只需按照本文的配置模板进行设置,即可轻松达到极高的安全标准。建议定期使用在线工具验证,确保网络环境变化时防护依然有效。
安全是一场持久战,而每一次配置的正确落实,都是对自己隐私的尊重。如果你在配置过程中遇到任何问题,欢迎在 GitHub Issues 或讨论区与我们交流。