CnRocket

Mihomo TUN 模式无法上网怎么办?先恢复网络再查 DNS、路由和权限

更新于 2026-10-24 · cn-rocket.site

简答:先关闭 TUN 和系统代理,确认普通网络是否恢复;再检查 Mihomo 核心、节点、权限、虚拟网卡、auto-route、DNS 与端口。Windows、macOS、Linux 按本文命令逐项核对,Android 重点检查 VPN 权限、私人 DNS 和其他 VPN 冲突。

定义:Mihomo TUN 模式是通过虚拟网卡和系统路由接管设备流量的工作方式,无法上网通常要区分核心、权限、路由、DNS、端口或节点本身的问题。

先做这一步:关闭 TUN,判断是不是系统网络被接管

本文与 Mihomo 项目及其开发者无隶属关系。Mihomo 的 TUN 会接管系统层流量,和只处理指定应用的 HTTP/SOCKS 代理端口不同;因此第一步不要急着换节点或反复改 DNS,而是先把故障范围缩小。

现象先做什么结果如何判断
关闭 TUN 后网络恢复保留普通代理,暂时关闭 TUN问题集中在权限、虚拟网卡、路由、DNS 劫持或协议栈
关闭 TUN 后仍无法上网退出 Mihomo,关闭系统代理并重新连接网络继续检查节点、系统代理残留、默认路由或本地网络
系统代理可用,TUN 不可用检查管理员权限、TUN 网卡、auto-route 和防火墙普通代理正常但 TUN 失败,通常不是单纯节点问题
只有域名打不开,IP 或局域网可用检查 dns-hijack、nameserver、fake-ip-filter 和私人 DNS重点看日志是否出现 DNS resolve failed

在客户端中先关闭 TUN,再关闭系统代理开关;完全退出客户端后重新打开网络连接。若退出后仍断网,继续执行下面对应系统的检查。Mihomo 官方文档说明,TUN 的 auto-route 会自动设置全局路由,而 dns-hijack 会把匹配的 DNS 请求转入内部 DNS 模块,因此这两个字段是首轮排查重点。Mihomo TUN 配置文档

按日志关键词定位:DNS、路由、权限还是端口冲突

把日志级别临时改为 debug,复现一次“开启 TUN 后无法上网”,然后只看复现时间附近的新日志。关键词会随客户端和内核版本变化,下面只是定位方向,不要求逐字匹配。

日志方向常见关键词示意下一步动作
DNSdns resolve failed、解析超时、nameserver 错误确认 DNS 已启用,检查 default-nameserver、nameserver、proxy-server-nameserver,暂时移除复杂的 nameserver-policy
路由network is unreachable、default interface lost检查默认网卡、auto-detect-interface、多网卡、虚拟机网卡和 auto-route
权限permission denied、TUN 启动失败用管理员权限启动,检查防火墙是否放行核心;IPv6 环境可先关闭 TUN 的 IPv6 单独测试
端口port already in use、bind 失败退出重复运行的 Mihomo 或其他代理程序,检查并更换 mixed-port
节点或握手连接超时、TLS、认证或握手失败先关闭 TUN,用普通代理端口测试同一节点;普通代理也失败时再查订阅、节点和时间

Mihomo API 文档提供了 /version 查询内核版本,也提供当前运行配置和 DNS 缓存清理接口;不同客户端未必暴露这些入口,找不到时以客户端关于页或日志中的版本信息为准。Mihomo API 文档

最小化 TUN 配置:先验证接管流量,再逐项加回复杂设置

修改前先备份当前配置。下面只保留 TUN 排查所需字段;其中 route-exclude-address 用于排除不希望进入 TUN 的网段,适合“互联网能通,但局域网、虚拟机或路由器管理地址不通”的场景。示例网段需要按你的局域网实际情况替换。

tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
route-exclude-address:
- 192.168.0.0/16
- 10.0.0.0/8
- 172.16.0.0/12

官方文档当前列出的 stack 可选值包括 system、gvisor、mixed 和 mips;其中 mixed 使用 system 处理 TCP、gvisor 处理 UDP。如果 TUN 一开启就断网,可按 mixed → system → gvisor 做单变量测试,每次只改一个字段并重启核心。若客户端提示字段不识别,先查看内核版本,再以该版本文档为准,不要直接复制新字段。Mihomo TUN 字段与协议栈说明

Windows 使用 DNS 劫持时,官方文档要求 strict-route 配合相关行为;如果 Windows 仅出现 DNS 泄漏或域名无法解析,可在确认配置兼容后加入 strict-route: true,若加入后虚拟机或特殊网络异常,则先移除并单独测试。Mihomo TUN 配置文档

Windows:检查代理残留、默认路由、DNS 和 TUN 权限

  1. 查看网络和代理:打开命令提示符,执行 ipconfig /all、route print、netsh winhttp show proxy。查看是否有有效网卡 IPv4 地址、默认网关和异常的 WinHTTP 代理;如果显示代理但你并未设置,可在确认不影响单位网络后执行 netsh winhttp reset proxy。
  2. 清理 DNS 缓存:执行 ipconfig /flushdns,看到成功提示后重新开启 TUN。若仍失败,比较“关闭 TUN”和“开启 TUN”时 nslookup example.com 的结果;example.com 只是示例域名,请替换为你实际访问的域名。
  3. 检查 Mihomo 权限:以管理员身份启动客户端,确认 Windows 防火墙允许核心程序通过。官方 TUN 文档明确给出了 Windows 防火墙放行核心的路径:Windows 安全中心→允许应用通过防火墙→选择核心二进制文件。Mihomo TUN 文档
  4. 检查结果:route print 应能看到默认路由;如果没有默认网关,先恢复物理网络。若默认路由存在但 TUN 开启后立即消失或网页全部超时,优先测试 auto-route、strict-route 和其他 VPN/虚拟网卡冲突。

macOS:检查 utun、路由表、DNS 和网络扩展冲突

  1. 关闭 TUN 后执行 ifconfig | grep utun,查看是否仍残留 utun 接口;再执行 netstat -rn 查看默认路由。TUN 开启前后分别保存输出,重点比较 default 路由和 utun 相关条目。
  2. 执行 scutil --dns,检查当前 DNS 服务器是否存在、是否在开启 TUN 后被替换成不可用地址。若只有域名失败而 IP 连接正常,暂时简化 DNS 配置,不要同时启用多套 DNS 劫持工具。
  3. 退出其他 VPN、网络过滤器、虚拟机软件和重复运行的代理客户端,再重新测试。macOS 的 TUN 设备名称必须以 utun 开头;如果配置了其他名称,按官方文档要求改回。Mihomo TUN 文档
  4. 如果防火墙开启后 TUN 无法工作,官方文档建议在系统设置→网络→防火墙→选项中允许 Mihomo 应用;不同客户端显示名称可能不同,以实际核心程序为准。

Linux:检查 tun 网卡、策略路由、DNS 和防火墙

  1. 关闭 TUN 后执行 ip link、ip route、ip rule,记录默认网卡、默认路由和策略路由;开启 TUN 后再次执行,观察是否出现 TUN 接口以及新的路由表。
  2. 执行 resolvectl status 查看 DNS 状态。若系统没有 resolvectl,先不要另装工具,改查发行版当前使用的 NetworkManager、systemd-resolved 或静态 DNS 配置。
  3. 如果日志显示权限错误,确认核心具备创建 TUN 和设置路由所需权限;如果使用 system 或 mixed 栈,按官方文档检查防火墙是否允许 TUN 接口出站。文档给出的示例是以 Mihomo 为接口名执行 sudo iptables -A OUTPUT -o Mihomo -j ACCEPT,接口名必须替换为你的实际 TUN 接口。Mihomo TUN 文档
  4. 若服务器或路由器只有部分 IPv6 条件,先把顶层 ipv6 和 TUN 的 IPv6 相关配置单独关闭测试。Mihomo 仓库 Issue #1667 记录了 Android 环境开启 IPv6 后出现 configure tun interface: permission denied 的复现,因此该日志出现时可以先做 IPv6 对照,而不是立即判定为节点故障。Issue #1667:TUN 与 IPv6 启动权限错误

Android:重点检查 VPN 权限、私人 DNS 和其他 VPN

Android 通常由客户端申请系统 VPN 权限,不建议直接照搬桌面系统的路由命令。先在系统设置中确认客户端的 VPN 权限仍有效,关闭其他 VPN、广告过滤器和网络防火墙,再关闭“私人 DNS”或改为自动做一次对照测试。Mihomo 官方文档说明,Android 开启私人 DNS 时,DNS 请求可能无法被自动劫持;因此出现域名打不开时,应优先做这个对照。Mihomo TUN 文档

如果日志出现 TUN 启动权限错误,同时顶层配置启用了 IPv6,可先把 IPv6 单独关闭并重启测试。若关闭后恢复,再根据设备网络是否真正支持 IPv6 决定是否重新启用,不要只因为 DNS 能解析 AAAA 记录就判断 TUN 已具备可用 IPv6。

DNS、规则、MTU 和代理组:最后做单变量验证

  • DNS:官方文档区分了 default-nameserver、nameserver 和 proxy-server-nameserver;前者用于解析 DNS 服务器域名,后两者分别服务普通域名和代理节点域名。节点域名无法解析时,不能只改普通 nameserver。Mihomo DNS 配置文档
  • 规则与代理组:先切换到明确可用的代理组或全局模式测试,再恢复规则模式。规则模式下可能命中 DIRECT、REJECT 或错误代理组;Mihomo 官方规则文档说明,MATCH 可匹配所有未被前面规则处理的请求。Mihomo 路由规则文档
  • MTU:官方文档说明 MTU 会影响极端条件下的传输速率,一般用户可保持默认值。若 TUN 能启动、短页面能开但大页面或文件传输卡住,可先把当前值记下来,临时测试 1500,再测试 1400 或 1380;每次只改一个值。较小 MTU 恢复而默认值失败时,说明需要继续检查路径 MTU、虚拟网卡和上游网络,不代表某个固定值适合所有设备。Mihomo TUN 文档
  • fake-ip:如果只有局域网设备、虚拟机或打印机异常,把对应域名或网段加入排除范围;不要把整个配置改成复杂的 fake-ip-filter 白名单后再同时修改规则,否则难以判断是哪一项生效。

仍然无法恢复时:按这个顺序收集信息

  1. 记录客户端名称、操作系统版本、Mihomo 内核版本和配置加载错误。
  2. 分别保存关闭 TUN、开启 TUN 两次的关键日志,不要只截取你认为相关的一行。
  3. 注明是否使用多个网卡、虚拟机、其他 VPN、系统代理、私人 DNS、IPv6 和防火墙。
  4. 提供最小化配置,不要直接上传包含订阅地址、密钥、密码或节点凭据的原始文件。
  5. 确认问题属于“核心启动失败”“TUN 启动但全网断”“只有 DNS 失败”“只有部分应用不通”中的哪一类,再针对该类继续排查。

如果客户端不显示内核版本,可查看客户端关于页、启动日志,或在已配置外部控制器时查询官方 API 的 /version。字段无法识别、配置加载失败或行为与文档不一致时,应优先按当前内核版本对应的官方文档核对,而不是继续叠加配置。

常见问题

Mihomo TUN 开启后所有软件都无法上网,先改 DNS 吗?

不建议先改 DNS。先关闭 TUN、关闭系统代理并退出客户端,确认普通网络能恢复;如果恢复,再按权限、虚拟网卡、auto-route、协议栈和 DNS 顺序排查。

Mihomo 的 stack 选 system、gvisor 还是 mixed?

先以当前内核文档支持的值为准。排查断网时一次只切换一个值,建议记录 mixed、system、gvisor 的结果;如果防火墙开启,官方文档提示 system 和 mixed 可能需要放行核心程序。

route-exclude-address 应该填写什么?

填写需要绕过 TUN 的实际网段,例如局域网常见的 192.168.0.0/16、10.0.0.0/8 或 172.16.0.0/12,但必须按你的网络规划替换,不能把示例当成固定答案。

Windows 怎么判断是不是代理残留?

执行 ipconfig /all、route print 和 netsh winhttp show proxy,检查默认网关、默认路由和 WinHTTP 代理。确认不需要该代理后,可执行 netsh winhttp reset proxy,再重连网络测试。

日志出现 permission denied,一定是 Mihomo 没有管理员权限吗?

不一定。还可能与 IPv6、TUN 网卡权限、防火墙、其他 VPN 或系统网络限制有关。先用管理员权限重试,再单独关闭 IPv6、退出其他网络接管程序并对照日志。

Mihomo TUN 能启动但网页打不开,节点一定坏了吗?

不一定。先关闭 TUN,用普通代理端口测试同一节点;如果普通代理可用,重点查 DNS、规则模式、代理组、strict-route、协议栈和 MTU。

相关阅读

参考资料

  1. Mihomo TUN 配置文档
  2. Mihomo DNS 配置文档
  3. Mihomo 路由规则文档
  4. Mihomo API 文档
  5. MetaCubeX/mihomo Issue #1667:TUN 与 IPv6 启动权限错误