DNS 泄露:最容易被忽视的隐私缺口
很多人以为「开了代理,流量就全加密了」。不完全对。你的网络访问分两个动作:DNS 解析(把域名翻译成 IP)和建立连接(向 IP 发起请求)。多数代理方案重点保护后者,而 DNS 解析这条路径,如果配置不当,会以明文形式发给你运营商的 DNS 服务器。
后果是什么:即使网站内容你看不了,你访问过哪些域名,运营商侧一清二楚。域名列表本身就暴露了大量信息——你用了什么服务、看了什么网站。这就是 DNS 泄露(DNS Leak)。
Clash/Mihomo 体系内置了防泄露能力,但默认配置是否启用、参数怎么选,恰恰是绝大多数教程跳过的部分。SubBoost 把这件事做成了默认项:转换订阅时默认提供防 DNS 泄露的基础配置和 DNS 配置,你导出的聚合订阅天生带着正确的 DNS 设置。
泄露是怎么发生的
理解原理才能排查问题。客户端发起 DNS 查询时有几条可能路径:
路径 A(泄露):系统直接向本地网络下发(通常是运营商)的 DNS 服务器发明文 UDP 查询。代理只接管了到目标 IP 的连接,域名先裸奔了一步。
路径 B(安全):DNS 查询由代理核心接管——要么转发到远端节点解析(remote DNS),要么走加密 DNS(DoH/DoT)。运营商只看到你和代理服务器的加密连接,看不到你查了什么域名。
路径 C(半泄露):配置了 fake-ip 但某些场景(直连流量、特定客户端行为)回落到系统 DNS。比路径 A 好,但仍有漏点。
防泄露的目标就是让所有该加密的查询都走路径 B。
SubBoost 的默认防泄露配置
SubBoost 在生成订阅时默认写入的 DNS 配置,覆盖了关键项:
- 接管系统 DNS:让代理核心成为 DNS 的统一入口,而不是旁路旁观
- 国内外分流解析:国内域名用国内 DNS 解析(保证直连速度和 CDN 就近),国外域名走加密通道由远端解析——这正是「防泄露」与「不牺牲国内速度」的平衡点
- 加密上游:国外域名的解析走 DoH 之类的加密协议,杜绝明文外泄
对使用者来说,多数情况下不需要动这些默认值——这正是「默认安全」设计的价值。需要动手的只有两类场景:对解析速度有极致要求(自建 DoH 上游),或有特殊分流需求(某个域名强制走特定 DNS)。
验证:三步确认没有泄露
配置完不验证等于没配。三个方法由浅入深:
方法一:在线泄露检测站。 访问 DNS 泄露测试类网站(搜「dns leak test」),它会用随机子域名引导你的浏览器发起解析,然后显示「哪些 DNS 服务器接了你的查询」。如果列表里出现你运营商的 DNS 服务器,就是泄露了;只有代理链路上的 DNS(通常显示为节点所在地或你配置的加密上游),才是干净状态。
方法二:对比域名可见性。 更进一步的测试是「扩展测试」(extended test):它模拟更多查询行为,能暴露「某些域名走了系统 DNS、某些走了加密通道」的混合泄露。
方法三:抓包验证(最彻底)。 在本机抓 UDP 53 端口的出站流量:
# macOS/Linux 抓 53 端口明文 DNS 查询
sudo tcpdump -n port 53
配置正确的情况下,除少数国内直连域名的解析外,不应看到大量发往运营商 DNS 的明文查询。浏览器随便访问几个国外网站,tcpdump 窗口安静如鸡,就是防住了。
验证方法怎么选(速查表)
三种验证手段各有盲区,按场景选:
| 方法 | 能发现什么 | 盲区 |
|---|---|---|
| 在线泄露检测站 | 运营商 DNS 是否接了你的查询 | 只测浏览器流量,覆盖不了其他应用 |
| 扩展测试(extended) | 混合泄露(部分域名走系统 DNS) | 同样以浏览器流量为主 |
| tcpdump 抓 53 端口 | 本机所有明文 DNS 出站 | 需要命令行,看不到加密通道内容 |
日常用在线检测站快速体检,怀疑有漏点时上 tcpdump 看全貌。两类方法的结论都干净,才算真的防住。
防 DNS 泄露 FAQ
Q:fake-ip 模式是什么,要手动开吗?
fake-ip 是 Clash/Mihomo 的 DNS 工作模式:代理核心先给域名返回一个虚拟 IP,真实解析延迟到连接发起时在代理侧完成,DNS 查询天然不离开代理核心。SubBoost 生成的配置已按防泄露原则写好 DNS 段,通常不需要手动改模式。
Q:国内直连域名的解析走国内 DNS,算泄露吗?
不算。这是防泄露配置的设计平衡:国内域名用国内 DNS 解析,直连速度和 CDN 就近才有保障。泄露指的是「本该走代理的国外域名」的查询明文漏给运营商,两类流量要分开判断。
Q:浏览器自带的安全 DNS(DoH)要不要开?
建议关掉或明确统一。浏览器 DoH 会绕开系统解析路径自成一派,可能把你想让代理核心接管的查询悄悄带走,排查起来非常绕。要么关掉跟随代理核心,要么给它指定同一个加密上游。
Q:TUN 模式和系统代理,哪个防泄露更彻底?
TUN 模式。系统代理只接管遵守代理设置的应用,不遵守的应用(以及部分应用自发的 DNS 请求)可能绕出去;TUN 模式在网络层接管整机流量,泄露口子小得多。
Q:为什么抓包时还能看到少量明文查询?
国内直连域名的解析本来就走国内 DNS,是明文——这是设计内的行为(见上一问)。要看的是「有没有大量发往运营商 DNS 的国外域名查询」,那才是泄露信号。
排查清单:还是泄露怎么办
验证不过关时按这个顺序查:
- 确认用的是 SubBoost 生成的订阅——手改过配置文件的,DNS 段可能被覆盖回默认
- 检查客户端是否覆写了 DNS:部分客户端有自己的「DNS 设置」面板,会覆盖订阅里的配置,把它设为「跟随订阅」或关掉
- TUN/系统代理模式确认:仅系统代理模式下,部分应用可能绕过代理核心自己发 DNS(路径 A),TUN 模式接管更彻底
- 浏览器 DoH 冲突:浏览器自带的「安全 DNS」会绕过系统解析路径,行为不一致时统一它——要么跟随代理核心,要么明确指定加密上游
DNS 防泄露是订阅体系的「最后一块拼图」:订阅聚合管资源、分流管走向、链式代理管链路、DNS 管隐私。四块齐了,你的 Clash/Mihomo 体系才算完整。