Mihomo TUN 模式不生效怎么办?按日志和症状排查
简答:Mihomo TUN 不生效时,先关闭 TUN,用 HTTP、SOCKS 或 Mixed 代理确认核心和节点是否正常;再区分“无法创建 TUN”和“TUN 已启动但流量未接管”。随后只改一个变量,依次检查管理员权限、虚拟网卡、auto-route、DNS 劫持、Private DNS、IPv6、其他 VPN 冲突和规则命中。
定义:Mihomo TUN 模式是通过虚拟网络接口和系统路由接管网络层流量的工作方式,不等同于只对已设置代理的应用生效的 HTTP、SOCKS 或 Mixed 代理。
先做这 5 步:不要一开始就改 DNS 或删路由
如果你只是打开了 TUN 开关,但网页、应用或域名仍然不通,先按下面的最短路径定位。本站是第三方使用指南站,不是任何客户端或服务品牌的官方站点;本文只依据 Mihomo 文档、项目资料和系统命令文档整理。
| 现象 | 先检查 | 停止条件 |
|---|---|---|
| TUN 开关一打开就失败 | 日志、管理员权限、虚拟网卡、旧进程和端口 | 看到 permission denied、Start TUN listening error 或 address already in use 时,先不要继续改 DNS |
| TUN 显示已启动但网页打不开 | 系统路由、出口网卡、DNS 和其他 VPN | 能访问 IP 但不能访问域名时,转到 DNS 分支 |
| 只有部分应用不通 | 规则、fake-ip、应用自身代理设置、IPv6 | 先确认是否只有某类应用或某个协议失败 |
| 关闭 TUN 后仍然断网 | 系统代理、残留虚拟接口和路由 | 恢复普通网络后再继续配置 |
- 备份配置。复制当前 YAML 或在图形客户端导出配置,并记录 Mihomo 核心版本、客户端版本、系统版本和完整日志。
- 关闭 TUN。保留普通 HTTP、SOCKS 或 Mixed 代理,手动设置浏览器或系统代理,确认节点和核心是否能工作。普通代理能用,只能说明核心和节点具备基本连通性,不等于 TUN 路由正确。
- 检查配置。命令行核心可使用
mihomo -t -f config.yaml检查配置文件;图形客户端则使用其“检查配置”“验证配置”或重新载入功能。官方项目资料中也使用了-t -f形式进行配置检查。查看 Mihomo 项目讨论中的配置检查示例 - 只开启最小 TUN 参数。先保留
enable、stack、auto-route、auto-detect-interface,暂时不要同时修改 MTU、IPv6、复杂路由排除项和应用过滤。 - 验证结果。确认日志出现 TUN 接口创建或监听信息,再分别测试 IP、域名、浏览器和一个不使用系统代理的应用。不要把“已连接”“端口监听”或“浏览器能打开”直接当作所有流量均已接管。
官方 TUN 文档说明,TUN 支持 macOS、Linux 和 Windows;auto-route 用于自动设置全局路由,auto-detect-interface 用于自动识别出口网卡。查看 Mihomo TUN 官方文档
先分清:无法创建 TUN,还是创建后不接管流量
一、无法创建 TUN:看权限、驱动和冲突
如果日志出现 permission denied、Start TUN listening error、interface timeout 或类似“无法打开接口”的信息,优先检查当前客户端是否获得系统网络权限、是否存在旧的 Mihomo 进程或其他 VPN/TUN 软件。桌面端的系统级路由需要管理员或 root 权限;官方 Mihomo Dashboard 文档也说明,首次启用桌面 TUN 可能需要安装并授权特权辅助服务。查看官方 Dashboard 对桌面 TUN 权限的说明
- Windows:以管理员身份重新启动客户端,确认虚拟网卡已出现;用命令提示符执行
ipconfig /all查看网卡和地址,再执行route print查看路由表。Microsoft 文档说明,ipconfig可显示各适配器的地址、网关和 DNS 信息,route print可显示本机 IP 路由表。查看 ipconfig 文档 查看 route 文档 - macOS:确认客户端已获得网络扩展或相关系统授权,并在“系统设置—网络”中查看当前服务的 DNS。Apple 文档给出了 macOS DNS 设置入口;如果启用 TUN 后只有域名解析异常,不要直接删除系统 DNS,先记录原值。查看 Apple 的 macOS DNS 设置说明
- Linux:确认运行用户有创建 TUN 和修改路由的权限,检查接口与路由:
ip link、ip route。Linuxip route用于查看和管理内核路由表。查看 ip-route 手册 - Android:检查是否有另一个 VPN、Private DNS 或始终开启的 VPN 服务占用 VPN 通道;系统 VPN 通道通常不能由多个应用同时接管。
如果出现 address already in use,先关闭旧客户端、旧核心或其他占用 DNS、Mixed、控制器端口的进程,再重新启动;不要为了“绕过”错误而随意更换多个端口和配置项。
二、TUN 已启动但不接管:看路由和出口网卡
Mihomo 官方配置示例把 auto-route、auto-detect-interface 和 dns-hijack 作为 TUN 相关字段,但这些字段的具体默认值和客户端覆写方式可能不同,必须以当前核心文档和实际运行配置为准。查看 Mihomo 配置示例
- 在客户端的运行配置或日志中确认
tun.enable实际为true,而不是只看订阅原文件。 - 确认
auto-route: true是否被客户端覆写;如果设备有 Wi-Fi、网线、蜂窝网络或虚拟网卡,确认auto-detect-interface选中的出口网卡正确。 - 临时关闭其他 VPN、WireGuard、虚拟机网络、容器网络和网络加速软件,再重启 Mihomo。多套软件同时改默认路由时,结果可能表现为部分流量绕过 TUN 或循环进入 TUN。
- Windows 执行
route print,Linux 执行ip route,只观察默认路由和 TUN 相关路由,不要直接执行清空路由表的命令。
验证边界:看到 TUN 接口或路由出现,只能证明系统完成了部分网络设置;仍需用不遵循系统代理的应用、域名解析和实际目标连接进行验证。
按症状处理 DNS、fake-ip、IPv6 和规则问题
能访问 IP,但域名打不开
这通常应先作为 DNS 排查方向,而不是马上判断节点失效。Mihomo 文档说明,dns-hijack 会把匹配的 DNS 连接转入内部 DNS 模块;在 macOS 和 Windows 上,局域网发出的 DNS 请求不能被自动劫持,在 Android 上,启用 Private DNS 时也可能无法自动劫持。查看 Mihomo 对 dns-hijack 的限制说明
- 查看 Mihomo 日志中是否出现 DNS 请求或 hijack 记录。
- Android 先暂时关闭 Private DNS 后测试;测试结束后是否重新启用,应按你的网络环境和隐私要求自行决定。
- macOS 或 Windows 检查系统 DNS 是否仍指向原网络服务;不要把某个 DNS 地址硬编码到所有设备。
- 如果使用 fake-ip,检查目标域名是否被放入 fake-ip 过滤列表,以及规则是否把 DNS 或目标域名送往错误策略。
如果日志显示 DNS 请求根本没有到达 Mihomo,优先检查系统 DNS、Private DNS、局域网 DNS 或 macOS 的系统解析路径;如果 DNS 请求已到达但解析超时,再检查上游 DNS、代理规则和核心日志。
只有部分应用失败
先确认失败应用是否使用自己的 DNS、独立代理设置、QUIC/UDP 或 IPv6。随后在 Mihomo 日志中观察该应用的域名、目标地址、协议和命中的规则。规则命中不等于目标连接成功,仍要继续看连接错误和返回结果。
如果只有 IPv6 目标失败,可暂时在配置和系统中关闭 IPv6 做对照测试;这只是定位变量,不代表所有环境都应永久关闭 IPv6。若只有 UDP 或某类协议失败,先不要通过修改 MTU 得出结论,应先确认节点、协议和客户端是否确实支持该流量。
启动后全网断开
先关闭 TUN,而不是删除系统路由。然后退出 Mihomo 核心,检查系统代理是否仍指向本地端口,确认默认网关和 DNS 已恢复,再重新连接 Wi-Fi 或网线。Mihomo 文档指出,strict-route 会强化严格路由规则;在 Windows 上还会增加用于阻止 DNS 泄漏的防火墙规则,并可能导致某些应用在特定场景下异常。查看 strict-route 官方说明
因此,首次排障不建议同时打开 strict-route、fake-ip、IPv6、自定义路由和复杂 DNS 劫持。先恢复基础连接,再一次只改一个变量。
Windows、macOS、Linux、Android 的安全回滚清单
| 系统 | 先做什么 | 看到什么才算恢复 |
|---|---|---|
| Windows | 关闭 TUN,退出核心,检查系统代理;执行 ipconfig /all 和 route print | 默认网关、DNS 和普通浏览器连接恢复;路由表未被误清空 |
| macOS | 关闭 TUN,检查“系统设置—网络—当前服务—DNS”,再重新连接网络 | 系统 DNS 回到原配置或明确的当前配置,普通网络和域名解析恢复 |
| Linux | 停止 Mihomo 服务,执行 ip link、ip route 检查接口和路由 | 默认路由指向原出口,TUN 残留接口不再接管流量 |
| Android | 关闭 TUN/VPN,检查 Private DNS 和其他 VPN,重新打开网络连接 | 系统 VPN 状态正常,普通应用可访问,域名解析恢复 |
如果设备运行在 Docker 或 NAS 中,还要单独核对容器是否有 TUN 设备、相关权限和正确的宿主机路由;容器内的网络接口存在,不代表宿主机或其他设备的流量已经被接管。不要把桌面系统的命令直接套用到容器环境。
确认回滚成功后,再恢复备份配置,逐项启用:先 TUN,再 auto-route,再 DNS 劫持,最后才测试 strict-route、fake-ip、IPv6、MTU 或应用过滤。每次只启用一个变量,并保留对应日志。
日志关键词对照:看到什么就停在哪一层
| 关键词或现象 | 优先判断 | 下一步 |
|---|---|---|
permission denied | 权限或系统辅助服务不足 | 重新授权管理员/root权限,确认客户端具备系统网络权限 |
Start TUN listening error | TUN 接口创建失败、驱动异常或冲突 | 关闭其他 VPN 和旧进程,确认虚拟接口后重试 |
interface timeout | 出口网卡识别或接口初始化超时 | 检查 auto-detect-interface 和当前网络连接 |
address already in use | 端口或接口资源被占用 | 查找旧核心、其他客户端或 DNS 监听,不要盲目改整份配置 |
unknown field、YAML 解析错误 | 字段版本不匹配、缩进或配置合并异常 | 用当前核心配置检查功能验证,并检查客户端覆写后的运行配置 |
| TUN 已启动但域名失败 | DNS、Private DNS、fake-ip 或规则方向 | 看 DNS 日志和规则命中,先不要调整 MTU |
日志关键词只能帮助定位排查层级,不能单独证明某个节点、线路或服务一定有问题。若普通代理也失败,应回到订阅、节点、核心和基础网络连通性检查;若普通代理正常而 TUN 失败,才继续集中检查权限、接口、路由和 DNS。
常见问题
1. Mihomo TUN 开启后,浏览器能打开但某些应用不通,算 TUN 生效吗?
不能直接这样判断。浏览器可能遵循系统代理,而其他应用可能使用独立网络栈、独立 DNS、UDP 或 IPv6。应在 Mihomo 日志中确认该应用的连接是否出现、命中了什么规则,并分别测试域名、IP 和目标协议。
2. 是否必须打开 strict-route 才能让 TUN 工作?
不一定。官方文档把 strict-route 定义为在 auto-route 开启时强化严格路由规则,并说明它可能影响局域网访问或某些应用。先让基础 TUN、路由和 DNS 正常,再根据是否存在流量绕过或 DNS 泄漏风险进行单变量对照。
3. dns-hijack 写了 any:53,为什么 Android 仍然解析失败?
Android 开启 Private DNS 时,DNS 请求可能无法被自动劫持。先记录当前 Private DNS 状态,暂时关闭后重测,并观察 Mihomo 日志是否出现 DNS 请求;如果仍无请求,再检查 VPN 冲突、配置覆写和系统网络状态。
4. 能不能直接删除默认路由或清空路由表?
不建议。清空或误删系统路由可能让设备彻底失去网络。优先关闭 TUN、退出核心、恢复系统代理并重新连接网络;只有明确知道每条路由用途、且已经保存原始状态时,才进行人工调整。
5. 修改 MTU 能解决所有 TUN 连接问题吗?
不能。MTU 只应作为存在分片、特定协议或路径传输异常时的排查变量。先确认 TUN 接口、路由、DNS 和普通代理均已基本正常,再一次只调整 MTU,并记录修改前后的日志和连接现象。
常见问题
Mihomo TUN 开启后浏览器能打开但某些应用不通,算生效吗?
不能直接判断。浏览器可能遵循系统代理,其他应用可能使用独立 DNS、UDP 或 IPv6。应结合 Mihomo 日志、规则命中和目标协议继续验证。
Mihomo TUN 是否必须打开 strict-route?
不一定。先让基础 TUN、路由和 DNS 正常,再根据是否存在流量绕过或 DNS 异常进行单变量测试。strict-route 可能影响局域网访问或某些应用。
Android 开启 Private DNS 时,Mihomo dns-hijack 为什么可能无效?
Mihomo 官方文档明确提示,Android 开启 Private DNS 时,DNS 请求可能无法被自动劫持。可记录状态后暂时关闭重测,并观察 Mihomo 日志是否收到 DNS 请求。
可以直接清空系统路由来修复 TUN 吗?
不建议。先关闭 TUN、退出核心、检查系统代理和默认网关,再重新连接网络。没有保存原始路由状态时,不要清空路由表。