搜索 K
Appearance
一句话结论先给:客户端决定"你本地怎么转发",机场决定"数据出了你家门走什么路"。 选错客户端,你顶多损失一点性能和多花几百块;选错机场,你花再多钱买 Surge 也救不回来。这篇文章把 Mac 上三套主流方案的底层差异、量化参数、实操配置和排障命令一次性讲透,不吹不黑。
| 你的画像 | 直接选 | 理由 |
|---|---|---|
| 开发者 / 运维 / 需要抓包排查线上问题 | Surge for Mac | MITM、HTTP 抓包、JS 脚本、Gateway Mode,目前没有第二家能打 |
| 预算敏感、追新协议(VLESS+REALITY、Hysteria2、AnyTLS) | Clash Verge Rev | mihomo 内核协议覆盖最全,开源免费,多订阅合并最省事 |
| 苹果全家桶用户,iPhone + Mac 要配置一致 | Loon for Mac | 与 iOS 版规则语法完全同源,改一处两边同步 |
| 要把 Mac 变成旁路由给全家设备供网 | Surge | 仅它原生提供 Gateway Mode(DHCP Server + NAT) |
| 只想安安静静看 4K,不想折腾 | Loon 或 Surge,规则写得简单点 | 分流越复杂,出问题的面越大 |
另外一个被反复问到的问题:Mac 用 Clash 好还是 Surge 好? 答案不是"哪个更强",而是"你需不需要为那 20% 的高级能力付费"。下面拆开讲。
很多从 Windows 迁过来的用户第一反应是"为什么 Mac 上开个 TUN 还要输密码"。这不是软件做得烂,是 macOS 的安全模型决定的。
macOS 从 10.15 起彻底封死了内核扩展(KEXT),所有要接管网络流量的 App 必须走 NetworkExtension.framework。这个框架只给两条路:
utun 接口,在 IP 层接管全部流量。Surge 的 Enhanced Mode、mihomo 的 TUN、Loon 的核心都是这条路。关键工程细节:默认路由是怎么被"偷偷拿走"的。
这三家都不会去改你的默认路由,因为那样会把网关干掉。它们用的是一个经典技巧——向路由表注入两条比默认路由更具体的条目:
0.0.0.0/1 -> utun4
128.0.0.0/1 -> utun4/1 的掩码比 /0 更具体,根据最长前缀匹配原则,所有公网 IP 都会被送进 utun,而原网关仍然保留在 default 条目上,本地局域网、AirPlay、打印机统统不受影响。你可以随时用 netstat -rn | head -20 验证这件事是否真的发生了——这是判断 TUN 是否真的生效的最快方法,比看 GUI 上那个绿色小圆点靠谱一万倍。
DNS 与 fake-ip。 流量进 TUN 后,DNS 查询也会一起被劫持。此时内核有两种处理策略:redir-host(真实解析后再匹配规则)和 fake-ip(先返回一个假 IP,连接时再反查域名)。fake-ip 的首包延迟明显更低,是现代默认;但代价是某些依赖真实 IP 的内网域名、投屏协议会挂掉,必须手动加进 fake-ip-filter。
协议栈性能。 这是三家的分水岭。mihomo 提供 system / gvisor / mixed 三种 TUN 栈:system 直接复用 macOS 内核的 TCP/IP 实现,吞吐和 CPU 占用最优;gvisor 在用户态跑一套完整协议栈,兼容性最好但损耗更大。这就是为什么同一份订阅,在 Clash Verge Rev 里切换 TUN 栈能测出 20%—40% 的吞吐差异。
再说线路侧,这部分客户端管不了。 机场出口走的是 BGP 中转、IEPL 专线还是 IPLC 专线,直接决定晚高峰的抖动幅度;服务端是否开启 BBRv3 拥塞控制、是否做了 QoS 限速与优先级调度,决定你的大文件下载会不会把全屋网速吃干。而 TLS Reality / XTLS Vision 这类抗封锁机制,则是"客户端必须支持、服务端必须开启"的握手层特性——如果机场开了 Reality 而你的客户端不支持,你连上都连不上。这就是协议支持度成为选型硬指标的原因。
以下数据基于 macOS 15 环境、Apple Silicon(M 系列)设备、同一份中等规模规则集(约 8000 条规则 + 3 个 Rule Provider)实测整理,内存为闲置状态区间值,随规则集规模浮动。
| 维度 | Surge for Mac | Clash Verge Rev | Loon for Mac |
|---|---|---|---|
| 授权模式 | 买断 + 功能更新订阅制,人民币数百元级 | 完全免费开源(GPL-3.0) | 买断制,百元级 |
| 内核来源 | 自研闭源 | mihomo(Clash.Meta)开源内核 + Tauri GUI | 自研闭源 |
| 协议覆盖 | SS / Snell / VMess / Trojan / WireGuard / HTTP(S),策略保守 | 全量覆盖:VLESS+REALITY、Hysteria2、TUIC、AnyTLS、SSH、Juicity 等 | SS / SSR / VMess / VLESS / Trojan / Hysteria2 / TUIC / WireGuard |
| TUN 实现 | Enhanced Mode(自研虚拟网卡) | mihomo TUN,可选 system / gvisor / mixed 栈 | Network Extension 原生接管 |
| 权限要求 | 授权系统扩展,一次性 | 需安装 setuid 服务或系统扩展 | 授权 Network Extension |
| 分流引擎 | 规则集 + Smart Group + 逻辑规则,成熟度最高 | Rule Provider + GeoSite/GeoIP + 逻辑规则,灵活度最高 | 规则 + 插件重写,语法最直观 |
| 脚本与重写 | 完整 JS 脚本 + MITM + 内置抓包 | JS Script 引擎,无 MITM 能力 | 插件系统 + JS 脚本 |
| 网关 / 旁路由 | 有 Gateway Mode(DHCP + NAT) | 无官方实现,需手动配 pf NAT | 无 |
| 闲置内存占用 | 约 150–300 MB | 约 80–200 MB | 约 60–120 MB |
| 跨端一致性 | Mac / iOS / Apple TV 共享配置 | 仅桌面端,移动端需另选方案 | Mac / iOS 规则语法完全同源 |
读表要点: Surge 赢在能力密度,Clash Verge Rev 赢在协议覆盖与成本,Loon 赢在轻量与跨端一致性。三者不是替代关系,而是三种不同的取舍。
你需要的根本不是"能上网",而是能看见流量。Surge 内置的 HTTP 抓包可以按域名过滤、重放请求、改响应体,配合 MITM 证书可以直接调试线上 API 的签名逻辑;JS 脚本能在请求出站前做参数改写。这套能力在排查"为什么这个接口在海外服务器上返回 403"时,能省掉你半天时间。如果你一年靠这个省下的时间超过 4 小时,几百块授权费就是回本的。
mihomo 内核的协议跟进速度是行业最快的。机场上线 AnyTLS 或新版本 Reality,通常 mihomo 当天就能用,商业客户端要等一到两个大版本。另外它的 Merge + Script 链式覆写做得非常优雅:你可以保留机场原始订阅不动,用 Merge 文件覆盖 DNS、策略组和规则,机场更新订阅后你的本地修改不会丢——这是很多人没意识到的杀手级用法。
Loon 的规则语法是三家里最好读的,没有 Surge 那种层层嵌套的配置结构。而且 Mac 版和 iOS 版语法完全同源,你在 Mac 上调好的规则可以直接贴到手机上。如果你已经买了 Loon for iOS,Mac 版的边际成本很低。
Surge 的 Gateway Mode 会把 Mac 变成一个带 DHCP 服务器的软路由,全屋设备改一下网关就能走代理,不需要每台设备单独装客户端。代价是这台 Mac 必须常开,且 NAT 转发会吃 CPU。
它的 Profile 机制支持同时加载多份订阅,配合 Proxy Provider 可以做真正的多机场自动测速与故障转移。Surge 也能做,但配置写起来要繁琐得多。
utun 根本没起来)。.conf 格式订阅。用第三方订阅转换把 Clash 配置转过来时,Reality、Hysteria2 这类新协议会在转换中被静默丢弃,表现就是节点全在但一个都连不上。