核心结论
系统代理只是在操作系统里登记一个代理地址,浏览器等“愿意读取”的程序才会走代理;TUN 模式则创建一块虚拟网卡,在网络层接管几乎所有程序的流量。浏览器上网用系统代理就够了,终端工具、游戏、WSL 或不支持代理设置的软件需要开 TUN。
一句话区别
系统代理是“告示”,TUN 是“关卡”。 系统代理只是在操作系统里登记“请通过 127.0.0.1 的某个端口上网”,程序愿不愿意遵守由程序自己决定;TUN 模式则在系统中创建一块虚拟网卡并修改路由,所有程序的流量都会先经过它,程序想绕也绕不开。
所以:只用浏览器,开系统代理就够了;需要让终端、游戏、桌面应用或 WSL 走代理时,开 TUN。无论哪种方式,流量进入客户端后怎么分流,仍然由规则、全局、直连三种模式决定,参见 代理模式有什么区别。
对比表
| 对比项 | 系统代理 | TUN 模式 |
|---|---|---|
| 工作层级 | 应用层,靠程序主动读取设置 | 网络层,虚拟网卡接管路由 |
| 覆盖范围 | 浏览器及遵守系统设置的程序 | 几乎所有程序 |
| 支持 UDP | 通常不支持 | 支持 |
| 终端 / 命令行 | 大多不生效,需要另设环境变量 | 直接生效 |
| 权限要求 | 普通权限 | 通常需要管理员权限或服务组件 |
| 出问题的影响 | 个别程序不走代理 | 设置错误可能导致整机断网 |
| 适合人群 | 以浏览器为主的普通用户 | 开发者、游戏玩家、AI 编程用户 |
两种方式的工作原理
系统代理:登记一个地址
客户端启动后会在本机监听一个端口(常见为混合端口,同时支持 HTTP 与 SOCKS5)。打开“系统代理”开关,本质上就是把这个地址写进操作系统的代理设置里。浏览器发起请求前会读取这个设置,于是把请求交给本地端口,客户端再根据规则决定直连还是转发到节点。
问题在于,“读取系统代理”是程序自己的选择。浏览器、大部分即时通讯和办公软件会读,但很多命令行工具、开发环境和游戏根本不看这个设置,它们的流量会绕过客户端直接出去。
TUN:在路由层拦截
TUN 模式下,客户端创建一块虚拟网卡,并把系统的默认路由指向它。任何程序发出的数据包,都会先被路由到这块虚拟网卡,再由客户端读取、分流和转发。程序本身完全不需要知道代理的存在,因此覆盖面几乎是全部流量,包括 UDP。
为了让域名规则在 TUN 下正常工作,客户端通常还会接管 DNS 查询,常见做法是 Fake-IP 或 DNS 劫持。这也是 TUN 模式偶尔出现“某些网站打不开”的原因之一,相关排查见 Fake-IP 模式导致网站打不开。
怎么选:三步判断
- 你主要用浏览器吗? 是的话,系统代理足够,不必折腾 TUN;
- 你需要命令行或 WSL 走代理吗? 偶尔用可以只给终端设置环境变量;每天都用,直接开 TUN 更省心,也能避免某些子进程漏走直连;
- 你有游戏、语音或其他 UDP 需求吗? 有的话只能开 TUN,系统代理无法处理这类流量。
对于长时间使用 Claude Code、Codex 等 AI 编程工具的用户,推荐开 TUN 并固定节点:这样工具发起的所有请求都从同一出口出去,既减少“部分请求直连”导致的地区校验失败,也方便排查问题。
哪些情况必须开 TUN
以下几类场景,只开系统代理往往不起作用:
- 命令行工具:git、npm、pip、curl 以及 Claude Code、Codex CLI、Gemini CLI 等 AI 编程工具,大多不读取系统代理;
- WSL 与虚拟机:它们有自己的网络栈,不会继承 Windows 的系统代理设置;
- 游戏和语音软件:大量使用 UDP,系统代理通常无法转发;
- 自带网络模块的桌面软件:部分客户端软件硬编码直连,完全忽略系统设置;
- 需要统一出口的场景:比如希望 AI 工具的所有请求都从同一节点出去,避免部分请求直连暴露真实地区。
如果你只是偶尔在终端里用一下,也可以不开 TUN,改为给终端单独设置代理环境变量,下面会给出命令。
检查系统代理是否生效
Windows PowerShell:
# 查看当前用户的系统代理设置:ProxyEnable 为 1 表示已开启
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | Select-Object ProxyEnable, ProxyServer
# 查看 WinHTTP 代理(部分系统服务使用)
netsh winhttp show proxy
macOS:
# 查看系统代理配置,HTTPEnable / HTTPSEnable 为 1 表示已开启
scutil --proxy
如果显示已开启但某个软件仍然不走代理,说明它不读取系统代理,参考 系统代理不生效怎么办。
给终端单独设置代理
不开 TUN 时,可以为当前终端窗口设置环境变量,关闭窗口后自动失效。
Windows PowerShell:
$env:HTTP_PROXY = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
curl.exe -I https://www.google.com --max-time 10
macOS / Linux:
export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
curl -I https://www.google.com --max-time 10
7897 为 Clash Verge Rev 常见的默认混合端口,以你的客户端设置为准。能返回 HTTP 状态码即说明终端已走代理。在 Windows 上配合 WSL 使用 AI 编程工具的更多细节,可以看 Claude Code 网络环境指南。
开启 TUN 的步骤
以 Clash Verge Rev 为例,菜单名称以实际版本为准:
- 确认电脑上只运行了一个代理客户端,退出其他同类软件;
- 在“设置”中找到服务模式或类似选项,按提示安装服务组件(Windows 通常需要管理员授权);
- 打开“虚拟网卡模式”或“TUN 模式”开关;
- 保持代理模式为“规则”,此时系统代理开关可开可关;
- 在终端中直接执行
curl -I https://www.google.com(Windows 用curl.exe),不设置任何环境变量也能返回状态码,即表示 TUN 已生效。
更详细的图文步骤见 Clash Verge Rev TUN 模式设置。
确认 TUN 虚拟网卡已创建
Windows PowerShell:
# 列出网卡,TUN 开启后会多出一块由客户端创建的虚拟网卡
Get-NetAdapter | Select-Object Name, InterfaceDescription, Status
macOS:
# TUN 开启后会出现新的 utun 接口
ifconfig | grep utun
netstat -rn | head -20
虚拟网卡的名称因客户端和内核而异,只要开关前后对比多出一块状态为 Up 的虚拟网卡即可。
常见错误与注意事项
- 同时运行两个代理客户端:两个 TUN 或两个系统代理互相覆盖,轻则部分程序失效,重则整机断网;
- 开了 TUN 却切到全局模式:所有流量包括国内都会走节点,速度变慢、流量翻倍;
- 忽略 DNS 设置:TUN 通常会接管 DNS,若配置不当可能导致网站打不开,可参考 DNS 问题排查;
- 公司或校园电脑强开 TUN:部分受管设备禁止安装虚拟网卡驱动,请遵守所在单位的网络管理规定;
- 忘记关闭:退出客户端前先关闭 TUN,个别版本异常退出后可能残留路由,重启电脑即可恢复。
请在遵守当地法律法规与相关服务条款的前提下使用网络工具。
常见问题
系统代理和 TUN 可以同时开吗?
可以,同一个客户端里同时开启一般不会冲突,流量会优先被 TUN 接管。要避免的是同时运行两个不同的代理客户端,它们会争抢系统代理设置和路由表。
为什么浏览器能上外网,终端里的 git、npm 却不行?
多数命令行程序不读取系统代理,而是读取 HTTP_PROXY、HTTPS_PROXY 等环境变量。可以在终端里设置这些变量,或者直接开启 TUN 模式。
开启 TUN 模式需要管理员权限吗?
通常需要。创建虚拟网卡和修改路由表属于系统级操作,Windows 上一般要以管理员身份运行或安装客户端的服务组件,macOS 上会要求授权,具体以客户端版本说明为准。
TUN 模式会更耗流量或更慢吗?
流量消耗取决于代理模式和规则,而不是 TUN 本身。TUN 模式会让更多程序进入分流判断,只要保持规则模式,国内流量依然直连。
开了 TUN 之后完全没网怎么办?
常见原因是同时运行了多个代理软件、DNS 劫持设置异常或虚拟网卡驱动未正确安装。先关闭 TUN 恢复网络,再按客户端没网的排查步骤逐项检查。
本文最后更新于 。网络服务与 AI 平台政策变化较快,如发现信息过时,欢迎通过联系我们反馈。