TUN · macOS

Clash macOS TUN 模式配置教程

Clash TUN 透明代理网络栈

🛡️ 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 操作步骤

  1. 安装 Rev 并导入配置(含上述 tun 块)
  2. 设置 → 增强模式 → 选择 TUN,输入管理员密码
  3. 首次启用检查「系统设置 → 隐私与安全性 → 网络扩展」是否允许
  4. 日志出现 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-ipdns-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 端口加固清单 · 运维专栏