TUN 模式和系统代理,到底差在哪

同样的软件,开了「系统代理」有的程序能走,有的死活不走;换成 TUN 模式,全都走了,但电脑偶尔断网。这两种模式不是「高级版和基础版」的关系,它们作用的位置完全不同。

系统代理:改的是设置,不是网络

系统代理的本质是往系统里写一条配置(Windows 写注册表,macOS 写网络服务设置),然后指望各个程序自己去读。

问题就在「指望」两个字。真正会读这条配置的,主要是浏览器和一部分遵循系统设置的应用。以下这些基本不读:

  • 命令行工具(curl、git、npm、pip)
  • 大多数游戏客户端
  • 部分桌面软件的更新模块
  • 虚拟机、容器里的流量

所以才会出现「浏览器能上,命令行连不上」。

TUN:接管的是网卡

TUN 模式会创建一块虚拟网卡,然后修改路由表,把默认路由指向它。所有流量在离开电脑之前,先经过这块虚拟网卡,再由软件决定走哪条路。

因为是在网络层接管,程序根本不知道自己被接管了,所以不存在「认不认代理」的问题。

两种模式的取舍

系统代理

  • 好处:不碰路由表,不影响系统网络,出问题关掉就好
  • 坏处:覆盖不全,命令行和游戏经常漏
  • 适合:只用来上网、看视频

TUN 模式

  • 好处:全局接管,游戏、命令行、虚拟机一并覆盖
  • 坏处:改路由表,可能和虚拟化软件、公司 VPN 冲突;异常时表现是「整个网络不可用」
  • 适合:需要覆盖全部流量的场景

怎么确认某个程序到底走没走

最直接的办法:在程序里执行一次查询出口 IP 的操作,和不开加速时对比。

# 命令行场景
curl -s https://api.ipify.org

# 结果和平时不同 = 走了代理
# 结果相同 = 没走

图形界面程序没有命令行的话,用两条路验证:

  • 看软件自己的连接日志,里面会写明「直连」还是「走代理」;
  • 用系统监视器看这个进程有没有经过虚拟网卡(TUN 模式下,几乎所有流量都会显示经过该网卡)。

开 TUN 之后断网,怎么处理

按这个顺序查,别一上来就重装:

  1. 先把 TUN 关掉,确认基础网络恢复——这一步是为了区分「TUN 的锅」还是「本来就没网」。
  2. 看是否有其他虚拟网卡冲突:Hyper-V、VMware、VirtualBox、Docker 都会创建虚拟网卡,多个同时改路由表会打架。
  3. 看 DNS:TUN 接管路由但没接管 DNS 时,会出现「能 ping 通 IP,域名解析不了」。
  4. 看公司 VPN:企业 VPN 通常也有自己的路由表,两者不能同时接管默认路由。
💡 一句话判断:浏览器能用、命令行不能用 → 系统代理模式,覆盖不全;所有程序都不能用 → TUN 改坏了路由,先关掉恢复。

该选哪个

只刷网页看视频,系统代理足够;要玩游戏、跑命令行、用虚拟机,必须 TUN。

另外注意:TUN 和「更快」没有必然关系。它解决的是「覆盖范围」,不是「速度」。如果开了 TUN 觉得慢,那是线路或节点的问题,不是模式的问题。

延伸阅读:DNS 泄露怎么自测、全局模式和分流模式、节点延迟怎么测才准。