DNS 泄漏检测与修复完整教程:Fake-IP、DoH 和 DNS 劫持(2026)
DNS 泄漏让你的 ISP 能看到所有访问域名。这篇讲用 ipleak.net 和 dnsleaktest.com 检测泄漏,以及 Mihomo、sing-box、Clash Verge Rev 中三种修复方案:Fake-IP 模式、DoH/DoT 加密上游、DNS 劫持。附带可直接复制的配置片段。
DNS 泄漏意味着你的 ISP 能看到你在访问哪些网站,即使你的网页流量走了代理。检测方法很简单:连上代理 → 打开 ipleak.net → 看显示的 DNS 服务器地址是不是你的本地 ISP。修复核心是把 DNS 请求也走代理,而不是直连 114.114.114.114 或 8.8.8.8。
很多用户代理连上了就以为没事。实际上浏览器先把域名翻译成 IP 地址(DNS 解析),这一步如果不走代理通道、直接发给宽带运营商的 DNS 服务器,运营商就能记录你访问了哪些域名。下面按 Mihomo / Clash Verge Rev 和 sing-box 两种内核展开检测与修复,每步都带可复制的配置片段。
用两个工具确认是不是真的泄漏了
先连上你的代理节点,确认系统代理或 TUN 模式已接管流量。
打开 ipleak.net。等页面加载完,找中间的 DNS Addresses 部分。这里面列出的 IP 就是浏览器在做 DNS 解析时被外部检测到的服务器地址。
正常的代理环境里,这里应该显示:
- 代理节点的出口 IP(和页面顶部 IP Address 显示的一致),或
- 客户端虚拟 IP 段(198.18.x.x),如果你开了 Fake-IP
泄漏的典型信号是:
- 看到
114.114.114.114、223.5.5.5、8.8.8.8这类公共 DNS - 看到 IP 归属地指向你所在城市的电信 / 联通 / 移动
- 看到运营商名称直接出现在 DNS 服务器列表里
ipleak.net 只做单次查询。如果列表干净,再打开 dnsleaktest.com 点 Extended Test——向你的 DNS 服务器发起 50 次随机子域名解析,能看出更完整的泄漏模式。结果中只要有一个 DNS 服务器不属于代理节点出口网络,就算泄漏。
别忘了同时看 ipleak.net 上的 WebRTC 部分。Chrome 和 Firefox 默认开启 WebRTC,即使代理工作正常,WebRTC 也可能泄漏你本机的局域网 IP 甚至公网 IP。Chrome 可以装 WebRTC Leak Prevent 扩展关掉;Firefox 在地址栏输入 about:config,把 media.peerconnection.enabled 改 false。
DNS 泄漏根因速查:现象、配置问题与对应修复
下表把最常见的泄漏现象、对应的 DNS 配置问题和修复动作列在一起,排查时直接对照自己的情况。
| 泄漏现象 | DNS 配置问题 | 修复动作 |
|---|---|---|
| ipleak.net 显示 114.114.114.114 或 8.8.8.8 | nameserver 填了公共 DNS 直连地址 | 把 nameserver 改成 DoH 地址(如 https://dns.google/dns-query),或开 Fake-IP 让客户端接管 DNS |
| ipleak.net 显示 ISP 的 DNS(如电信 202.96.x.x) | 系统 DNS 没被代理客户端劫持 | 在 TUN 配置里加 dns-hijack: [any:53, tcp://any:53],或在 sing-box 中配 sniff: true + domain_strategy |
| 开了 Fake-IP 但 DNS 还是泄漏 | 浏览器的 DoH 绕过了系统 DNS | Chrome: 设置 → 隐私与安全 → 安全 → 关闭「使用安全 DNS」;Firefox: 设置 → 隐私与安全 → 关闭 DNS over HTTPS |
| 几个 DNS 里只有部分泄漏 | DNS 分流规则里有一部分走了直连 upstream | 检查分流规则的 nameserver-policy 或 server 字段,确认所有需要隐私的域名都指向加密上游 |
| Android 手机上 DNS 泄漏 | 系统的私人 DNS(Private DNS)独立于代理客户端运行 | 设置 → 网络和互联网 → 私人 DNS → 选择「关闭」 |
| sing-box 配了 DoH 但日志里 DNS 却没走代理 | detour 字段漏写或标记名拼错 | dns.servers[].detour 必须填写标签名,且标签对应的 outbound 条目的 tag 必须一致 |
Fake-IP:把 DNS 请求关在客户端内部
在所有防泄漏方案中,Fake-IP 是最彻底的一种,也是 Mihomo / Clash Verge Rev 的默认推荐。它的逻辑和传统 DNS 完全不同。
传统模式:浏览器请求域名 → 系统发起 DNS 查询 → DNS 服务器返回真实 IP → 浏览器连这个 IP。只要 DNS 请求没走代理,泄漏就发生了。
Fake-IP 改了中间这一步。客户端拦截所有 DNS 请求,不向上游做真实解析,直接给每个域名分配 198.18.0.0/16 保留网段里的虚拟 IP。浏览器拿到假 IP 后发起 TCP 连接,客户端内部查映射表把虚拟 IP 还原成原始域名,再根据规则决定走代理还是直连。整个 DNS 解析过程不离开客户端,外部能看到的只有虚拟地址或代理出口 IP。
以下是 Mihomo / Clash Verge Rev 的 Fake-IP 标准配置:
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- https://dns.google/dns-query
- https://cloudflare-dns.com/dns-query
fallback:
- tls://8.8.8.8:853
fake-ip-filter:
- '*.lan'
- '*.localdomain'
- '*.msftncsi.com'
- '*.msftconnecttest.com'
- localhost.ptlogin2.qq.com
- '+.stun.*.*'
- '+.stun.*.*.*'
tun:
enable: true
stack: system
dns-hijack:
- any:53
- tcp://any:53
关键字段说明:
enhanced-mode: fake-ip核心开关。改成redir-host就退回传统模式。dns-hijack: [any:53, tcp://any:53]把系统 53 端口的 DNS 请求劫持进客户端 DNS 模块。没有这条,Fake-IP 只对走客户端网络栈的应用生效,系统级 DNS 仍会泄漏。fake-ip-filter:在里面的域名不返回虚拟 IP,走真实解析。放局域网后缀、Windows 网络检测、STUN 服务器等,否则这些服务连接异常。nameserver:Fake-IP 模式下主要用于 fake-ip-filter 中的域名和直连规则域名解析。
Fake-IP 的代价:ping、nslookup 这类命令会看到 198.18.x.x 虚拟 IP,不是 Bug,是设计如此。需要真实 IP 的应用在规则中设为直连,客户端会做真实解析。
Redir-Host 下的补救:DoH 和 DoT 加密上游
内网环境、旁路由架构或老旧规则集可能不兼容 Fake-IP,只能跑 Redir-Host。Redir-Host 每个域名都要真实解析一次,只要 nameserver 填的是 114.114.114.114 或系统 DNS,就明文泄漏了。
修复:把上游从 UDP 53 明文换成加密通道。DoH(DNS over HTTPS)最推荐,走 443 端口加 TLS,在中间设备看来就是 HTTPS 流量。DoT(DNS over TLS)走 853 端口也是加密的,但专用端口可能被阻断。
dns:
enable: true
enhanced-mode: redir-host
use-hosts: false
ipv6: false
nameserver:
- https://dns.google/dns-query
- https://cloudflare-dns.com/dns-query
fallback:
- tls://8.8.8.8:853
- https://dns.quad9.net/dns-query
nameserver-policy:
'geosite:cn,private':
- 223.5.5.5
- https://dns.alidns.com/dns-query
nameserver-policy 按域名分流上游:geosite:cn 交给阿里 DNS 直连(快),国外域名走 Google / Cloudflare DoH(走代理加密)。
Redir-Host + DoH 的局限:如果 DoH 请求没走代理,上游 DNS 服务器看不到你是谁(IP 是代理出口 IP),但运营商能看到你在和 DoH 服务商通信。隐私要求高的场景,Fake-IP 更彻底。
sing-box 的 DNS 防泄漏怎么写
sing-box 的 DNS 支持多 server 按规则组合。最稳妥的做法是 Fake-IP local server + DoH 远程 server 配对:
{
"dns": {
"servers": [
{
"tag": "local-fakeip",
"address": "fakeip",
"strategy": "ipv4_only"
},
{
"tag": "doh-google",
"address": "https://dns.google/dns-query",
"detour": "proxy"
},
{
"tag": "dns-direct",
"address": "223.5.5.5",
"detour": "direct"
}
],
"rules": [
{
"rule_set": "geosite-cn",
"server": "dns-direct"
},
{
"rule_set": "geosite-category-companies",
"server": "local-fakeip"
}
]
}
}
三个 server 的分工:
local-fakeip在本地返回虚拟地址,DNS 不离开客户端。doh-google是远程加密上游,detour: proxy强制流量走代理 outbound。dns-direct用阿里 DNS 直连国内域名。rules把 geosite-cn 分流到直连,其余默认走向local-fakeip。
detour 值必须和 outbounds 中对应条目的 tag 完全一致。拼错或漏写,DoH 就走默认路由而非代理,防护失效。不用 Fake-IP 也可以把第一个 server 的 address 改成 tcp://1.1.1.1 或 DoH URL,但 DNS 请求会离开客户端,不如 Fake-IP 干净。
手机和浏览器里的隐形泄漏源
PC 上客户端配好后最容易漏的是两个点:浏览器内置 DoH 和 Android 私人 DNS。
浏览器 DoH(Chrome / Firefox / Edge 内置)让浏览器直接向 Cloudflare 或 Google 发起加密 DNS,绕过系统 DNS。客户端做了 53 端口劫持也没用,浏览器根本不走那个端口。
各浏览器的关闭路径:
- Chrome / Edge:设置 → 隐私、搜索和服务 → 安全 → 关闭「使用安全的 DNS 指定如何查找网站的网络地址」。或者直接选择「使用您当前的服务提供商」,这样浏览器回退到系统 DNS,被客户端接管。
- Firefox:设置 → 隐私与安全 → 下滑到底部 → 「通过 HTTPS 启用 DNS」→ 选「关闭保护」或「使用默认保护」。注意即使选了 Cloudflare 作为 Firefox DoH 提供商,DNS 请求也是直连 Cloudflare 而不是走代理,依然泄漏。
- Brave:设置 → 隐私与安全 → 安全 → 关闭「使用安全的 DNS」。
Android 私人 DNS(Android 9+)在 设置 → 网络和互联网 → 私人 DNS。这个系统级 DoT 功能让全机 DNS 走加密通道到 dns.google,但它的 DoT 连接独立于代理路由规则,必然不走代理。代理开着但私人 DNS 设为自动或手动,DNS 全漏。
处理:直接关闭私人 DNS(选「关闭」)。路由器或旁路由做了完整 DNS 劫持可以保留,但桌面/手机客户端用户直接关最省事。
iOS 没有系统级强制 DoH/DoT,DNS 跟 Wi-Fi 设置走。但如果 Wi-Fi 详情页手动填了 8.8.8.8 或 114.114.114.114 作为 DNS,一样泄漏。改回「自动」让代理客户端接管。
验证修复效果
改完配置重启核心后,三步确认修复生效:
- ipleak.net 的 DNS 列表只显示代理出口 IP 或 198.18.x.x 虚拟地址。
- dnsleaktest.com Extended Test 中 50 次查询的 DNS 服务器全属于代理出口网络。
- Fake-IP 用户看 Mihomo Connections 日志,域名解析结果是
198.18.x.x格式即生效。
如果换了客户端、换了设备、不同配置都泄漏,问题可能不在客户端这边——运营商或企业网关在网络层强制劫持 53 端口 DNS。这种情况 DoH(443 端口)或 DoT(853 端口)的上游能绕过去。另外 DNS 上游如果依赖不可达的 fallback 地址,解析失败后也会回退到系统 DNS。减少配置层面的不确定变量,可以考虑兼容 Clash / Singbox / V2Ray 的订阅。
相关阅读
来源与时间
本文最后查看时间:2026-05-29。操作路径会随客户端版本变化,遇到按钮名称不一致时,优先按同义菜单和官方文档查看。