TUN 模式和系统代理有什么区别
系统代理是「贴出告示、愿者上钩」,只有遵循系统设置的应用才走代理;TUN 模式通过虚拟网卡在网络层接管全部流量。本文用对比表讲清两者差异、选择场景和三类常见坑。
几乎所有桌面客户端的设置页里都并排放着两个开关——「系统代理」和「TUN 模式」。不少人要么全打开图个安心,要么开错了那个,然后困惑「为什么浏览器能翻、终端里 git 还是超时」。这两个开关对应两种完全不同的流量接管方式,搞清原理后,什么时候开哪个就一目了然了。
系统代理:贴出告示,愿者上钩
客户端在本机开一个本地代理端口(常见如 7897、10808),然后把「代理服务器在这里」写进操作系统的网络设置。这相当于贴了一张告示:只有主动查看并遵守告示的应用才会走代理。浏览器和多数正规桌面软件会遵循;命令行工具、部分游戏、一些老旧程序则完全无视这张告示,流量照旧直连。
它的优点是轻量:不需要特殊权限,不改动网络栈,出问题影响面小。
TUN 模式:在网络层直接接管
TUN 模式让客户端创建一块虚拟网卡,并调整系统路由表,把设备上所有 IP 流量先引到这块网卡,再交由内核按规则处理。应用完全无感知,也无需支持任何代理设置——流量在网络层就被截住了。Android 客户端点连接时弹出的「VPN 连接请求」,本质就是同一套机制。
代价是权限与复杂度:桌面端需要管理员权限或安装系统服务,DNS 也通常改由客户端统一处理。
对比表
| 维度 | 系统代理 | TUN 模式 |
|---|---|---|
| 覆盖范围 | 仅遵循系统代理设置的应用 | 全部应用与进程 |
| 权限要求 | 普通用户权限 | 管理员权限、系统服务或 VPN 授权 |
| 性能开销 | 低 | 略高,多一层网络栈处理 |
| DNS 处理 | 应用各自解析或交由代理远端 | 通常由客户端 DNS 模块统一接管 |
| 典型问题 | 命令行等软件不走代理 | 与安全软件、其他 VPN 冲突 |
什么时候用哪个
- 只在浏览器上网:系统代理足够,简单稳定;
- 终端开发(git、npm、pip 等):命令行工具普遍不读系统代理,开 TUN,或者给具体工具单独配置代理环境变量;
- 游戏、不读系统设置的应用:TUN 是唯一省心的选择;
- 排查「部分软件不走代理」:先确认该软件是否遵循系统代理,不遵循就切 TUN 验证。
各客户端的开关位置略有差异,Clash 系桌面端的具体操作可对照Clash Verge Rev 教程和Mihomo Party 新手设置教程。
三类常见坑
- 权限问题:TUN 打不开的头号原因是系统服务没装好。Windows 上用管理员身份运行客户端重新安装服务;macOS 需要在弹窗中输入密码授权;
- 安全软件冲突:杀毒软件、防火墙和企业安全组件可能拦截虚拟网卡驱动或篡改路由,典型表现是 TUN 一开就全网断流。把客户端加入白名单,或临时退出安全软件定位问题;
- DNS 处理差异:TUN 下客户端通常用 fake-ip 等方式接管 DNS,与本机手动设置的 DNS、公司网络下发的 DNS 叠加时,容易出现「连接正常但网页打不开」或解析指向异常。原理与排查分别见DNS 报错与网页打不开的关系和Clash 连接成功但网页打不开怎么办。
最后提醒:多个客户端或 VPN 同时开 TUN 必然互相打架,切换客户端前先把旧的彻底退出。
常见问题
系统代理和 TUN 模式可以同时开吗?
多数现代客户端做了防回环处理,同时开一般不会出错,但没有必要。排查问题时更建议一次只开一个,行为更容易判断。
为什么开了系统代理,终端里的 git 和 npm 还是超时?
命令行工具大多不读取系统代理设置。要么开启 TUN 模式在网络层接管,要么为工具单独配置代理环境变量,两种办法任选其一。
开 TUN 后反而全部断网了,怎么回事?
常见于系统服务未装好、安全软件拦截虚拟网卡或 DNS 配置冲突。先确认以管理员权限安装了服务,再检查杀毒软件是否拦截,最后看客户端的 DNS 设置是否被其他软件改动。