客户端进阶

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 设置是否被其他软件改动。