系统代理模式无法代理所有应用,而 TUN 模式可以接管全局流量。本文详解 TUN 模式原理、在各 macOS 客户端的配置方法与常见问题。
大家好,我是阿明。
在 macOS 上折腾代理工具的朋友,大概率都经历过这种“灵异事件”:浏览器开着 YouTube 看得飞起,结果打开终端(Terminal)执行 git clone 却卡死在 0%;或者在 Steam 里下个游戏,速度慢到感人;更别提那些用了私有协议的办公软件,明明节点显示通畅,它们却始终处于离线状态。
这些问题的根源,就在于传统的“系统代理”并非万能。对于很多“不听话”的应用来说,系统代理就像是一个路边的告示牌,它们视而不见。而我们今天要聊的 TUN 模式,则是直接在路中央设下的关卡。
这篇文章,阿明将带你深度剖析 TUN 模式的方方面面。字数较多,建议先收藏再看。
第一章:揭秘“代理漏流”的真相
为什么有了系统代理,流量还是会从眼皮子底下溜走?我们需要从 macOS 如何处理网络请求说起。
1.1 什么是“君子协定”?
当你开启 ClashX 或 Surge 的“系统代理”开关时,程序其实只是在你的 系统设置 -> 网络 -> 代理 界面里填上了 127.0.0.1:7890 之类的地址。
这是一种典型的“应用层代理”。它的运作逻辑是这样的:
- 应用程序(如 Chrome)发起网络请求。
- 它会先去读取系统的代理设置。
- 发现有设置,于是它主动将原本要发往目标服务器的数据包,打包发给本地的代理软件。
问题就在这里:如果应用程序不去读取这个设置呢?
- 终端程序 (CLI):比如
curl,wget,brew。它们诞生于代理设置还没那么统一的年代,默认是不会看系统面板里的代理配置的。 - 游戏客户端:为了追求极致性能,很多游戏直接走底层 UDP 协议,甚至绕过标准的网络库。
- 硬编码 App:有些开发者在代码里写死了连接逻辑,或者使用了独立的网络框架(如早期的 Electron 版本),导致它们直接无视系统环境。
1.2 系统代理的盲区:协议限制
即便 App 听话,系统代理也只能处理 HTTP、HTTPS 和 SOCKS 流量。
如果你的 App 使用的是:
- ICMP(比如常用的
ping命令) - 特殊的 UDP 流量(如在线对战游戏、某些语音通话)
- 自定义的四层协议
这些流量在系统代理模式下,通通会直连,造成所谓的“漏流”。
第二章:TUN 模式——接管一切的“上帝视角”
为了解决上述问题,我们需要一种更强制、更底层的手段。这就是 TUN 模式。
2.1 虚拟网卡的魔力
TUN(Network TUNnel)是一种在操作系统内核中实现的虚拟网络设备。它不像真实的物理网卡(网口或 Wi-Fi)那样连接线缆,而是连接到一个具体的应用程序(即你的代理软件)。
当你开启 TUN 模式后,代理软件会执行以下操作:
- 创建网卡:在系统中创建一个名为
utunX的虚拟网络接口。 - 修改路由表:告诉 macOS 系统,“现在所有往外发的数据包,默认都得先经过这个虚拟网卡”。
- 流量拦截:当数据包进入虚拟网卡后,代理软件会立刻接管它们,并根据分流规则(Rule)决定是转发给远端代理服务器,还是直接从真实网卡发出去。
因为这是在网络层(三层)做的手脚,任何 App 只要想上网,就必须发出 IP 包,而只要发出 IP 包,就逃不过 TUN 模式的拦截。
2.2 TUN vs TAP:傻傻分不清楚?
在早期的网络教程中,你可能还听过 TAP 模式。简单区分一下:
- TUN (Layer 3):工作在 IP 层,处理的是 IP 包。它的效率更高,目前的代理软件(Clash, Surge, Stash)绝大多数使用的是 TUN 模式。
- TAP (Layer 2):工作在数据链路层,处理的是以太网帧。它能模拟完整的局域网环境,甚至可以处理广播包,但开销大,配置复杂。
对于日常翻墙和工作来说,TUN 模式已经绰绰有余。
2.3 技术深挖:gVisor 到底是什么?
在 Clash Verge 或 ClashX Pro 的高级设置里,你可能会看到“Stack: gVisor”的选项。
gVisor 是 Google 开源的一个用户态内核。在代理工具中,它被用来作为一种高性能的 TCP/IP 协议栈实现。
- System Stack:使用 macOS 自带的网络协议栈。稳定性好,但兼容性有时会有波动。
- gVisor Stack:完全在代理程序内部模拟了一套协议栈。优点是隔离性好,能解决很多奇怪的环路问题,建议在遇到网络不通时优先尝试此模式。
第三章:实战配置——各大 macOS 客户端大比拼
在 macOS 上开启 TUN 模式,通常需要安装一个助手程序(Helper)或授权系统扩展。
3.1 ClashX Pro:最稳健的选择
ClashX Pro 是目前 macOS 上最流行的 Clash 客户端之一。请注意,普通版 ClashX 不支持增强模式。
- 官方渠道:建议从 clashx.tech 获取,以保证版本最新且安全。
- 开启步骤:
- 启动 ClashX Pro。
- 点击顶部状态栏图标 -> 增强模式 (Enhanced Mode)。
- 系统会弹出窗口要求输入管理员密码,用于安装内核驱动程序。
- 开启后,你会发现 Terminal 里的
git clone瞬间起飞。
- 阿明点评:它的逻辑最简单,适合大多数不想折腾的用户。
3.2 Clash Verge Rev:极客首选
Verge Rev 是目前维护最活跃、界面最现代的开源 Clash 客户端。
- 开启步骤:
- 打开 Verge Rev。
- 点击左侧“设置” (Settings)。
- 找到“内核设置” (Kernel Settings)。
- 开启 TUN Mode 开关。
- 建议将 Stack 设置为
gvisor。 - 点击“立即应用”。
- 高级技巧:你可以在
Wintun设置里(虽然叫 Wintun,但在 Mac 上也是对应的配置)开启Strict Route,这能更强力地防止分流导致的环路。
3.3 Surge for Mac:代理界的“瑞士军刀”
Surge 的增强模式(Enhanced Mode)非常出名,不仅能接管流量,还能监控流量。
- 开启步骤:
- 在 Surge 界面,点击左下角的 Enhanced Mode。
- 按照提示在 macOS 系统设置 -> 隐私与安全性中,手动点击“允许”加载 Surge 网络扩展。
- 特色功能:Surge 可以显示每个连接是由哪个具体的进程(PID)发起的。当你发现流量异常时,这是一个极佳的排查工具。
3.4 Stash for Mac:简洁而不简单
Stash 虽然是以 iOS 版起家,但其 Mac 版的 TUN 模式表现也非常稳定。
- 开启步骤:
- 控制面板中直接勾选 TUN Mode。
- Stash 会在系统里显示一个类似于“VPN 连接”的图标。
- 适用人群:已经购买了 Stash iOS 版且习惯其配置格式的用户。
第四章:系统代理 vs TUN 模式 深度对比
| 维度 | 系统代理 (System Proxy) | TUN 模式 / 增强模式 |
|---|---|---|
| 工作原理 | 依靠 App 主动读取配置 (应用层) | 创建虚拟网卡拦截 IP 包 (网络层) |
| 接管范围 | 浏览器及主流应用 | 全局流量(终端、游戏、所有 App) |
| 协议支持 | 仅限 HTTP / HTTPS / SOCKS | 支持 TCP / UDP / ICMP 等全协议 |
| DNS 处理 | 依靠浏览器解析或手动配置 | 自动接管系统 DNS,防止泄露 |
| 性能损耗 | 几乎为零 | 略有 CPU 占用(协议栈封装) |
| 安装成本 | 无需额外安装 | 需安装助手程序或系统扩展 |
| 适用场景 | 轻度办公、网页浏览 | 开发、游戏、解决特定 App 离线 |
第五章:阿明的避坑指南——常见问题及解决
TUN 模式虽然强大,但它对网络环境的改变很大,初次使用难免遇到“翻车”。
5.1 开启后彻底断网,连百度都打不开
这 90% 是 DNS 劫持 失败导致的。
- 排查:检查代理软件的日志。如果看到大量的 DNS Timeout,说明系统 DNS 请求没能正确到达代理软件。
- 解决:
- 尝试在代理软件设置里,将 DNS 模式从
Fake-IP改为Real-IP(或者反之)。 - 检查是否有其他的 DNS 加速软件(如 AdGuard Home, MosDNS)在运行,如果有,请先关闭它们,防止“多重接管”。
- 尝试在代理软件设置里,将 DNS 模式从
5.2 无法访问内网资源(如 NAS、公司局域网)
默认情况下,TUN 模式可能会把内网请求也发往代理。
- 解决:在你的配置文件(YAML)中,找到
skip-proxy或bypass列表。确保里面包含了常见的私有网段:192.168.0.0/1610.0.0.0/8172.16.0.0/12localhost*.local(用于 macOS 的 Bonjour 发现)
5.3 与 VPN 软件的“爱恨情仇”
如果你由于工作原因必须开着 Cisco AnyConnect 或 FortiClient 这种公司 VPN,TUN 模式往往会失效,甚至导致 VPN 断开。
- 原理:两套软件都在试图修改系统的默认网关,抢夺路由权。
- 解决:先启动公司 VPN,等它连接成功并接管路由后,再开启代理软件的 TUN 模式。此时,TUN 模式会建立在 VPN 之上。
5.4 流量统计不准或双倍计费
有些用户发现,开启 TUN 后,代理软件里显示的流量翻倍了。
- 原因:这是显示逻辑问题。有些软件会同时统计物理网卡和虚拟网卡的流量。实际消耗的流量并没有翻倍。
第六章:你应该选择哪种模式?
作为一名老玩家,阿明建议你根据场景来选:
普通用户(只看网页、刷推):
- 保持 系统代理 即可。简单、省电、不折腾。
开发者(码农必备):
- 强烈建议 常驻 TUN 模式。不管是
npm install还是docker pull,那种丝滑感是用系统代理给不了的。
- 强烈建议 常驻 TUN 模式。不管是
海外游戏玩家:
- 必开 TUN 模式。由于游戏流量大多走 UDP,系统代理完全无法加速游戏连接,只有 TUN 模式能帮你降低延迟并成功登录。
追求隐私极致的用户:
- 开启 TUN 模式 + DNS 接管。这样可以彻底防止你的运营商通过 DNS 请求知道你访问了哪些网站。
第七章:关于安全性的一些碎碎念
开启 TUN 模式需要安装驱动和输入密码,这会让不少新同学感到担心。
阿明想说的是:
- 正规渠道:只要你从官方网站或知名的开源社区下载工具(如 ClashX Pro 官网、Verge Rev 的 GitHub),安全性是有保障的。
- 系统限制:macOS 的 Network Extension 框架已经把这类软件限制在了特定的沙盒里,它们无法随意窥探你的本地文件。
- 代码透明:开源工具的核心逻辑都是透明的,全球开发者都在盯着,不用担心会有后门。
结语
从“手动设代理”到“一键全局”,TUN 模式无疑是 macOS 上网体验的一次质变。它不仅仅是为了翻墙,更是为了让你的 Mac 真正成为一个网络无阻碍的工作站。
如果你还在忍受 Terminal 下载失败,或者为了游戏加速发愁,赶紧按照文中的步骤,去尝试一下 ClashX Pro 或 Surge 的增强模式吧。
我是阿明,专注于分享 macOS 上的网络进阶技巧。如果这篇文章对你有帮助,欢迎转发给身边同样在折腾 Mac 的朋友。咱们下期再见!
本文首发于 MacProxyHub,版权所有。