GLaDOS Network

Mihomo DNS 劫持怎么关闭?先只停用 TUN 的 DNS 接管

更新于 2026-11-04 · glados.lat

简答:如果只想停止 Mihomo TUN 的 DNS 接管,先在实际生效的配置中检查并删除或清空 tun.dns-hijack;如果还不想让 TUN 修改系统 DNS,再核对当前内核支持的 tun.dns-mode,通常应选择 disabled。只有想停用 Mihomo 内置 DNS 时,才考虑 dns.enable: false。修改后要重新载入运行配置,并通过运行配置、系统 DNS 和 nslookup 或 dig 复测。

定义:Mihomo DNS 劫持是 TUN 将匹配到的 DNS 连接重定向到 Mihomo 内置 DNS 模块的行为,主要涉及 tun.dns-hijack;它不等同于关闭 TUN、关闭内置 DNS 或停用 fake-ip。

先按目标选择:不要一上来关闭整个 DNS 模块

本站是第三方使用指南站,不是任何客户端、内核或订阅服务的官方网站。你要解决的如果只是“DNS 请求被 Mihomo 接管”,优先处理 tun.dns-hijack,不要直接把 dns.enable 改成 false。

你的目标先检查的配置项最小操作验证重点
只停止这一条 Mihomo TUN DNS 接管规则tun.dns-hijack删除该项,或将列表改为空列表运行配置中的 dns-hijack 已不存在或为空;其他软件、路由器和防火墙仍可能继续重定向 DNS
不让 TUN 修改系统 DNStun.dns-mode核对当前版本支持的值,目标通常是 disabled系统网络设置中的 DNS 地址不再由 TUN 自动设置;实际结果仍受客户端和操作系统影响
继续使用 TUN 地址作为系统 DNS,但不采用额外的 53 端口拦截模式tun.dns-mode 与 tun.dns-hijack按当前版本文档核对 native 的语义,并单独检查 dns-hijack系统 DNS 地址和 53 端口请求的实际路径分别验证,不能只看一个字段
完全停用 Mihomo 内置 DNSdns.enable设置为 false确认解析是否改由系统、客户端、路由器或其他 DNS 软件处理,并重新检查 fake-ip 与分流结果

Mihomo 当前配置文档把 tun.dns-mode 定义为系统 DNS 的配置方式:disabled 不设置系统 DNS,native 将 TUN 地址设置为系统 DNS,hijack 则在 native 基础上进一步拦截其他接口发往 53 端口的流量。tun.dns-hijack 另有“将匹配连接导入内部 DNS 模块”的作用,因此两者不能互相替代。Mihomo TUN 配置文档

最快的安全改法:先清空 tun.dns-hijack

如果你的目标是“只关闭 Mihomo TUN 的 DNS 劫持,不误关代理”,先备份当前实际配置,再只处理这一段:

tun:
enable: true
dns-hijack: []

如果原配置中已有 dns-hijack 列表,可以删除该字段,或者将其改为空列表。这个动作只针对 Mihomo 配置中的该条 TUN 接管规则,并不保证系统中不存在其他 DNS 重定向。例如客户端覆写、路由器防火墙、OpenWrt 规则或其他 DNS 软件仍可能接管 UDP/TCP 53 端口。

如果你还发现 TUN 启动后系统 DNS 地址被自动改写,再单独检查:

tun:
dns-mode: disabled

这里的 disabled 是“不要由 TUN 设置系统 DNS”的配置语义,不应被理解成“关闭所有 DNS 劫持”。只有在当前 Mihomo 内核支持该枚举值、且目标确实是恢复系统 DNS 配置时才使用;若配置来自订阅或客户端覆写,先查看最终运行配置,不要只修改订阅原文。Mihomo TUN 配置文档

不要用 dns.ipv6: false 代替关闭 DNS 劫持。官方 DNS 文档说明,该字段只会让 AAAA 查询返回空结果,不能删除 tun.dns-hijack,也不能关闭 Mihomo 内置 DNS。Mihomo DNS 配置文档

什么时候才需要设置 dns.enable: false

只有当你明确希望 Mihomo 不再提供内置 DNS 解析时,才考虑:

dns:
enable: false

Mihomo DNS 文档将该配置定义为关闭内置 DNS,并说明此时使用系统 DNS 解析。但“系统 DNS”不一定等于你电脑当前网络设置显示的服务器:客户端、操作系统、路由器、私人 DNS、企业网络策略或其他重定向规则都可能继续影响实际查询路径。

关闭内置 DNS 还可能改变 enhanced-mode、fake-ip、DNS 分流、局域网域名解析和规则匹配结果。官方文档将 enhanced-mode 定义为 Mihomo 的 DNS 处理模式,可选 fake-ip 或 redir-host;它不是关闭 TUN DNS 劫持的开关。Mihomo DNS 配置文档

因此建议按这个顺序试:先清空 tun.dns-hijack;仍然出现系统 DNS 被改写,再核对 tun.dns-mode;只有必须停用 Mihomo 内置解析时,才测试 dns.enable: false。每次只改一个层级,便于回滚。

Mihomo Party、Clash Verge Rev 和 OpenClash 怎么改才不容易改错

不同客户端的菜单名称、配置覆写方式和内核版本可能不同。当前 Mihomo 官方文档能够直接确认的是核心字段语义,不能据此保证每个客户端都有完全相同的菜单路径。因此不要把某个版本的“DNS 开关”名称当成通用字段。

Mihomo Party 或桌面端配置编辑器

  1. 先关闭 TUN,保存当前配置副本。
  2. 打开“当前生效配置”或配置覆写编辑器,搜索 dns-hijack、dns-mode 和 dns:。
  3. 只想停止 TUN DNS 接管时,删除 dns-hijack 或改为空列表;只有想停止 TUN 设置系统 DNS 时,才核对 dns-mode: disabled。
  4. 保存并点击客户端的应用、载入或重新加载配置按钮,再决定是否重新开启 TUN。若菜单没有这些字段,不要强行新增整段配置,应以当前客户端的配置编辑器和内核文档为准。

Clash Verge Rev 等 Profile 客户端

  1. 先确认修改的是当前启用的 Profile,而不是下载后的订阅原文。
  2. 检查 Profile 的 Merge、Script、Extend Config 或其他 DNS/TUN 覆写层;这些层可能在载入时重新写入 tun.dns-hijack。
  3. 应用 Profile 后,再查看运行中的配置,确认字段是否真的改变。
  4. 如果重启后配置恢复,优先排查覆写层和客户端设置,不要反复修改同一份远程订阅。

OpenClash 或路由器上的 Mihomo

  1. 先区分“内核 YAML 中的 tun.dns-hijack”和“路由器防火墙将 53 端口转发到 DNS 服务”的两层配置。
  2. 关闭后者不能只靠修改 Mihomo YAML;需要在路由器的 DNS、重定向或防火墙规则中检查实际生效项。
  3. 保存并应用路由器配置,再从局域网设备复测。不同版本和主题的界面名称可能不同,源码中的内部字段也不能直接等同于当前界面开关。

如果你无法确认哪一层在接管 DNS,最短分流方法是:暂时关闭 TUN,检查 DNS 是否恢复;再只开启 TUN、保持 dns-hijack 为空,比较两次运行结果。

修改后如何重载、清缓存和判断成功

  1. 查看运行配置。不要只看编辑器里的 YAML。若客户端开启了外部控制器,可通过 Mihomo API 的 /configs 查看当前运行配置;该接口返回的配置包含 tun 等基本字段。
  2. 重新载入配置。使用客户端的“应用配置、重新载入”功能。Mihomo API 文档列出了通过 PUT /configs?force=true 强制重新载入基本配置的方法,但是否可用取决于客户端是否开放并保护了外部控制器。
  3. 按需重启 TUN。如果系统 DNS 地址或虚拟网卡状态没有恢复,先关闭 TUN,等待网络状态恢复,再重新开启或保持关闭。不是每次改字段都必须重启整个客户端。
  4. 按需清理缓存。如果此前使用 fake-ip 或缓存解析,且修改后仍看到旧结果,可在客户端提供的控制器中调用 POST /cache/dns/flush 和 POST /cache/fakeip/flush。没有控制器时,使用操作系统或客户端提供的 DNS 缓存清理功能即可。Mihomo API 文档
  5. 再做对照测试。Windows 可运行 nslookup example.com,macOS 或 Linux 可运行 dig example.com。先记录 TUN 关闭时的 DNS 服务器与结果,再比较 TUN 开启、DNS 接管规则关闭后的结果。
检查项较明确的成功标准不能单独证明什么
运行配置tun.dns-hijack 已删除或为空;若设置了 dns-mode,其值与目标一致不能证明路由器或其他软件没有重定向 DNS
系统 DNS关闭 TUN 后与开启 TUN 后的 DNS 地址变化符合预期;选择 disabled 时不应再由 TUN 自动设置不能仅凭 DNS 地址判断查询是否经过加密 DNS 或其他代理
nslookup 或 dig查询成功,服务器地址和响应结果与对照状态一致;不再出现旧的 fake-ip 结果时,还要结合缓存已清理判断查询成功不等于没有其他 DNS 重定向,也不等于网页代理链路正常
Mihomo 日志关闭 TUN DNS 接管后,不再看到对应的 DNS 请求进入内置 DNS 的记录,或记录与预期路径一致Windows、macOS、Android 的系统 DNS 行为存在平台限制,日志为空不一定代表系统没有发起查询

官方 TUN 文档特别说明,Windows 和 macOS 不能自动劫持发往本地网络的 DNS 请求;Android 开启 Private DNS 时,DNS 请求也不能被自动劫持。因此这些平台不能只凭一个测试结果断言“所有 DNS 劫持都已关闭”。Mihomo TUN 配置文档

改错后的回滚与常见分流

如果修改后出现节点域名无法解析、局域网域名失效、网页打不开或 TUN 启动失败,按以下顺序回滚:

  1. 关闭 TUN,恢复修改前的配置副本。
  2. 删除后来新增的 dns-mode、dns-hijack 或 dns.enable 覆写项,避免多个配置层互相覆盖。
  3. 重新载入当前 Profile,必要时清理 DNS 或 fake-ip 缓存。
  4. 如果只有一台设备异常,检查客户端和系统 DNS;如果同一局域网多台设备都异常,再检查路由器重定向和防火墙规则。

如果 Windows 或 macOS 的本地网络解析与预期不同,先确认是否属于官方文档提到的系统平台限制;如果 Android 开启了 Private DNS,则应同时检查 Private DNS、TUN 配置和实际日志。不要为了“关闭 DNS 劫持”同时修改 TUN、DNS、fake-ip、IPv6 和路由规则,否则很难判断故障来源。

常见问题

Mihomo DNS 劫持怎么关闭,最先改哪一行?

如果只想停止 Mihomo TUN 的 DNS 接管,先查看实际生效配置中的 tun.dns-hijack,并删除该项或改为空列表。这个动作只停止该条 Mihomo 规则,不能保证路由器、防火墙或其他客户端没有继续重定向 DNS。

tun.dns-mode 应该填 disabled、native 还是 hijack?

当前 Mihomo 文档将三者定义为不同语义:disabled 不设置系统 DNS,native 将 TUN 地址设置为系统 DNS,hijack 在 native 基础上拦截其他接口发往 53 端口的流量。应按目标选择,并先确认实际内核版本与运行配置支持情况。

把 dns.ipv6 改成 false 能关闭 DNS 劫持吗?

不能。dns.ipv6: false 只影响 AAAA 查询结果,不能关闭 tun.dns-hijack,也不能停用 Mihomo 内置 DNS。

清空 tun.dns-hijack 后,为什么 DNS 仍然被接管?

可能还有客户端覆写、路由器防火墙、OpenWrt 规则、私人 DNS 或其他 DNS 软件在处理 53 端口。应分别查看运行配置、系统 DNS、路由器重定向规则和 Mihomo 日志。

dns.enable: false 会不会让 fake-ip 消失?

它会停用 Mihomo 内置 DNS,但实际 fake-ip、分流和系统解析结果还取决于客户端及其他网络组件。修改前应备份配置,修改后清理相关缓存并重新检查解析结果。

为什么改了 YAML,重启后 tun.dns-hijack 又出现?

通常说明你改的不是最终生效层,或客户端的 Merge、Script、Extend Config、订阅覆写在载入时重新写入了字段。应查看当前运行配置,而不是只检查订阅原文。

Android 开启 Private DNS 后,Mihomo 还能自动劫持 DNS 吗?

Mihomo 官方文档说明,Android 开启 Private DNS 时,DNS 请求不能被自动劫持。此时需要分别检查 Android 的 Private DNS、Mihomo TUN 配置以及实际日志,不能只根据 dns-hijack 字段下结论。

相关阅读

参考资料

  1. Mihomo TUN 配置文档:dns-mode、dns-hijack 与平台限制
  2. Mihomo DNS 配置文档:dns.enable、enhanced-mode 与 IPv6
  3. Mihomo API 文档:运行配置重载与 DNS、fake-ip 缓存清理