MistyCloud - 5G时代的VPN

Mihomo DNS泄漏怎么检测?在线测试与本地交叉验证步骤

更新于 2026-11-05 · mistybeta.site

简答:先用 BrowserLeaks 和 DNS Leak Test 分别运行标准或扩展测试,再关闭 Mihomo、开启系统代理、开启 TUN 做三组对照。若开启 TUN 后仍出现本地运营商、路由器或公司网络 DNS,继续检查 dns.enable、dns-hijack、strict-route、浏览器 Secure DNS、Android Private DNS 和 IPv6;单个网页显示多个 DNS 服务器,不一定就等于泄漏。

定义:Mihomo DNS泄漏,是指应用的域名解析请求没有按预期进入 Mihomo DNS 或指定的加密解析链路,而是被系统、浏览器、局域网、IPv6 或其他应用单独发出。

先看结论:3组测试就能判断大多数情况

本文为第三方使用指南,Mihomo 客户端的菜单名称会因发行版、系统和版本不同而变化,以下以当前运行配置和实际日志为准。

三阶段 DNS 检测对照表
阶段操作主要用途如何解读
1. 基线完全退出 Mihomo,关闭系统代理和 TUN记录当前网络本来的 DNS通常会看到路由器、运营商、公司网络或系统配置的解析器
2. 系统代理只开启 Mihomo 的系统代理,不开启 TUN确认浏览器是否通过代理访问,以及浏览器解析路径是否改变网页流量可能改变,但不代表所有应用的 DNS 都已被接管
3. TUN 接管开启 Mihomo DNS、TUN 和 DNS 劫持后复测检查系统级流量和传统 53 端口查询是否进入 Mihomo仍出现异常解析器时,重点检查浏览器 DoH、Android Private DNS、IPv6、UDP/TCP 53 和局域网 DNS

最快做法是:先打开 BrowserLeaks DNS 测试,再打开 DNS Leak Test 的标准/扩展测试说明,记录每次测试显示的 DNS 服务器名称、IP、组织和位置。BrowserLeaks 说明其测试会让浏览器解析随机域名,其中包含 IPv4-only 和 IPv6-only 域名,因此可以帮助发现 IPv6 路径是否与 IPv4 不一致。

关键判断:结果出现多个 DNS 服务器并不自动等于泄漏。先判断这些服务器是否属于你预期使用的解析服务、公司网络或客户端上游;只有在预期路径之外出现本地运营商、家庭路由器、公司网关或未知解析器,并且在重复测试中稳定出现,才应进入旁路排查。

按顺序完成在线检测:关闭、系统代理、TUN

  1. 固定测试条件。使用同一浏览器、同一网络、同一测试页面;记录是否使用 Wi-Fi、网线、手机热点,是否启用 IPv6,以及浏览器是否开启 Secure DNS。不要在测试中途切换网络或清理配置。
  2. 做基线测试。退出 Mihomo 主程序,关闭系统代理和 TUN,分别运行两个 DNS 测试站。把结果保存下来,重点记录 DNS 服务器的 IP、组织名称和位置。基线结果只是当前网络的参照,不代表 Mihomo 已经泄漏。
  3. 只开系统代理。启动 Mihomo,开启系统代理,但暂时关闭 TUN。再次运行两个测试站。如果浏览器访问已经经过代理,但 DNS 结果没有改变,不要直接下结论;这通常说明浏览器或系统解析仍可能走独立路径。
  4. 开启 TUN 后复测。先确认配置文件已经加载,再开启 TUN。Mihomo 文档说明,TUN 的 dns-hijack 用于把匹配到的 DNS 连接转入内部 DNS 模块;Windows 和 macOS 对发往局域网的 DNS 请求不能自动全部劫持,Android 开启 Private DNS 时也不能自动劫持这些请求。
  5. 做 IPv4/IPv6 对照。如果测试页面显示 IPv4 解析器符合预期,但 IPv6 解析器来自本地网络,优先暂时关闭 IPv6 或检查 TUN 的 IPv6 路由,再重新测试。关闭 IPv6 只是定位手段,确认原因后应根据实际网络和客户端能力决定是否恢复。

测试页面只能观察浏览器最终使用或触发到的解析结果,不能覆盖每一个应用。Chrome 的 Secure DNS 会让 Chrome 使用自己的安全 DNS 解析路径;Google 文档也说明,Chrome 的 Secure DNS 与 Android Private DNS 是不同设置,因此浏览器测试异常时需要分别检查。

检查 Mihomo 配置:重点看 7 个字段

打开实际运行的 Mihomo 配置,不要只看订阅原文。Mihomo 官方 DNS 文档列出了以下字段的作用:

  • dns.enable:设为 false 时会使用系统 DNS;因此检测时首先确认它是否确实启用。
  • dns.nameserver:默认域名解析服务器。检查是否为空、是否写入了不认识的地址,或是否被其他配置覆盖。
  • dns.fallback:备用解析服务器。出现多个结果时,先确认它们是否来自配置的备用服务器,不要仅凭数量判断泄漏。
  • dns.default-nameserver:用于解析 DNS 服务器域名,官方文档要求这里填写 IP 地址;不要把普通域名直接当作该字段值。
  • dns.direct-nameserver:用于直连出口的域名解析。如果配置为 system,直连域名可能使用系统解析;这不一定是泄漏,但必须符合你的分流设计。
  • tun.dns-hijack:用于把匹配到的 DNS 连接转给 Mihomo 内部 DNS 模块。常见写法包括 any:53 或明确的 UDP/TCP 53 目标,但应以当前版本文档和发行版支持情况为准。
  • tun.strict-route:官方文档说明,Windows 下它会增加防止系统多宿主 DNS 解析造成泄漏的防火墙规则;Linux 下可帮助强制连接进入 TUN,但也可能影响虚拟机或局域网访问。

配置修改后,先保存并重载配置,再按“关闭 TUN→退出客户端→重新启动→开启 TUN”的顺序复测。不要只刷新网页,因为旧的浏览器连接、缓存或 DoH 会让结果看起来没有变化。

需要注意:fake-ip 不是“自动保证不泄漏”的开关。它改变的是 Mihomo 对域名解析结果的处理方式;浏览器自带 DoH、Android Private DNS、独立 VPN、容器或其他应用自建解析器,仍可能绕过普通的 53 端口劫持。

本地交叉验证:不要只相信网页结果

在线测试发现异常后,使用本地命令确认系统当前看到的 DNS 和查询路径。命令显示的服务器只是操作系统或工具所使用的解析器,不一定能直接证明所有应用都走同一条路径,因此要和在线测试、Mihomo 日志一起判断。

Windows 10/11

在命令提示符运行:

ipconfig /all
nslookup -debug example.com
nslookup -type=A+AAAA -nosearch -recurse example.com

Microsoft 文档将 nslookup 定义为用于诊断 DNS 基础设施的命令,并支持通过 -debug 查看更详细的查询信息。重点看输出中的 Server、Address 以及 A/AAAA 查询是否都成功。如果服务器显示家庭路由器或公司 DNS,而 TUN 与 DNS 劫持本应接管系统查询,应回到 dns.enable、dns-hijack 和 strict-route 检查。

macOS

先查看网络硬件接口:

networksetup -listallhardwareports

再查看系统解析配置:

scutil --dns

如果需要确认是否有传统 DNS 流量经过物理接口,可先用 Apple 文档所述的 networksetup -listallhardwareports 找到实际接口,再谨慎使用抓包工具观察 UDP/TCP 53。不要把抓不到明文 53 直接等同于“没有泄漏”,因为 DoH、DoT 或应用自带解析可能使用其他端口。

Linux

使用 systemd-resolved 的系统可运行:

resolvectl status
resolvectl query example.com
resolvectl query --type=AAAA example.com

resolvectl status 用于查看全局和每个网络接口的 DNS 设置,resolvectl query 用于发起解析查询。若系统没有启用 systemd-resolved,可查看 /etc/resolv.conf,或使用已安装的 dig:

dig example.com A
dig example.com AAAA

如果需要观察明文 DNS 连接,可在确认接口名称后使用:

sudo tcpdump -ni any 'port 53'

查询期间完全没有 53 流量,不代表没有 DNS;加密 DNS 通常不会以明文 UDP/TCP 53 出现。

Android

打开系统设置中的“网络和互联网→私人 DNS”,记录当前状态;不同厂商菜单名称可能不同。再检查 Chrome 的“设置→隐私和安全→使用安全 DNS”。Android 官方资料说明,Android 9 及更高版本支持 Private DNS,而 Chrome Secure DNS 又是浏览器自己的解析设置。若 Mihomo TUN 已开启但 Private DNS 仍处于严格模式,先暂时切换为自动或关闭进行对照测试,然后重新运行两个在线测试站。

根据结果定位:一张排查清单

异常结果与下一步
现象优先检查下一步
关闭 Mihomo 和开启 Mihomo 的结果完全相同系统代理是否真的生效、浏览器 Secure DNS、应用是否自带 DNS用同一浏览器关闭 Secure DNS 后复测,再看 Mihomo 日志是否出现域名查询
系统代理有效,但 TUN 后仍有本地 DNStun.dns-hijack、strict-route、Windows/macOS 局域网 DNS 限制检查是否劫持 UDP/TCP 53,并按客户端文档重新启用 TUN;不要直接修改系统 DNS 后忘记恢复
IPv4 正常,IPv6 显示本地或未知解析器TUN IPv6 路由、系统 IPv6、浏览器 IPv6 查询暂时关闭 IPv6 做对照;若结果改变,再针对 IPv6 路由和 DNS 劫持处理
在线测试显示多个同组织 DNSnameserver、fallback、负载均衡或并发查询与实际配置逐个比对;多个预期上游不等于泄漏
Mihomo 日志没有域名查询记录查询可能被浏览器 DoH、Android Private DNS 或其他网络组件处理关闭独立解析功能后重新加载页面,并用系统命令和在线测试交叉验证

如果确认存在旁路,修复顺序应保持“先轻后重”:先关闭浏览器独立 DoH 或 Android Private DNS 做对照,再确认 Mihomo DNS 模块启用,然后检查 TUN 的 DNS 劫持和严格路由,最后才考虑系统网络栈重置。每次只改一个变量,并记录修改前后的测试结果。

恢复步骤:测试结束后关闭 TUN,关闭系统代理,退出 Mihomo;如果手动修改过系统 DNS,将网络接口恢复为自动获取;macOS、Windows 和 Linux 不要留下临时的静态 DNS 或防火墙规则。Android 则恢复原来的 Private DNS 设置。恢复后再打开网页,确认普通网络连接和局域网设备访问没有被影响。

常见问题

Mihomo DNS测试出现多个服务器,就是DNS泄漏吗?

不一定。nameserver、fallback、并发查询或公司网络都可能让测试显示多个服务器。先把结果中的IP和组织与实际Mihomo配置、网络环境逐项比对;只有出现预期链路之外的本地或未知解析器,并在重复测试中稳定出现,才应按泄漏排查。

只开系统代理,为什么DNS检测结果没有变化?

系统代理主要影响遵循系统代理设置的应用,不能自动接管所有应用的DNS。浏览器Secure DNS、Android Private DNS、IPv6或应用自带解析器都可能使用独立路径。可以关闭这些独立解析功能做一次对照,再开启TUN和DNS劫持复测。

Mihomo开启TUN后还需要检查dns-hijack吗?

需要。TUN是否启用与DNS请求是否被转入Mihomo DNS模块是两个相关但不同的检查点。官方文档将dns-hijack用于把匹配到的DNS连接转入内部DNS模块;Windows和macOS对发往局域网的DNS请求存在自动劫持限制,Android Private DNS也可能阻止自动劫持。

如何判断是IPv6导致的DNS泄漏?

先保持其他设置不变,分别进行IPv4-only和IPv6-only查询或测试。如果IPv4结果符合预期、IPv6结果稳定显示本地或未知解析器,可暂时关闭系统IPv6再复测。若结果恢复,再检查TUN IPv6路由、DNS劫持和浏览器的IPv6解析路径。

修改Mihomo DNS配置后,为什么检测结果还是旧的?

可能是配置没有真正加载、客户端没有重启TUN、浏览器缓存了连接,或浏览器仍使用独立DoH。建议保存配置后重载或重启客户端,关闭并重新打开浏览器,再按关闭Mihomo、系统代理、TUN三阶段测试。每次只修改一个变量。

相关阅读

参考资料

  1. Mihomo 官方文档:DNS configuration
  2. Mihomo 官方文档:TUN
  3. Microsoft Learn:nslookup
  4. Apple Developer Documentation:Recording a Packet Trace
  5. Linux man-pages:resolvectl(man7.org)
  6. Android Developers:Insecure DNS Setup
  7. Google Chrome Help:Manage Chrome safety and security
  8. BrowserLeaks:DNS Leak Test(browserleaks.com)
  9. DNS Leak Test:Standard vs Extended test(dnsleaktest.com)