开着 VPN 还在 DNS 泄漏?Clash 十几组设置实测,附不漏的写法
不翻车编辑部 · 更新于

先说结论:DNS 漏不漏,和开不开 TUN 关系不大,看两样东西,一是客户端的 DNS 填的是谁,二是规则里有没有那条要先查 IP 地址的 GEOIP,CN,DIRECT。2026 年 10 月 17 日我们用 mihomo v1.19.32(Clash Verge Rev 2.5.8 自带的内核)测了十几组设置,用的是本站的 DNS 泄漏检测。最常见的“规则模式 + 国内 DNS”测出来就是泄漏,开 fake-ip 也一样;全局模式不漏;TUN 下换了 DNS 写法,10 次检测一次都没漏。还有一个坑:Clash Verge 的“DNS 覆写”用默认值时,检测网页显示一切正常,内核日志里每个域名却同时发给了阿里和腾讯。
这篇有视频版:YouTube 上看《开着VPN,你上过的网站国内DNS全看得到?实测十几组设置》。
DNS 泄漏是什么、泄了什么,见什么是 DNS 泄漏。这篇只讲实测。
怎么测的
- 内核:mihomo v1.19.32,就是 Clash Verge Rev 2.5.8 安装包里带的那个版本。没用图形界面,直接用同一个内核跑配置文件。
- 检测:Chrome 走内核的代理端口,打开本站 DNS 泄漏检测。工具会让浏览器查 10 个一次性的随机域名,再看替你去查的是哪几台 DNS 服务器。
- 客户端的 DNS 填 114.114.114.114,代表国内常见的运营商和公共 DNS。
- 节点是我们自己搭的 Shadowsocks 服务端,服务端的 DNS 用 Cloudflare。所以结果很好认:出现中国电信,就是查询走了 114;出现 Cloudflare 或 Google,就是查询进了节点。
- TUN 那几组要管理员权限,放在 Linux 容器里,用同一个版本的内核跑,容器里用 curl 按网页工具同样的方法请求随机域名。
全部配置和原始结果按组列在文末。
规则模式加国内 DNS,为什么会泄漏
第一组就是大多数人的用法:规则模式,DNS 填 114,规则用 3x-ui 导出的 Clash 订阅自带的那四条。结果:检测到 DNS 泄漏,两台服务器全是中国电信。

问题出在倒数第二条规则:
rules:
- GEOSITE,private,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT # 服务器在国内就直连
- MATCH,PROXY
GEOIP,CN 要判断网站的服务器在不在国内,可客户端手里只有域名,得先查出 IP 地址。这一查,就是拿着你要去的域名问了 114。mihomo 文档写得很直白:

内核日志里能看到每个随机域名都是向 114 查的:
[DNS] resolve nnftmsfs4qklqj0igshhdb3jno42u8w5.edns.ip-api.com A from udp://114.114.114.114:53
[DNS] resolve fqfexesf6fis6dlg5toxfxf2o0t5cag5.edns.ip-api.com A from udp://114.114.114.114:53
前两条域名规则没匹配上的海外网站,都会被这样问一遍。
开了 fake-ip 能防泄漏吗
不能。我们把增强模式在 fake-ip 和 redir-host 之间换着测:fake-ip 泄漏,redir-host 也泄漏,后者的表里中国电信和 Cloudflare 都有,114 和节点那边各查了一遍。

GEOIP 规则要的是真实 IP,fake-ip 发的 198.18 开头的假地址不算数,该查还得查。
全局模式会泄漏吗
同样填 114,换成全局模式,没有发现泄漏,表里全是 Cloudflare,内核日志里本机一次都没有向 114 发起解析。全局模式不看规则,域名原样交给节点,由节点那边去查。

这里我们踩了一个坑:刚切到全局,第一次测还是泄漏。翻日志才发现,全局走的是一个叫 GLOBAL 的组,它默认选的是 DIRECT,等于什么代理都没走。Clash Verge Rev 界面上也是这样:

切到全局以后,记得在 GLOBAL 里点一下你的节点。全局的代价是国内网站也绕到国外,慢,国内 App 还可能提示异地登录,日常用不划算。
开 TUN 是不是必然泄漏
不是,TUN 本身决定不了。TUN 组每组测 10 次:
| TUN 下的写法 | 10 次检测结果 |
|---|---|
| fake-ip + DNS 114 | 10 次全是中国电信 |
| redir-host + DNS 114 | 10 次全是中国电信 |
fake-ip + DNS 114 + no-resolve |
10 次全是 Cloudflare |
| 本文后面的不漏写法 | 10 次全是 Google |
| 内核的 DNS 功能没开 | 劫持过来的查询没人处理,全部解析失败 |
最后一组挺意外:TUN 开着、配置里没开 DNS,日志里能看到查询被劫持了,但没人回应,网页全部打不开。开 TUN,DNS 要一起开。
Windows 上还多一层:首选网卡的 DNS 一秒没回应,系统会把查询发给所有网卡的 DNS,包括本地宽带的。Clash Verge Rev 里打开“严格路由”能挡住,这部分我们没在 Windows 上测,依据是 mihomo 文档和微软文档,详见 TUN 模式是什么。
检测说没泄漏,就一定没漏吗
不一定。Clash Verge Rev 的“DNS 覆写”打开以后,默认的域名服务器有三个:Google 的 8.8.8.8、腾讯的 doh.pub、阿里的 alidns,源码里就是这么写的:

我们用这套默认值测,10 次检测结果全是 Google,看着没问题。可内核日志里,每个随机域名都同时发给了这三家:
[DNS] resolve 3omd3zhgtu0lm8r21yrkxquophyv9r0m.edns.ip-api.com A from https://dns.alidns.com:443/dns-query
[DNS] resolve 3omd3zhgtu0lm8r21yrkxquophyv9r0m.edns.ip-api.com A from https://doh.pub:443/dns-query
[DNS] resolve 3omd3zhgtu0lm8r21yrkxquophyv9r0m.edns.ip-api.com A from udp://8.8.8.8:53
网页为什么没显示阿里和腾讯?检测服务记下的是最先找上门的那一台 DNS,三家同时去问,谁先到表里就是谁,其余的不会出现。这是这类检测方法本身的局限,本站工具也一样。拿不准的时候,打开客户端日志,看看域名到底发给了谁。
怎么设置才不漏
两个办法,我们在规则模式和 TUN 下都测过。
办法一:给 GEOIP 规则加 no-resolve。 意思是不为这条规则去查 IP,查不到就往下走:
- GEOIP,CN,DIRECT,no-resolve

代价有两个:有的网站服务器在国内、域名却不在国内名单里,它会绕去节点;而且订阅一更新,自带的规则会被覆盖回去。
办法二:改 DNS 覆写(更推荐)。 Clash Verge Rev 设置 → DNS 覆写,打开以后改四个格子:
- 域名服务器:填海外的加密 DNS,比如
https://1.1.1.1/dns-query、https://8.8.8.8/dns-query。 - 遵循路由规则:打开。查询本身也按规则走,海外的 DNS 走节点去查。
- 代理节点DNS:填一个国内的,比如
https://223.5.5.5/dns-query,只用来解析节点自己的域名。 - 直连域名服务器:也填国内的,国内网站照样用国内 DNS 解析,速度不受影响。

“遵循路由规则”对应的就是 mihomo 的 respect-rules:

写成配置是这样(DNS 覆写的“高级”里可以直接贴,也可以写进自己的配置文件):
dns:
enable: true
enhanced-mode: fake-ip
respect-rules: true
nameserver:
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query
proxy-server-nameserver:
- https://223.5.5.5/dns-query
direct-nameserver:
- https://223.5.5.5/dns-query
改完测一次,9 台 DNS 服务器全是 Google 和 Cloudflare,没有 114:

DNS 覆写是按订阅单独保存的,换了订阅要再开一次。
浏览器的安全 DNS 也要看
Chrome 和 Edge 设置里有“使用安全 DNS”,如果选的是阿里或腾讯,开着 TUN 时浏览器会绕开系统,自己去问它们。走系统代理时,浏览器一般把域名直接交给代理,这一项影响不大。在浏览器设置里搜“安全 DNS”,关掉或者换成海外的。
测完 DNS,再查这两样
- WebRTC 泄漏检测:看浏览器有没有把本地 IP 露出去,这和 DNS 设置无关,是浏览器自己的事。
- 分流检测:看国内网站是不是直连、国外网站是不是走了节点。改完 DNS 和规则以后测一次,确认没把国内网站也绕出去。
Clash Verge Rev 的其他常见问题见 Clash Verge Rev 常见问题,从零连上自建节点见 Windows 用 Clash Verge Rev 连 3x-ui 节点。
这次测试的缺点
- 单台测试机、单个时段,每组 10 次查询,换一个网络环境结果的细节可能不同。
- TUN 只在 Linux 容器里测了,Windows 的多网卡 DNS 行为没测。
- 检测服务只显示最先到的那台 DNS,几家并发时会漏显示,所以“Clash Verge 默认值”那组要靠内核日志才看得出来。
- “国内 DNS”用 114 代表,没有逐家测运营商的默认 DNS。
常见问题
测出 DNS 泄漏,节点是不是就不能用了?
不是。节点照样能用,泄出去的是访问记录:国内的 DNS 能看到你几点查了哪些域名,看不到网页内容。
手机上用 Clash 类客户端要不要管?
手机上的 Clash 类客户端用的也是这类内核,道理一样。在手机浏览器里打开同一个检测页面就能测。
海外 DNS 会不会拖慢国内网站?
按上面的写法,直连域名服务器填的是国内的,国内网站还是国内 DNS 来解析。
规则模式下,国内网站用国内 DNS 算泄漏吗?
不算,这是正常设计。检测用的随机域名在海外,它被国内 DNS 查了,才说明规则或 DNS 没配好。
原始数据
测试日期 2026-10-17,内核 mihomo v1.19.32,检测用不翻车 DNS 泄漏检测(ip-api EDNS 方式,每组 10 个随机域名)。
| 组 | 模式与写法 | 结果 |
|---|---|---|
| 1 | 规则 + DNS 114,fake-ip | 泄漏:2 台,均为中国电信 |
| 2 | 规则 + DNS 114,redir-host | 泄漏:中国电信 2 台、Cloudflare 2 台 |
| 3 | 全局 + DNS 114,GLOBAL 保持默认 DIRECT | 泄漏(等于全部直连,作废) |
| 4 | 全局 + DNS 114,GLOBAL 选中节点 | 不漏:Cloudflare 2 台 |
| 5 | 规则 + DNS 114 + no-resolve | 不漏:Cloudflare 2 台 |
| 6 | 规则 + respect-rules 写法 | 不漏:Google 8 台、Cloudflare 1 台 |
| 7 | 规则 + Clash Verge DNS 覆写默认值(容器) | 网页显示 Google ×10;日志显示同时发给阿里、腾讯、Google |
| 8 | 规则,内核 DNS 未开、系统 DNS 为 114(容器) | 泄漏:中国电信 ×10 |
| 9 | TUN + DNS 114,fake-ip(容器) | 泄漏:中国电信 ×10 |
| 10 | TUN + DNS 114,redir-host(容器) | 泄漏:中国电信 ×10 |
| 11 | TUN + DNS 114 + no-resolve(容器) | 不漏:Cloudflare ×10 |
| 12 | TUN + respect-rules 写法(容器) | 不漏:Google ×10 |
| 13 | TUN,内核 DNS 未开(容器) | 全部解析失败 |
| 对照 | 直连 + DNS 114 | 中国电信 2 台 |
