🛡️ macOS 15 路由表变更后,Clash Verge Rev TUN 启用失败率较 macOS 14 上升约 40%。本文记录 mihomo 1.19 + utun 栈的生产排障流程:ifconfig utun 诊断、路由冲突定位、Little Snitch 放行规则与 strict-route 配置。前置:运维版客户端、fake-ip 规则。
TUN 与系统代理的本质差异
系统代理仅设置 CFNetwork 的 HTTP/SOCKS 代理,终端 curl、部分 Electron 应用若不读取系统设置则直连。TUN 创建 utunX 虚拟网卡,由 mihomo 写入默认路由,按 rules 分流 IP 包。代价是需管理员密码授权,且错误路由可导致断网。
推荐 mihomo TUN 配置块
tun:
enable: true
stack: gvisor
device: utun
auto-route: true
strict-route: true
auto-detect-interface: true
dns-hijack:
- any:53
mtu: 9000
stack 选型
gvisor 用户态网络栈在 macOS 上兼容性最好;system 栈性能略高但在部分 VPN 共存时会崩溃。mixed 为实验选项,生产不建议。
strict-route
开启后仅代理默认路由流量,避免 LAN 段被误收进 TUN。企业内网访问 10.0.0.0/8 时必须开启,并在规则中 DIRECT 内网域名。
Clash Verge Rev 操作步骤
- 安装 Rev 并导入配置(含上述 tun 块)
- 设置 → 增强模式 → 选择 TUN,输入管理员密码
- 首次启用检查「系统设置 → 隐私与安全性 → 网络扩展」是否允许
- 日志出现
tun listening at utun8即成功
内核版本确认:verge-mihomo -v,性能背景见 基准文。
排障:路由表冲突
症状:TUN 开启后无法访问内网 Git 或打印机。诊断:
netstat -rn | head -20 ifconfig utun8 scutil --dns
若存在多条 default 路由,检查是否同时运行 Cisco AnyConnect、Tailscale 等 VPN。解决:调整服务启动顺序,或在 mihomo 配置 interface-name: en0 绑定物理出口。
Little Snitch 与 LuLu 共存
出站防火墙可能拦截 verge-mihomo 对 utun 的写入。为 mihomo 二进制添加「允许任何连接」规则,并允许 DNS 53/1053 端口。否则表现为「规则不生效、仅部分应用能代理」。
DNS 环路预防
TUN 开启时务必配合 dns.enhanced-mode: fake-ip 与 dns-hijack。若 nameserver 走代理组而代理组依赖 DNS 解析,会形成环路。固定国内 DNS 为 223.5.5.5 直连,参见 规则文 fake-ip-filter。
与 QUIC 出站的关系
TUN 不区分 TCP/UDP,Hysteria2 等 UDP 协议在 utun 下正常通行。若 UDP 异常,先检查 macOS 防火墙而非规则集。协议调优见 QUIC 文。
回滚与应急
断网时:关闭 Verge TUN 开关,或 sudo route delete default 后重启 Wi-Fi。建议保留不含 tun.enable 的备份配置 profile,通过 Verge 一键切换。
💡 服务器侧 Linux TUN 部署见 下载页 systemd 流程;Android 无 utun 而使用 VPNService,见 CMFA 文。
下一篇建议:9090 端口加固清单 · 运维专栏