Mihomo TUN 模式无法接管流量:从日志到路由逐步排查
简答:先不要反复切换 TUN 开关:关闭 TUN,用 Mixed/HTTP/SOCKS 代理确认节点与配置正常;再开启 TUN,观察 Mihomo 连接记录、虚拟网卡和路由表。没有连接记录通常是权限、网卡或路由问题;有记录但走 DIRECT,优先检查规则;只有域名异常,则重点检查 DNS 劫持、Fake-IP、IPv6 和其他 VPN 冲突。
定义:Mihomo TUN 是通过虚拟网卡和系统路由接管应用流量的模式,不等于仅打开客户端里的 TUN 开关。
先看现象:你遇到的是哪一种接管失败
本文是第三方使用指南,不代表任何客户端或项目官方。排查时先把问题分成四类,因为每一类的检查入口不同。
| 现象 | 优先判断 | 先做什么 |
|---|---|---|
| 开启 TUN 后立即报错或开关自动关闭 | 权限、虚拟网卡、配置字段或内核不兼容 | 查看日志中的 permission、TUN、route、YAML 关键词 |
| 没有任何连接记录,应用仍直连 | 系统流量没有进入 TUN | 检查虚拟网卡、路由表、auto-route 和其他 VPN |
| 有连接记录,但全部是 DIRECT | 规则或模式导致直连 | 临时切换全局模式,观察策略是否改变 |
| 开启后全局断网 | DNS、出口接口、路由回环、防火墙或协议栈异常 | 关闭 TUN 恢复网络,再用最小配置复测 |
| 网页能开但部分应用不行 | 应用绕过系统路由、IPv6 或独立网络服务 | 分别测试浏览器、命令行工具和目标应用 |
官方文档说明,TUN 负责系统流量接入,auto-route 用于自动设置路由,auto-detect-interface 用于选择出口接口;多网卡设备可能需要手动指定出口。详见 Mihomo TUN 配置文档。
最短复测路径:先证明节点和代理端口没问题
- 关闭 TUN,只保留已启用的 Mixed、HTTP 或 SOCKS 代理端口。端口号以当前客户端面板显示为准,不要直接套用旧教程中的数字。
- 在浏览器中手动设置代理,或使用支持代理参数的命令行工具测试同一个网址。记录是否能建立连接、是否有 Mihomo 连接记录、最终命中了哪个策略。
- 如果关闭 TUN 后仍无法连接,先不要排查路由。检查订阅是否成功解析、节点是否可用、代理端口是否监听,以及配置校验是否通过。
- 只有普通代理测试正常后,再开启 TUN。开启后访问一个普通网页,同时观察 Mihomo 的连接列表。
判断标准不是“开关显示已开启”,而是目标应用的连接是否出现在 Mihomo 连接列表中,并显示实际规则和策略组。没有记录,说明流量可能还没有进入核心;有记录但显示 DIRECT,则属于规则判断,不一定是 TUN 没接管。
如果客户端提供配置校验入口,优先使用该入口;命令行核心也应先用当前构建帮助或官方文档确认校验参数,避免直接复制与版本不匹配的命令。
Windows:权限、虚拟网卡和路由表依次检查
- 退出其他 VPN、网络加速器和可能创建虚拟网卡的工具,只保留一个网络接管组件。其他组件可能修改默认路由、DNS 或防火墙规则。
- 重新以管理员权限启动客户端,首次启用 TUN 时留意系统授权提示。桌面面板项目文档说明,桌面 TUN 的系统级路由设置需要管理员权限,并依赖辅助服务或虚拟网卡。
- 打开 PowerShell,执行
Get-NetAdapter -IncludeHidden,确认是否能看到 Mihomo 或 Wintun 相关适配器;再执行Get-NetIPConfiguration -All查看接口、地址和 DNS。 - 在命令提示符执行
route print,观察开启 TUN 前后默认路由或分流路由是否变化。微软文档将该命令定义为查看和修改本机 IP 路由表。 - 如果日志显示 TUN 已建立,但所有连接都失败,先关闭 TUN,恢复网络后再尝试将协议栈改为当前文档支持的另一种选项。Mihomo 文档提示,Windows 防火墙可能影响
system和mixed协议栈。
可参考 Get-NetAdapter、Get-NetIPConfiguration 和 route 命令文档。不要在未记录原始路由的情况下手工删除或添加默认路由。
macOS 与 Linux:重点看网络扩展、TUN 设备和出口接口
macOS
macOS 的 TUN 设备名称受系统限制,官方 Mihomo 文档指出,手动指定设备名时应使用以 utun 开头的名称。若客户端请求授权,请完成管理员确认;同时检查“系统设置—通用—登录项与扩展”中的网络扩展,以及“系统设置—网络”里的 VPN 和网络服务状态。Apple 说明,网络扩展可用于 VPN 或内容过滤,网络服务顺序也会影响连接。
若有 Wi-Fi、网线、虚拟机网卡和其他 VPN 同时在线,先暂时关闭多余接口,再将 auto-detect-interface 设为自动;仍异常时,按客户端当前配置格式手动指定实际出口接口。
Linux
先执行 ip link show 查看 TUN 设备,再执行 ip route 和 ip rule 检查路由与策略规则。Linux 的 ip 工具用于查看或管理网络设备、路由、规则和 TUN/TAP。若设备不存在,检查运行权限、容器是否提供 /dev/net/tun、是否具备网络管理能力,以及防火墙是否允许 TUN 出站。
Linux 下的 auto-redirect 依赖 auto-route,不要只打开前者。多出口主机还应检查实际出口接口是否选错。
参考 Apple 网络扩展设置说明、Apple 网络设置说明 和 Linux ip 命令手册。
规则、DNS、IPv6 和应用绕过:为什么“已接管”仍然打不开
- 规则走 DIRECT:临时切到全局模式,只用于定位。若全局模式可用、规则模式不可用,重点检查域名规则、策略组选择和最后的 MATCH 规则,而不是继续修改 TUN。
- DNS 没有进入 Mihomo:检查 DNS 模块是否启用、
dns-hijack是否按当前版本格式填写。官方文档说明,Windows 和 macOS 不能自动劫持发往局域网的 DNS 请求;Android 的私人 DNS 也可能阻止自动劫持。 - IPv6 绕过:临时关闭系统或配置中的 IPv6 仅用于对照测试。若关闭后恢复,说明需要继续检查 IPv6 路由、DNS 或规则,而不是直接把 MTU 调得很小。
- 应用不读取系统代理:游戏、启动器、命令行工具、部分 UWP 应用和独立网络服务可能不使用 HTTP/SOCKS 代理;TUN 理论上覆盖的范围更广,但仍会受到进程排除、系统 VPN、公司策略和应用自身网络实现影响。
- MTU 或协议栈异常:MTU 影响极限传输状态,普通用户应先保留默认值。只有在日志和对照测试都指向分片、握手或特定网络路径异常时,才一次修改一个变量并记录结果。
每次只改一个设置,记录“配置前—配置后—连接记录—路由表—DNS 结果”。不要同时改规则、DNS、协议栈和 MTU,否则无法判断真正原因。
恢复网络与最小复测配置
如果开启 TUN 后断网,先按以下顺序回滚:
- 在客户端点击关闭 TUN;若客户端提供“恢复网络”或类似按钮,优先使用它。
- 正常退出客户端,让它清理虚拟网卡和路由;不要直接强制结束进程。
- 重新连接 Wi-Fi 或网线,确认普通网络恢复后,再启动客户端。
- 备份原配置,复制出一份最小测试配置,只保留当前客户端能够识别的 TUN、代理端口、DNS 和一条明确的测试规则。
- 先验证普通代理,再验证 TUN,最后恢复复杂规则、Fake-IP、IPv6 和多网卡设置。
结构示例(不可直接复制,字段和缩进需以当前 Mihomo 文档及客户端内置核心为准):tun: enable: true; auto-route: true; auto-detect-interface: true。不要把示例中的设备名、MTU、DNS 地址或端口直接照搬到生产配置。
分享日志前请隐藏订阅链接、节点地址、用户名、密码、令牌和公网 IP。若某个字段在当前客户端中不被识别,应以客户端内置核心版本和实际报错为准。
常见问题
为什么 TUN 开关已经打开,但 Mihomo 连接列表仍然为空?
优先检查虚拟网卡、系统路由、管理员权限、出口接口和其他 VPN。开关状态只能说明配置被接受,不代表应用流量已经进入核心。
有连接记录但全部显示 DIRECT,是 TUN 失效吗?
不一定。连接已经进入核心反而说明接管可能生效,DIRECT 表示规则将该连接判定为直连。临时切换全局模式并观察策略变化,可以区分接管问题和规则问题。
开启 TUN 后只有域名打不开,IP 测试正常,怎么办?
优先检查 DNS 模块、dns-hijack、Fake-IP、系统私人 DNS、IPv6 以及局域网 DNS 请求。Windows 和 macOS 对局域网 DNS 的自动劫持存在限制,应结合 DNS 日志判断。
Windows 需要手动安装 Wintun 驱动吗?
不能仅凭旧教程判断。不同客户端的打包方式不同,先看当前客户端日志、适配器列表和官方说明;如果客户端已经自带所需组件,不要重复安装第三方驱动。
Linux 没有 TUN 设备,应该先改配置吗?
先检查运行权限、/dev/net/tun 是否存在、容器权限和网络能力。设备层没有准备好时,继续调整规则或 DNS 通常不会解决问题。
常见问题
为什么 TUN 开关已打开,但 Mihomo 连接列表为空?
优先检查管理员权限、虚拟网卡、系统路由、auto-route、出口接口以及其他 VPN。开关开启不等于应用流量已经进入核心。
连接记录显示 DIRECT,说明 TUN 没有接管吗?
不一定。连接已经出现在核心中,通常说明流量至少进入了 Mihomo;DIRECT 更可能是规则或策略组决定了直连。
开启 TUN 后只有域名打不开怎么办?
检查 DNS 模块、dns-hijack、Fake-IP、IPv6、私人 DNS 和局域网 DNS 限制,并结合 DNS 日志确认请求是否进入 Mihomo。
Windows 是否必须单独安装 Wintun?
不能一概而论。不同客户端的组件打包方式不同,应以当前客户端说明、日志和适配器列表为准,不要重复安装未经核实的驱动。
Linux 没有 TUN 设备该怎么处理?
先检查运行权限、/dev/net/tun、容器网络能力和防火墙;设备层未准备好时,修改规则或 DNS 通常无效。