Mihomo macOS TUN 模式设置步骤
简答:Mihomo macOS TUN 开启失败,通常不是节点问题,而是权限、路由或 DNS 配置未生效。先确认配置已激活,再授权网络组件,开启 TUN,最后用 /configs 与 /connections API 检查实际运行状态。
定义:Mihomo 的 TUN 模式是通过虚拟网络接口接管系统流量,使未读取系统代理的终端、开发工具或部分应用也能按 Mihomo 规则处理连接。
先试这一步:确认配置、权限和冲突项
本文是面向 macOS 用户的第三方使用指南,不代表任何客户端或服务的官方页面。截至 2026年10月23日,Mihomo 文档将 TUN 配置分为启用、协议栈、设备名、自动路由、自动检测出口网卡和 DNS 劫持等字段;macOS 的 TUN 设备名必须以 utun 开头。可先查看 Mihomo TUN 配置文档,菜单名称则以当前客户端版本为准。
| 检查项 | 建议 | 判定标准 |
|---|---|---|
| 配置状态 | 先激活一份能正常启动的配置,再改 TUN | 客户端能正常启动内核,节点或策略组可用 |
| 其他网络工具 | 先退出其他 VPN、透明代理、网络过滤器和抓包工具 | 只保留一个程序负责系统级路由 |
| 系统代理 | 首次测试时可保留客户端系统代理,但不要同时叠加其他代理 | 浏览器和终端的路径可单独判断 |
| 网络权限 | 若系统弹出网络组件、网络扩展或本地网络权限提示,选择允许 | 客户端不再反复请求授权,TUN 能创建 |
| 处理器架构 | Apple Silicon 与 Intel 选择对应安装包 | 应用可以正常启动,内核文件能加载 |
如果 macOS 没有再次显示权限弹窗,可打开“系统设置 → 隐私与安全性”检查相关提示;若应用需要访问局域网设备,还可在“隐私与安全性 → 本地网络”中确认权限。Apple 的路径说明见 Apple Mac 本地网络访问设置。这项权限主要影响局域网访问,不等同于 TUN 已成功。
在客户端中开启 TUN:先用界面路径
旧教程常写 Mihomo Party,当前项目页面使用 Clash Party 名称;项目发布页同时提供 macOS Intel 与 Apple Silicon 安装包,具体菜单会随版本变化,可参考 Clash Party Releases,不要依据第三方分发页面判断安装包来源。
- 启动客户端,确认已经导入并激活配置。
- 确认当前策略组或节点可以正常连接;如果配置本身无法启动,先不要排查 TUN。
- 进入客户端的设置、网络或 TUN 相关页面,打开 TUN 开关。不同版本的入口名称可能不同,以当前版本界面为准。
- 首次开启时,按 macOS 提示输入当前用户密码,允许客户端安装或启用所需的网络组件。
- 如果有“自动路由”或“自动检测出口网卡”选项,首次排查建议开启自动路由,并保留自动检测出口网卡。
- 协议栈先选择
system;如果开启后出现连接异常,再单变量改为mixed或gvisor。Mihomo 文档列出的协议栈差异与防火墙注意事项见 TUN 字段说明。
macOS 通常不需要手动填写 device。如果确实要填写,必须使用以 utun 开头的名称;不要照抄别人机器上的 utun0、utun7 等编号,因为接口编号可能随系统、网络工具和启动顺序变化。
系统代理是否同时开启? TUN 负责接管更广泛的系统流量,系统代理主要影响遵循 HTTP 或 SOCKS 代理设置的应用。首次验证时,可以先保持客户端的系统代理设置不变,但关闭其他软件的代理;如果需要判断某个应用到底走哪条路径,再分别测试 TUN 开启和关闭的结果。
需要手动调整时:只添加明确字段
如果客户端界面无法保存 TUN 参数,可在当前配置的顶层增加以下配置段。这里不使用 dns-mode,避免因不同核心版本或客户端覆写机制造成误判;DNS 劫持字段以当前 Mihomo 文档为准。
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53这段配置的作用是启用 TUN、自动设置路由、自动选择出口接口,并把匹配到的 DNS 连接交给 Mihomo 的 DNS 模块。官方示例与字段定义可查看 Mihomo 快速配置示例 和 Mihomo TUN 文档。
macOS 和 Windows 无法自动劫持发往局域网的 DNS 请求,因此局域网设备访问、公司网络、校园网或本地解析异常时,不能只凭 DNS 劫持字段下结论。Mihomo 文档还说明,mtu 一般可保持默认;不要为了“优化速度”随意填写未经验证的数值。
如果配置中已有 tun: 段,不要重复添加两个同名顶层字段;应在现有段内逐项修改。修改后重新加载或重启内核,并以客户端设置页显示的端口为准。
用 external-controller API 验证:不要只看网页能否打开
网页能打开只能说明某条连接成功,不能单独证明流量经过 TUN。若客户端开放了 Mihomo API,可用运行中的控制器检查版本、TUN 状态和连接记录。Mihomo 官方 API 文档说明,/version 用于读取核心版本,/configs 返回运行配置,/connections 返回当前连接信息;API 基础配置说明见 Mihomo 全局配置 和 Mihomo API 文档。
下面统一以 127.0.0.1:9090 为示例,实际端口以客户端设置页为准。若设置了 API 密钥,把环境变量中的占位值替换成自己的密钥。
export MIHOMO_API="http://127.0.0.1:9090"
export MIHOMO_SECRET="你的API密钥"
curl -s -H "Authorization: Bearer $MIHOMO_SECRET" "$MIHOMO_API/version"
curl -s -H "Authorization: Bearer $MIHOMO_SECRET" "$MIHOMO_API/configs" | grep -i -A 12 -B 2 tun
curl -s -H "Authorization: Bearer $MIHOMO_SECRET" "$MIHOMO_API/connections"| 返回结果 | 说明 | 下一步 |
|---|---|---|
/version 返回 JSON | API 地址和密钥基本正确 | 继续查看 /configs |
tun.enable 为 true | 运行配置已启用 TUN | 检查连接记录是否出现目标应用或终端 |
出现 device 且以 utun 开头 | 核心已记录 TUN 接口 | 继续做关闭 TUN 的对照测试 |
/connections 出现测试连接 | 这是流量经过核心的直接证据之一 | 查看对应规则、链路和进程信息 |
| 返回 401、连接失败或空响应 | API 端口、密钥或客户端控制方式不匹配 | 回到设置页核对,入口以当前版本界面为准 |
不同核心版本返回字段可能略有差异,所以不要只按某个固定 JSON 字段判断;优先确认 tun.enable、device 和连接记录是否同时符合预期。
单变量排查:权限、DNS、断网和路由冲突
1. TUN 开关打开后立即关闭
先看客户端日志是否出现权限、网络组件或内核启动错误。退出客户端后重新启动,并在 macOS 的“系统设置 → 隐私与安全性”查看是否有待处理的系统软件或网络扩展提示。若使用防火墙,Mihomo 文档指出 macOS 通常无需额外配置;遇到阻断时再检查防火墙是否允许相关应用。
2. TUN 显示开启,但应用仍无法联网
先关闭其他 VPN、透明代理和网络过滤工具,只保留 Mihomo。然后用 API 查看 /connections,启动一个终端请求,再观察是否出现对应连接。如果没有记录,说明问题更可能在 TUN 路由、应用绕过规则或客户端开关未真正作用于运行中的核心,而不是节点延迟。
curl -I https://example.com执行时不要加 -x,这样测试的是 TUN 或系统默认路径;加 -x 会变成显式 HTTP 代理测试,不能与 TUN 结果混为一谈。
3. DNS 解析异常
先保持其他设置不变,只临时移除 dns-hijack 两行并重启核心,观察普通域名是否恢复;再恢复配置进行对照。macOS 对局域网 DNS 的自动劫持存在限制,局域网域名异常时应单独判断,不要把所有现象归因于节点。
4. 开启 TUN 后断网
先关闭 TUN,确认基线网络能恢复;再只改一个变量:将协议栈从 system 改为 mixed,或从 mixed 改为 gvisor,不要同时修改 DNS、路由和节点。若仍断网,退出其他网络工具后重新测试,并检查 API 中的运行配置是否与界面显示一致。
5. Tailscale 或其他虚拟网卡冲突
如果设备同时存在多个虚拟网络接口,先暂时退出其他网络工具,再测试 TUN。Mihomo 的 auto-detect-interface 用于自动选择出口接口;多出口环境下,官方文档建议根据实际情况指定出口接口。未确认具体环境前,不要手动填写他人示例中的 utun 编号。
完成判断:用三项结果收尾
- 客户端界面显示 TUN 已开启,且未持续弹出权限错误。
/configs中的tun.enable为true,设备名符合 macOS 的utun命名要求。- 执行不带
-x的终端请求时,/connections能看到对应连接记录;关闭 TUN 后重复测试,结果能够形成清晰对照。
满足这三项,才能较有把握地判断 TUN 已被核心接管。若只满足第一项,不足以证明终端、游戏或开发工具的流量已经经过 Mihomo。
常见问题
macOS TUN 一定要手动填写 utun 设备名吗?
通常不需要。先让客户端和核心自动创建接口;只有在明确需要固定接口名且当前版本支持时,才考虑填写以 utun 开头的名称。具体编号不要照抄其他设备。
TUN 开启后还要不要打开系统代理?
两者作用不同。TUN 面向更广泛的系统流量,系统代理主要影响遵循 HTTP 或 SOCKS 设置的应用。首次排查可以保留客户端自身的系统代理,但必须关闭其他代理软件,并通过 /connections 判断实际路径。
为什么网页能打开,但 API 看不到连接?
可能是请求没有经过当前 Mihomo 核心,例如浏览器走了其他系统代理、缓存或另一套网络工具。请执行不带 -x 的终端请求,同时确认 API 地址、密钥和当前运行核心一致。
dns-hijack 写了 any:53 还是解析异常,怎么办?
macOS 无法自动劫持发往局域网的 DNS 请求,因此局域网域名不一定适用。可暂时移除 dns-hijack 做单变量对照,并检查当前 DNS 配置、其他 DNS 工具和网络过滤器。
Apple Silicon 和 Intel 的 TUN 设置有区别吗?
核心配置字段基本按 Mihomo 文档执行,主要差异在客户端安装包和内核架构。项目发布页提供对应架构的 macOS 安装包;下载前先确认芯片类型,并以当前版本提示为准。
常见问题
macOS TUN 一定要手动填写 utun 设备名吗?
通常不需要。先让客户端和核心自动创建接口;只有在明确需要固定接口名且当前版本支持时,才考虑填写以 utun 开头的名称。
TUN 开启后还要不要打开系统代理?
两者作用不同。TUN 面向更广泛的系统流量,系统代理主要影响遵循 HTTP 或 SOCKS 设置的应用。首次排查时不要叠加其他代理软件。
为什么网页能打开,但 API 看不到连接?
可能是请求没有经过当前 Mihomo 核心。请执行不带 -x 的终端请求,并确认 API 地址、密钥和运行中的核心一致。
dns-hijack 写了 any:53 还是解析异常怎么办?
macOS 无法自动劫持发往局域网的 DNS 请求。可暂时移除 dns-hijack 做单变量对照,并检查其他 DNS 工具和网络过滤器。
Apple Silicon 和 Intel 的 TUN 设置有区别吗?
核心字段按 Mihomo 文档执行,主要差异在客户端安装包和内核架构。下载时选择对应架构,并以当前版本提示为准。