01先搞清楚:系统代理抓不住谁
要理解 TUN 模式什么时候必须开,先得理解系统代理为什么不够用。系统代理的工作方式非常“君子”:它在操作系统里写一条设置,告诉程序“如果你要联网,请把请求发到这个地址”。是否遵守这条设置,完全取决于程序自己。
浏览器、大部分现代桌面软件都读这条设置,所以系统代理对它们有效。但下面这三类程序会直接忽略它:
这类程序联网前会先问操作系统:“当前有没有配置代理?”如果有,就按配置走。它们尊重系统设置,因此系统代理就能覆盖它们。
- 浏览器——Chrome、Edge、Firefox 默认都读系统代理
- 大多数现代桌面应用——遵循系统网络设置
- 部分下载工具——读取系统代理配置
这类程序不走操作系统的代理设置,直接从网络栈发出连接。它们不是“不听话”,而是压根就不问。系统代理对它们完全无效。
- 命令行工具——curl、git、npm、docker 拉取镜像
- 游戏客户端——多数游戏走独立网络栈,不读系统代理
- 部分桌面软件——某些流媒体客户端、下载器
- UWP 应用——Windows 商店应用受沙箱限制,可能绕过代理
系统代理是“通知制”——告诉程序该怎么走,程序可以选择不听。TUN 是“接管制”——在系统里创建一块虚拟网卡,所有流量必须先进这块网卡,程序想绕也绕不开。
02三种必须开 TUN 的场景
不是所有用户都需要 TUN。但如果你属于下面三种情况之一,系统代理就不够用了,必须开 TUN。
你用命令行工具拉取境外资源
这是最典型、也最容易被忽视的场景。开发者在终端里执行 git clone、npm install、docker pull 时,如果这些工具走的是直连链路,速度会非常慢甚至直接失败。
原因就在于:命令行工具默认不读系统代理设置。你可以在终端里手动设置环境变量(export https_proxy=...),但每次新开终端都要重新设置,而且不同工具的环境变量名还各不相同。
开 TUN 之后就省事了——命令行工具的流量和浏览器一样,自动经过虚拟网卡,不需要额外配置任何环境变量。
✓ 必须开你玩游戏,需要让游戏流量走代理
绝大多数游戏客户端不读系统代理。它们直接使用操作系统的网络栈,或者使用自己的网络库。如果你只开了系统代理,游戏流量仍然是直连的。
需要说明的是,游戏场景下 TUN 并不能“加速”,它的作用是让流量走代理链路。是否值得开取决于你的具体需求——延迟敏感的游戏开 TUN 可能因为链路绕远而增加延迟,需要实测判断。
但如果你确实需要让某个游戏的流量走代理(比如访问外服、下载更新),系统代理做不到,只有 TUN 能覆盖。
✓ 需要覆盖时开你发现某些程序在“偷偷直连”
这是最需要 TUN 的一类情况:你已经开了系统代理,浏览器也正常走代理,但某个具体程序仍然访问不了外网,或者出口 IP 显示的还是本地地址。
这说明这个程序绕过了系统代理。逐个排查哪个程序不听话很费时间,而且下次装个新软件可能又要重新排查一遍。TUN 模式一次性兜底,把所有程序都覆盖进去,不需要逐个判断谁听话谁不听话。
✓ 兜底方案03什么情况下不该开 TUN
TUN 不是“更高级的代理模式”,它只是覆盖面更广的一种方式。有几种情况下,开了反而更麻烦。
如果日常使用场景就是浏览器,系统代理完全够用。开 TUN 相当于为了覆盖你用不到的程序,承担了额外的权限和潜在稳定性成本。没有必要。
TUN 模式需要额外处理所有流量的路由,CPU 与内存占用比系统代理略高。在低配设备或移动端,如果系统代理能满足需求,优先用系统代理。
TUN 会接管系统全部流量。如果多个代理工具同时尝试接管 TUN 或系统代理,会互相抢流量,表现为时通时断。这种情况下先确定只保留一个常驻工具。
部分公司设备或受限系统不允许安装虚拟网卡驱动。这种情况下 TUN 根本装不上,只能退回系统代理方案。
04各平台开启路径与权限要求
如果你确定需要开 TUN,下面按平台列出开启路径与权限要求。各客户端的界面措辞可能略有差异,但核心逻辑一致。
在客户端的「设置」或「工具」页里找到 TUN 模式 开关,开启即可。首次开启会请求管理员权限,因为需要安装虚拟网卡驱动。
如果开关打不开,检查安装时是否勾选了 TUN 驱动组件。部分客户端把驱动安装与主程序安装分开,需要单独补装。
在客户端设置里开启 TUN 后,首次会提示需要安装网络扩展或授予 VPN 权限。进入「系统设置 → 隐私与安全性」允许即可。
macOS 对系统扩展管理较严,授权后通常需要重启客户端一次才能生效。如果反复提示授权失败,检查是否有旧版本残留的扩展配置。
Android 上不需要单独开 TUN,因为客户端本身就是通过 VpnService 隧道工作的。首次连接时系统会弹出「连接请求」,允许即可。
Android 的隧道机制与 TUN 思路一致,默认覆盖全部应用。如果只想代理部分应用,需要在客户端的「分应用代理」里做排除或指定。
05开启之后:三步验证真的生效了
TUN 开关拨上去了,不代表它真的在工作。授权被跳过、驱动没装好、旧版本冲突,都可能让开关看起来开着但实际没生效。下面三步逐一确认。
确认虚拟网卡是否已创建
Windows 在「网络连接」里应能看到一块名为 TUN 或类似名称的虚拟网卡;macOS 在「系统设置 → 网络」里能看到对应的 VPN 配置。如果完全找不到这块虚拟网卡,说明 TUN 没有真正启动。
✓ 虚拟网卡存在且状态为已连接用一个“不听话”的程序测试
这是最有说服力的验证方式。打开终端,执行一条访问境外地址的命令,或者在游戏客户端里查看连接状态。如果这个原本会直连的程序现在走了代理,说明 TUN 生效了。
✓ 命令行工具出口 IP 已改变确认没有影响正常上网
TUN 接管全部流量后,DNS 解析、内网访问、局域网设备发现都可能受影响。确认国内网站正常访问、内网 NAS 或打印机仍能连通,才算真正可用。如果出现问题,多半是 DNS 配置或路由规则需要调整。
✓ 国内站点正常 · 内网设备可达最常见的原因是授权环节被跳过了。Windows 重新以管理员身份启动客户端;macOS 检查隐私与安全性里的网络扩展授权;如果仍然不行,参考故障检修页的 TUN 相关章节。
06两个容易混淆的问题
开了 TUN 还要开系统代理吗
不需要,而且不建议同时开。TUN 已经接管了全部流量,再开系统代理会造成流量重复接管,轻则浪费资源,重则形成环路导致断网。两者选其一即可:需要覆盖所有程序就开 TUN,只用浏览器就开系统代理。
TUN 会不会让代理变快
不会。TUN 只是改变了流量的“入口方式”,让更多程序能被代理覆盖,它不改变代理链路本身的速度。如果你的节点慢,开不开 TUN 都是一样慢。TUN 解决的是“覆盖面”问题,不是“速度”问题。
系统代理是“通知”,TUN 是“接管”。通知能被忽略,接管不能。这就是为什么需要兜底的场景下,只有 TUN 能解决问题。
回到标题那个问题
TUN 模式在什么情况下必须开?答案可以收成一句话:当你需要代理的程序不读系统代理设置时。具体来说就是三种场景——命令行工具拉取境外资源、游戏客户端需要走代理、发现某些程序在偷偷直连。
如果你只在上网时用浏览器,系统代理就够了,不必为了用不到的程序承担额外的权限与稳定性成本。TUN 不是升级选项,而是兜底选项。需要兜底时开,不需要时关,这才是合理的用法。