日常只用浏览器,开系统代理就够了;需要让命令行工具、游戏或不读取系统代理的软件走代理时,开 TUN 模式。Claude Code、Codex 等 CLI 工具通常不读取系统代理设置,最省事的做法是开启 TUN,或者在终端里单独设置代理环境变量。
目录
两者的区别在于「谁来决定走不走代理」。系统代理是在系统设置里登记一个代理地址,软件自己决定是否读取;TUN 模式是在系统里创建一张虚拟网卡,把流量从网络层面接过来,不管软件是否配合。
所以日常只用浏览器、微信这类会读取系统代理的软件,开系统代理就够了;如果命令行工具、游戏或某些桌面软件「开了代理还是连不上」,就需要开 TUN 模式。
两者对比
| 对比项 | 系统代理 | TUN 模式 |
|---|---|---|
| 工作方式 | 在系统设置中登记 HTTP 代理地址 | 创建虚拟网卡,接管网络流量 |
| 覆盖范围 | 只对读取系统代理设置的软件生效 | 几乎所有软件的流量 |
| 需要权限 | 普通权限即可 | 通常需要管理员权限或服务模式 |
| UDP 流量 | 基本不涉及 | 可以接管 UDP |
| 命令行工具 | 多数不生效 | 通常直接生效 |
| 兼容性问题 | 少 | 偶尔与其他 VPN、虚拟机网卡冲突 |
| 适合场景 | 浏览器日常使用 | CLI 工具、游戏、不支持代理设置的软件 |
CLI 工具为什么常需要 TUN
在终端中运行的 Claude Code、Codex CLI、git、npm 等程序,通常不会读取 Windows 或 macOS 的系统代理设置,而是看终端里的代理环境变量。于是会出现浏览器能打开 claude.ai,终端里却连接超时的情况。
解决方法有两种:
- 开启 TUN 模式:一次设置,所有终端和程序都生效,最省事。Clash Verge Rev 的设置方法见 TUN 模式教程。
- 设置环境变量:只对当前终端会话生效,适合不想开 TUN 或没有管理员权限的情况。
bash 或 zsh 中:
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
PowerShell 中:
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
示例中的 7890 只是常见端口,不同客户端和版本的默认值不同,以你客户端设置里显示的代理端口为准。关闭终端后环境变量失效,需要重新设置。Claude Code 和 Codex 的具体网络配置可分别参考 Claude Code 网络设置与 Codex CLI 代理设置。
该开哪个
- 只用浏览器访问网页和 AI 网页版:系统代理。
- 使用 Claude Code、Codex、Gemini CLI 等命令行工具:TUN,或系统代理加终端环境变量。
- 玩游戏、使用语音软件:TUN。
- 公司电脑没有管理员权限:系统代理加环境变量。
- 电脑上同时装了其他 VPN 或虚拟机:先用系统代理,需要 TUN 时注意关闭其他虚拟网卡。
总结
- 系统代理靠软件自觉读取,TUN 从网络层接管流量。
- 浏览器用系统代理即可,CLI 工具、游戏通常需要 TUN。
- 不开 TUN 时,可以在终端设置 HTTP_PROXY 和 HTTPS_PROXY,端口以客户端设置为准。
- 开启 TUN 需要管理员权限,分流仍由客户端规则决定。
常见问题
系统代理和 TUN 可以同时开吗?
可以,多数情况下也不会冲突。开启 TUN 后,流量已经被虚拟网卡接管,系统代理是否开启影响不大。如果出现无法上网,先关闭其中一个排查。
开了 TUN 之后国内网站会变慢吗?
正常情况下不会。TUN 只负责接管流量,是否走代理仍由客户端的分流规则决定,国内域名按规则直连。如果国内网站明显变慢,检查是否误选了全局模式,或 DNS 设置是否正确。
开 TUN 为什么需要管理员权限?
TUN 需要在系统中创建虚拟网卡并修改路由表,这属于系统级操作。Clash Verge Rev 通常会提示以管理员身份运行或安装服务模式,按提示操作即可。