节点显示已连接,网页也能打开,你可能觉得一切正常。但还有一件事不少人没留意:你访问的网站名字,有可能还是被你本地的网络运营商看得清清楚楚。这就是常说的 DNS 泄漏。
先说结论:开了机场订阅,不代表 DNS 一定安全。有没有泄漏,取决于你的客户端 DNS 设置、是否开了 TUN、系统和浏览器有没有“绕路”。好消息是,自查只要 5 分钟,修复也基本是改几个开关。这篇文章带你搞清楚 DNS 泄漏是什么、怎么测、怎么修,顺便把原理用大白话讲一遍。
说明一下:我们查阅了 Clash 内核 Mihomo 的官方 Wiki、TechRadar 等公开资料来写这篇,文中没有任何实测测速数据,也不推荐任何机场或 VPN 服务商。
一、DNS 泄漏到底是什么?说白了就是“问路”问错了人
你在浏览器里输入一个网址,电脑并不认识网址,得先去问一个“DNS 服务器”:这个域名对应哪个 IP?Cloudflare 的科普文档把 DNS 比作“互联网的电话簿”,作用就是把人能读懂的域名翻译成机器用的 IP 地址(Cloudflare:What is DNS)。
问题出在“问路”这一步。正常情况下,你连上代理后,这个问路的请求也应该跟着走代理。如果它没走,而是直接发给了你本地宽带运营商的 DNS,那就叫 DNS 泄漏:流量内容虽然加密了,但“你查了哪些域名”被暴露了。TechRadar 的解释也是类似的:DNS 泄漏指 VPN 没有把 DNS 请求完整保护起来,导致查询记录甚至设备 IP 可能暴露(TechRadar:What is a DNS leak,2023 年更新,该文为 ExpressVPN 合作内容,参考时请留意立场)。
顺带一提,机场和 VPN 的概念区别如果你还不太清楚,可以先看 机场和 VPN 有什么区别,再回来看这篇会更好懂。
二、哪些情况容易泄漏?常见的 6 个“绕路口”
综合 TechRadar 和 Mihomo 官方文档,容易出现泄漏的场景主要有这几类:
| 情况 | 说白了是怎么回事 | 你该怎么办 |
|---|---|---|
| 客户端没开 DNS 模块或只代理了浏览器 | 只有部分程序走代理,其他程序仍用系统 DNS | 改用 TUN 模式,或检查系统代理是否生效 |
| TUN 开了但没接管 DNS | 流量进了虚拟网卡,DNS 请求却没被“劫持”到客户端内部 | 配置 dns-hijack |
| Windows 多网卡并行解析 | 系统同时向多张网卡发 DNS 请求,取最快的 | 开启 strict-route,或关闭智能多宿主名称解析 |
| 浏览器自带安全 DNS | 浏览器可能自己走一条加密 DNS,不一定经过你的代理设置 | 检查浏览器“使用安全 DNS”设置 |
| IPv6 没处理 | IPv4 走了代理,IPv6 请求却走了本地 | 关闭 IPv6 解析或确保 IPv6 同样被代理 |
| Android 开了“私人 DNS” | 系统直接用加密 DNS,客户端接管不到 | 代理期间关掉私人 DNS |
三、5 分钟自查:怎么知道自己有没有 DNS 泄漏
思路很简单:先看“没开代理时”你的 DNS 是谁,再看“开了代理后”有没有还是它。TechRadar 给的步骤是这样的:
- 断开代理,打开 dnsleaktest.com,跑一次“Extended test(扩展测试)”,记下显示的 DNS 服务器 IP 和运营商名称。
- 连上节点,再跑一次同样的测试。
- 如果第二次出现的 DNS 服务器和第一次一样,或者明确属于你本地宽带运营商,大概率就是泄漏了。
- 再用 BrowserLeaks 之类的第二个工具复核一遍,同时看看 WebRTC 项有没有暴露你的真实 IP。
- 每台设备都要测,手机和电脑的设置是分开的。
有两点提醒你:
- 别只测一次就下结论。测试网站的结果可能受缓存影响,改完设置后记得清缓存再测(命令见后文)。
- 国内网站走本地 DNS 是正常的分流行为。很多配置会让国内域名直连、用国内 DNS 解析,这是设计如此,不等于“泄漏”。你真正要关心的,是需要走代理的那部分域名有没有被本地 DNS 查到。
测试工具本身是第三方网站,你访问它们也会产生记录,用完即可,不要在这些页面输入任何账号信息。
四、原理:为什么 fake-ip 能少泄漏?
这一节稍微有点技术,但看懂了你就明白那些开关为什么这么设。
普通模式(redir-host):先在本地查,再决定走不走代理
Mihomo 的 DNS 增强模式有两种:fake-ip 和 redir-host,官方文档注明默认是 redir-host(Mihomo Wiki:DNS,页面更新于 2026 年 7 月)。在这种模式下,客户端会真的去解析出一个 IP,再根据这个 IP 和规则决定走代理还是直连。也就是说,解析这一步发生在本地侧,DNS 服务器选得不对,就可能暴露记录。
fake-ip:先给你一个“假地址”,真正的解析交给远端
fake-ip 的做法是:应用来问“这个域名是什么 IP”,客户端立刻回一个假的地址(来自 fake-ip-range,官方示例是 198.18.0.1/16 这个段)。应用拿着假地址发起连接,客户端再根据域名去走对应的出口。按这类代理的常规做法,需要走代理的域名,真实解析由节点那一侧完成,本地就不必再查一遍。这样一来,本地 DNS 查询的机会大幅减少,响应也更快。
但 fake-ip 不是万能的。有些程序(比如局域网设备发现、部分游戏联机、校时服务)需要拿到真实 IP,这时就要用 fake-ip-filter 把这些域名排除掉,让它们拿到真实地址。官方文档里还提供了 blacklist、whitelist、rule 三种过滤模式,默认是 blacklist,只有命中过滤列表的域名才不给假地址。
顺带记住两个字段:nameserver 决定默认用哪些 DNS 去查;proxy-server-nameserver 只负责解析节点自己的域名。DNS 地址可以写成 DoH(官方示例 https://dns.alidns.com/dns-query)、DoT(如 tls://1.1.1.1)或普通 IP。很多机场订阅导入时会覆盖本地 DNS 设置,建议在客户端用“覆写”功能保存你自己的 DNS 片段。
五、修复:按这个顺序一步步改
下面按“影响大小”排序。每改一步,就按第三节重新测一次,这样你知道是哪一步起了作用。不同客户端界面不一样(选客户端可以看 Clash 还能用吗?客户端怎么选),但底层字段基本对应。
第 1 步:确认客户端 DNS 模块已启用
官方说明:enable 关闭时,会使用系统 DNS 解析。所以如果你的配置里 DNS 没开,所有查询都会走系统 DNS,也就是你本地运营商那一套。先把它打开,并按需选择 fake-ip 模式。
第 2 步:用 TUN 模式,并配置 dns-hijack
只开系统代理时,不走系统代理设置的程序可能直接用系统 DNS。TUN 会创建虚拟网卡接管全局流量,auto-route 负责自动设置路由,dns-hijack 则把匹配的 DNS 连接重定向进客户端内部的 DNS 模块。官方文档还提醒了两点:
- 在 macOS 和 Windows 上,发往局域网的 DNS 请求无法被自动劫持;
- 在 Android 上,开启“私人 DNS”时劫持不会生效,所以代理期间要把私人 DNS 关掉。
资料来源:Mihomo Wiki:TUN。
第 3 步:Windows 用户开启 strict-route
官方文档写明:开启 auto-route 后启用 strict-route,在 Windows 上会添加防火墙规则,阻止多网卡解析带来的 DNS 泄漏。代价是它可能让个别软件(官方举例 VirtualBox)在某些场景下出问题,所以改完要留意其他软件是否正常。
另一个办法是关闭 Windows 的“智能多宿主名称解析”。Neowin 的指南介绍,这个功能是 Windows 8 及以后版本里的,会同时向多个网络适配器发 DNS 查询并采用最先返回的结果,所以在有线加无线同时联网时,请求可能从 VPN 之外的网卡出去。关闭方法是在组策略编辑器(gpedit.msc)里依次进入“计算机配置 > 管理模板 > 网络 > DNS 客户端”,把“关闭智能多宿主名称解析”设为已启用,然后重启。家庭版没有组策略编辑器,可以用 Policy Plus 之类的工具。该指南成文较早(针对 Windows 10 和 8),操作前请确认你的系统版本,改系统策略前也建议先备份(Neowin 指南)。
第 4 步:检查浏览器的“安全 DNS”
Chrome 的“使用安全 DNS”默认处于自动模式:解析遇到困难时会退回到不加密的查询;如果你手动选了自定义服务商,则不会回退。如果测试发现浏览器的 DNS 表现和系统不一致,可以在“设置 > 隐私和安全 > 安全”里查看这一项(Chrome 帮助:安全 DNS)。是关掉还是手动指定,取决于你的整体 DNS 方案,关键是别让它和客户端各走各的。
第 5 步:处理 IPv6 与 WebRTC
Mihomo 的 ipv6 选项为 false 时,AAAA 查询会得到空解析,也就是不返回 IPv6 地址。TechRadar 还提到,IPv6 和 WebRTC 也是常见的泄漏路径,并建议顺手检查 WebRTC 结果。如果你的节点和网络本身支持 IPv6,就不要简单粗暴关掉,而是确保它也被代理接管。
第 6 步:清缓存再测
改完设置后,旧缓存可能让你误以为没生效。常用命令如下(来自 TechRadar):
- Windows:
ipconfig /flushdns - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Chrome:地址栏输入
chrome://net-internals/#dns,点击“Clear host cache” - Firefox:地址栏输入
about:networking#dns,清除 DNS 缓存
六、自查清单
- 断开和连接代理时,分别做过 DNS 泄漏测试,并记录了结果
- 客户端 DNS 模块已启用,增强模式已选定
- TUN 已开启,dns-hijack 已配置
- Windows 已开启 strict-route,或已关闭智能多宿主名称解析
- Android 已关闭私人 DNS
- 浏览器的安全 DNS 设置已确认,没有和客户端冲突
- IPv6 和 WebRTC 已检查
- 改动后清过 DNS 缓存再复测
- 订阅链接没有发给别人,也没有贴在公开的地方
另外,如果你的问题其实是“节点能连但特别慢”,那多半不是 DNS 的事,可以看看 节点延迟高怎么办;如果你在纠结免费订阅的隐私风险,推荐读 免费 VPN 安全吗。
常见问题(FAQ)
开了机场,运营商还能看到我访问什么吗?
内容一般被加密了,但如果 DNS 请求没走代理,你查询过的域名就可能被本地 DNS 记录。这正是上面要排查的点。
测试显示的是国内 DNS,一定是泄漏吗?
不一定。分流配置下,国内域名用国内 DNS 是正常的。要看的是“需要走代理的域名”有没有被本地 DNS 解析。拿不准时,换一个只能走代理的网站做测试,并对比断开代理前后的结果。
fake-ip 和 redir-host 选哪个?
官方默认是 redir-host。fake-ip 能减少本地解析,但个别程序需要真实 IP,要配合 fake-ip-filter 排除。先用 fake-ip,遇到程序异常再把对应域名加进过滤列表,是比较常见的思路。
手机上怎么查 DNS 泄漏?
做法和电脑一样:断开、连上各测一次。安卓要先关掉“私人 DNS”,否则 TUN 的 DNS 劫持不会生效。
机场能看到我的 DNS 记录吗?
走代理的流量都要经过节点,服务商从技术上有条件看到你的访问目标。所以要选有清晰隐私说明的服务,别用来处理敏感账号,也要防范跑路和订阅泄露的风险。
总结
DNS 泄漏说白了就是“问路”没走代理。排查三步走:断开连接各测一次、对比结果、按顺序修(DNS 模块、TUN 与 dns-hijack、Windows 多网卡、浏览器安全 DNS、IPv6)。每改一步清缓存复测,就能知道哪一步真正有效。最后提醒你:请遵守所在地的法律法规,并注意隐私与账号安全,不要把订阅链接随意发给别人。本文资料截至 2026 年 10 月,客户端和内核更新较快,请以官方文档为准。
参考来源:Mihomo Wiki – DNS、Mihomo Wiki – TUN、TechRadar、Cloudflare、Chrome 帮助、Neowin。