系统代理和 TUN 模式有什么区别?什么时候该开 TUN
系统代理只对读取系统设置的程序生效,终端和很多游戏不走;TUN 模式接管整台电脑的流量。本文讲清两者区别、适用场景,以及让终端走代理的环境变量设置方法。
一张表看懂区别
| 对比项 | 系统代理 | TUN 模式 |
|---|---|---|
| 原理 | 在系统网络设置里填一个代理地址 | 创建虚拟网卡,接管所有网络流量 |
| 浏览器 | ✅ 走代理 | ✅ 走代理 |
| 终端 / 命令行工具(Claude Code、Codex、git、npm 等) | ❌ 大多不走 | ✅ 走代理 |
| 游戏、部分桌面软件 | ❌ 很多不走 | ✅ 走代理 |
| 是否需要管理员权限 | 不需要 | 需要(首次授权) |
| 稳定性 | 简单,几乎不出问题 | 偶尔和 VPN、虚拟机、其他网络工具冲突 |
系统代理:只管「听话」的程序
开启系统代理后,客户端会在操作系统的网络设置里填上一个本地代理地址,比如 127.0.0.1 加客户端的端口。浏览器、大多数聊天软件会读取这个设置,于是走代理。
问题在于,很多程序根本不看这个设置:
- 终端里运行的命令行工具,比如 Claude Code、Codex CLI、git、npm、pip;
- 很多游戏和游戏平台;
- 一些自带网络模块的桌面软件。
这就是为什么「浏览器能打开 Claude,终端里的 Claude Code 却连不上」。
TUN 模式:整台电脑都接管
TUN 模式下,客户端会创建一块虚拟网卡,让系统把所有网络流量都交给它,再按规则决定哪些走代理、哪些直连。程序读不读系统设置都无所谓,流量都会经过客户端。
适合开 TUN 的情况:
- 用 Claude Code、Codex 等 AI 编程工具,或在终端里用 git、npm 访问境外资源;
- 玩需要走代理的游戏;
- 某个软件就是不走系统代理,又找不到设置代理的地方。
注意:TUN 模式仍然受规则控制。在规则模式下,国内网站照样直连。
不开 TUN,让终端走代理:设置环境变量
只想让某个终端窗口走代理,可以设置环境变量。先在客户端设置里找到本地代理端口(以客户端显示为准,比如 Clash Verge Rev 的默认混合端口是 7897),然后:
macOS / Linux(zsh、bash):
export https_proxy=http://127.0.0.1:7897 http_proxy=http://127.0.0.1:7897 all_proxy=socks5://127.0.0.1:7897
Windows PowerShell:
$env:HTTPS_PROXY="http://127.0.0.1:7897"; $env:HTTP_PROXY="http://127.0.0.1:7897"
把 7897 换成你客户端实际的端口。设置只对当前窗口有效,关闭窗口就失效。大多数命令行工具都会读取这些变量,但也有少数工具不读,这时还是得开 TUN。
怎么选
- 只用浏览器:系统代理就够了,最简单稳定。
- 用 Claude Code、Codex 等终端工具,偶尔用:设置环境变量,不影响其他程序。
- 经常用终端工具,或要让游戏、其他软件走代理:直接开 TUN 模式,一劳永逸。
- 开了 TUN 后出现网络异常:先关掉其他 VPN、加速器、虚拟机网络工具,它们容易和 TUN 冲突。
用 Claude Code 还要选对节点地区、注意丢包,见 Claude 用什么地区的节点。
常见问题
TUN 模式会不会更费流量?
不会因为模式本身多耗流量。是否走代理仍由规则决定:规则模式下国内网站照样直连。只是原来不走代理的程序(比如终端、游戏)现在会按规则走代理,这部分流量会计入机场流量。
开了 TUN 模式后国内网站变慢了怎么办?
检查客户端是否处在规则模式,以及 DNS 设置是否正常。TUN 模式配合全局模式会让所有流量都走代理,国内网站自然变慢。
为什么开 TUN 需要管理员权限?
TUN 模式要创建虚拟网卡、修改系统路由,这需要系统权限。Clash Verge Rev 等客户端通常要求安装「服务模式」或以管理员身份运行,第一次开启时会弹出授权提示。
只想让某一个终端窗口走代理,不想开 TUN,可以吗?
可以,在这个终端里设置代理环境变量即可,只影响当前窗口,关掉就失效。具体命令见正文。