五树云高端机场 | 一个极速通道,让你畅通无阻!

Mihomo TUN 模式无法启动怎么办?按报错定位权限与网卡

更新于 2026-10-23 · xiaomitizi.top

简答:先关闭 TUN 确认普通代理能否启动,再查看完整日志;根据报错分别检查权限、虚拟网卡、端口、配置和路由。若已显示 TUN listening 但断网,应转查 DNS、strict-route 与系统 VPN 冲突。

定义:Mihomo TUN 模式是通过虚拟网卡接管系统流量的工作方式,启动失败通常涉及权限、TUN 设备、路由、DNS、端口或配置校验。

先按故障阶段判断:无法启动,还是启动后断网

先不要修改一堆配置。关闭 TUN,保留同一份节点和配置,确认普通 HTTP、SOCKS 或 mixed 代理端口能否启动;普通代理正常而 TUN 失败,才继续查权限、虚拟网卡和路由。

现象或日志关键词优先怀疑按系统先做什么正常判定
permission denied管理员、VPN 授权、Linux 能力或服务模式未启用Windows/macOS 完成客户端授权;Linux 先用 root 测试日志不再出现权限拒绝,并开始创建 TUN
cannot create TUN、device or resource busyTUN 设备缺失、旧接口未释放或其他 VPN 占用退出其他 VPN,检查 Windows 网卡、macOS utun 或 Linux TUN 设备出现新的 TUN 接口或日志显示 listening
address already in use、file exists端口、旧进程或路由规则重复查监听端口、进程和路由;不要直接删除全部路由仅一个 Mihomo 核心占用目标端口
YAML、unknown field缩进、字段名或核心版本不匹配备份配置后执行 mihomo -t,再用最小配置复测配置测试通过且无字段错误
没有明显报错但开启后断网DNS、strict-route、系统代理或其他 VPN 冲突临时关闭复杂 DNS、strict-route 和其他网络过滤器TUN listening,且 DNS 与普通网页恢复

当前 mihomo 官方 TUN 文档列出的 stack 值包括 system、gvisor、mixed 和 mips。本文不把 mips 当作系统架构名;如果客户端内置核心较旧,应以该核心对应的文档和日志为准。

先看日志,再做最小配置验证

  1. 在客户端日志中搜索 TUN、permission、interface、route、DNS 和 YAML,保留从核心启动到报错前后的完整片段。
  2. 关闭 TUN,只保留普通代理端口,确认核心本身能运行。普通代理也失败时,先处理端口、订阅或配置,不要继续改 TUN。
  3. 命令行核心先执行 mihomo -h。如果帮助中存在 -t,再执行 mihomo -t -f /替换为你的配置文件路径/config.yaml;如果使用配置目录,则执行 mihomo -t -d /替换为你的配置目录。
  4. 判定标准是命令退出成功且没有 YAML、字段或解析错误。MetaCubeX 官方面板 README也把 mihomo -t作为配置最终校验步骤。

最小复测时只保留已有端口、日志级别和 tun.enable。成功后依次恢复 stack、auto-route、dns-hijack、strict-route、IPv6 和自定义路由,每次只改一个变量。

Windows:查权限、服务模式、Wintun 与端口

  • 先完整退出客户端,在任务管理器确认没有第二个 Mihomo 核心。若使用 Clash Verge Rev 等 GUI,服务模式、核心路径和管理员授权属于客户端层设置,入口会随版本变化;不要把某个 GUI 的按钮名称当成 Mihomo 内核通用字段。
  • 把 7890替换为配置中的实际端口,执行 Get-NetTCPConnection -LocalPort 7890 -ErrorAction SilentlyContinue。若有输出,记录 OwningProcess,再执行 Get-Process -Id 进程号。正常情况是目标端口由当前核心占用,或在未启动时没有监听。
  • 查看虚拟网卡:执行 Get-NetAdapter;若要筛选名称,可执行 Get-NetAdapter | Where-Object InterfaceDescription -like '*Wintun*'。有残留接口不等于必须删除,先退出相关 VPN、虚拟机和网络过滤器,再禁用或重新启动客户端。
  • 如果出现 DLL 或 Wintun 报错,先检查杀毒软件隔离记录、核心目录写权限和重复旧 DLL。原生 Mihomo 的组件与第三方 GUI 打包方式可能不同,不要直接从不明来源下载 DLL。
  • Windows 使用 system 或 mixed 时,如果防火墙阻止核心,按 官方 TUN 文档放行对应核心程序后再复测。

macOS:确认 utun、授权与网络过滤器

  • macOS 的 TUN 接口名称必须以 utun 开头。终端执行 ifconfig | grep -E 'utun[0-9]+',看到接口只能说明系统存在 utun,最终仍要以 Mihomo 日志中的 listening 或成功接管流量为准。
  • 如果客户端提示 helper、内核授权或网络扩展未启用,按当前客户端的系统设置提示完成授权。Clash Party 的公开仓库显示其 macOS 安装流程包含特权 helper;这属于客户端打包方式,不代表所有 GUI 都使用同一路径,详见 Clash Party 官方仓库。
  • 复测前退出其他 VPN、网络过滤器和虚拟机软件。防火墙阻止核心时,按 mihomo 官方 TUN 文档检查应用放行设置。

Linux:补齐 TUN 设备与权限检查

  1. 检查设备节点:执行 ls -l /dev/net/tun。如果不存在,执行 lsmod | grep '^tun';没有输出时可尝试 sudo modprobe tun,再重新检查设备节点。
  2. 如果日志是 permission denied,先用 root 运行一次以区分“权限问题”和“配置问题”。确认是权限后,可给二进制授予能力:sudo setcap cap_net_admin,cap_net_bind_service=+ep /替换为你的 Mihomo 二进制路径。其中 CAP_NET_ADMIN涉及接口和路由管理,CAP_NET_BIND_SERVICE只在需要绑定 1024 以下端口时有用,依据 Linux capabilities(7) 手册。
  3. 若通过 systemd 运行,可在服务的 [Service]段加入:AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE、CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE、DeviceAllow=/dev/net/tun rw。不使用低位端口时可删去 CAP_NET_BIND_SERVICE。修改后执行 sudo systemctl daemon-reload、sudo systemctl restart mihomo,再用 sudo systemctl status mihomo --no-pager查看状态。字段含义可查 systemd.exec 官方手册。
  4. 检查接口、路由和规则:分别执行 ip link show、ip route、ip rule。把 7890替换为实际端口,执行 ss -lntp | grep 7890。输出中的 PID 应属于当前核心;若是旧进程,先正常停止服务。

DNS、strict-route、IPv6 与配置字段怎么处理

  • 当前官方 TUN 配置使用的是 dns-hijack,不是本文自行推断的 dns-mode: hijack。配置中应逐字对照 官方 TUN 字段说明,不要把其他内核或旧示例字段直接复制进来。
  • dns-hijack用于把匹配的 DNS 连接交给内部 DNS 模块。官方文档说明,Windows 和 macOS 不能自动劫持发往本地网络的 DNS;Android 开启私人 DNS 时,也不能自动劫持。Android 可在系统设置中搜索“私人 DNS”,临时改为自动或关闭后复测,具体菜单以机型为准。
  • strict-route只在启用 auto-route时强化路由规则。Windows 可能增加防 DNS 泄漏的防火墙规则,并在特定情况下影响 VirtualBox;排查基础启动时可先关闭,确认 TUN 正常后再恢复。
  • inet6-address需要顶层配置同时启用 IPv6,且 Mihomo 启动时会检查系统接口是否存在 IPv6。若系统没有 IPv6,先移除该字段做对照测试,不要把它当作所有 permission denied的统一原因。
  • mtu主要影响极端条件下的传输速率,通常不是“无法创建 TUN”的首选修复项;先处理权限、接口、路由和配置校验。

开启后断网或关闭后残留:安全恢复顺序

  1. 先关闭 TUN,再退出 Mihomo 和其他 VPN;不要在核心仍运行时直接删除系统路由。
  2. Windows 执行 route print查看路由,只有确认某条路由由本次测试产生且不再需要时,才执行 route delete 目标网段。虚拟适配器先禁用,不要盲目卸载。
  3. Linux 先备份:执行 ip route > ~/mihomo-route-backup.txt和 ip rule > ~/mihomo-rule-backup.txt。确认归属后,再使用实际接口名执行 ip link delete 接口名、ip route del ...或 ip rule del ...,不要套用示例网段。
  4. macOS 不要手动删除全部 utun接口。先完整退出客户端并重新启动;如果反复热重载后仍失败,优先重启客户端或系统网络连接。
  5. 如果 TUN 已显示 listening 但所有应用断网,先关闭 strict-route、复杂 DNS 劫持、自定义路由和其他网络过滤器,再逐项恢复。判定标准是 TUN 仍能启动、普通域名可解析、至少一个普通应用能够联网。

最后的复测清单与反馈信息

复测顺序建议固定为:普通代理正常 → 只开启 tun.enable → 单独测试 stack → 测试 auto-route → 恢复 dns-hijack → 最后恢复 strict-route、IPv6 和自定义排除规则。任何一步失败,就回退上一步。

  • 记录操作系统、客户端名称、内核版本和启动日志。
  • Windows 提供端口进程与 Get-NetAdapter结果;macOS 提供相关 utun输出;Linux 提供 /dev/net/tun、ip link、ip route、ip rule和 ss -lntp结果。
  • 配置只提交脱敏后的 TUN 相关片段,不要公开订阅链接、密钥、节点密码或完整身份信息。

本站与 Mihomo 项目及其开发者无隶属关系。客户端界面、内核打包方式和权限提示可能不同,具体版本以对应项目公开资料为准。

常见问题

Mihomo TUN 模式无法启动,应该先改 stack 吗?

不建议一开始反复修改 stack。先关闭 TUN确认普通代理能用,再查日志、权限、接口和残留进程;之后再按照当前官方文档列出的值进行单变量测试。

Linux 出现 permission denied,必须直接用 root 长期运行吗?

不一定。可以先用 root 判断是否为权限问题,再根据需要给二进制授予 CAP_NET_ADMIN,或在 systemd 中设置 AmbientCapabilities、CapabilityBoundingSet 和 DeviceAllow。修改前应确认二进制路径可信。

Windows 找不到 Wintun 文件,需要单独下载 DLL 吗?

不能直接判断需要下载。先检查客户端目录、杀毒软件隔离记录、目录写权限和重复旧 DLL。原生核心与第三方客户端的打包方式可能不同,不要替换来源不明的文件。

TUN 已经显示 listening,但开启后所有应用都断网怎么办?

这时重点转向路由和 DNS。先关闭 strict-route、复杂 dns-hijack、自定义路由以及其他 VPN 或网络过滤器,再逐项恢复;Android 还要检查私人 DNS。

Linux 关闭 TUN 后再次提示 device or resource busy 怎么办?

先完整退出客户端和核心,不要连续热重载;再检查 /dev/net/tun、ip link、ip route 和 ip rule。确认残留接口或规则归属后再删除,并先保存备份。

相关阅读

参考资料

  1. mihomo 官方 TUN 配置文档
  2. MetaCubeX 官方面板 README
  3. Clash Party 官方仓库
  4. Linux capabilities(7) 手册(man7.org)
  5. systemd.exec 官方手册(freedesktop.org)