目录
科普原理

系统代理、全局模式与 TUN 模式:三种接管网络的方式

为什么设置了代理,命令行和游戏却不走?系统代理靠程序自觉,TUN 模式用虚拟网卡在网络层接管全部流量,全局与分流决定接管之后哪些走加密通道。配时序图逐步对比。

最后更新:

让设备上的流量走加密通道,有两种「接管」方式:系统代理是在系统设置里登记一个代理地址,由各个程序自己决定是否遵守,浏览器通常会、命令行和游戏常常不会;TUN 模式是创建一块虚拟网卡,在网络层把所有程序的流量都接过来,不依赖程序配合。接管之后,再由全局或分流规则决定哪些流量走加密通道、哪些直连。

插图:左边大楼门口有指示牌,浏览器等程序按指示走代理柜台,游戏和命令行从侧门直接出去;右边只剩一个大门,门卫把所有程序分到隧道和本地小镇两条路
  1. ① 系统代理在系统里登记一个代理地址
  2. ② 遵守设置的程序浏览器等按指示走代理
  3. ③ 不读设置的程序游戏、命令行从侧门直接出去
  4. ④ TUN 模式只剩一个大门,所有流量都要经过
  5. ⑤ 海外服务按规则送进加密通道
  6. ⑥ 本地网站按规则直连,不绕路

系统代理:只有遵守设置的程序才走

各操作系统都有「代理设置」:Windows 在「设置 → 网络和 Internet → 代理」,macOS 在「系统设置 → 网络 → 详细信息 → 代理」。客户端开启系统代理时,会在本机启动一个代理服务,并把它的端口登记到这里。

问题在于,这只是一份「通知」,是否遵守由程序自己决定:

程序是否遵守系统代理
Chrome、Edge、Safari 等浏览器通常遵守
大部分图形界面 App部分遵守,取决于开发者
命令行工具(git、curl、npm、pip 等)通常不遵守,需要单独设置环境变量
游戏、部分聊天和视频软件常常不遵守,直接联网

所以经常会遇到「浏览器能打开,但终端里 git clone 还是超时」「游戏还是连不上」的情况。

TUN 模式:在网络层接管全部流量

TUN 是操作系统提供的一种虚拟网卡,工作在网络层,收发的是 IP 数据包。客户端创建它之后,把系统的默认路由指向它,于是:

  • 任何程序发出的数据包,无论它读不读代理设置,都会先被系统交给这块虚拟网卡;
  • 客户端从虚拟网卡里读出数据包,按规则决定走加密通道还是直连;
  • 程序本身完全不需要知道这件事。

除了接管 TCP,TUN 模式还能接管 UDP 和 DNS 查询。为了避免域名查询绕过加密通道(即「DNS 泄漏」),客户端通常会把发往 53 端口的 DNS 查询也截下来,在通道内完成解析。

全局与分流:接管之后「哪些走加密通道」

不管用哪种方式接管,接下来都要决定流量的去向:

模式做法适合
全局所有流量都走加密通道临时排查问题;需要整机都从海外出口访问
分流按规则逐条判断:本地网站直连、海外服务走加密通道、广告可拒绝日常使用:本地网站快,海外服务稳定
直连全部不走加密通道临时关闭,不想断开连接时

分流规则可以按域名、IP 段、国家等匹配,规则类型、生效顺序和写法见 分流规则详解。

时序图:两种接管方式逐步对比

任意程序 操作系统 客户端 加密服务器 网站 系统代理:程序主动交给本地代理 读取代理设置 1 本地代理的端口 2 把请求交给客户端 3 加密转发 4 访问网站 5 不读代理设置的程序:照样直连 直接连接网站(绕过代理) 6 TUN 模式:系统把所有流量交给虚拟网卡 照常发出数据包 7 路由:走虚拟网卡 8 按分流规则判断 9 海外:加密转发 10 本地:直连 11
粗线表示加密转发的流量。TUN 模式不依赖程序配合,所有流量都先到客户端,再按分流规则决定去向。
步骤发生了什么
①–②系统代理模式下,程序先读取系统的代理设置,得到本地代理(客户端)的端口
③程序把请求交给客户端
④–⑤客户端加密转发到服务器,由服务器访问网站
⑥不读代理设置的程序(命令行、游戏)直接连接网站,完全绕过代理,这就是系统代理的「漏网之鱼」
⑦TUN 模式下,程序照常发出数据包,不需要任何设置
⑧系统查路由表,发现默认路由指向虚拟网卡,于是把数据包交给它,客户端从这里读出数据包
⑨客户端按分流规则判断这个数据包该去哪里
⑩海外服务:加密后发往服务器
⑪本地网站:从真实网卡直接发出,不绕路

为什么第一次使用要授权网络配置

虚拟网卡会改变整台设备的网络走向,所以各操作系统都要求用户亲自同意,也对它的权限做了严格限制:

平台系统提供的机制第一次连接时你会看到
iPhone / iPadNetwork Extension(隧道扩展)「想添加网络配置」弹窗,需要输入锁屏密码或面容确认
Mac系统扩展 + Network Extension先允许系统扩展,再允许添加网络配置
AndroidVpnService「网络连接请求」弹窗
WindowsTUN 虚拟网卡驱动用户账户控制(管理员权限)提示

穿山甲在这四个平台上都使用 TUN 方式接管流量,并默认开启「智能分流」,所以命令行、游戏等各种程序都不需要单独设置。各平台的授权步骤见对应的安装教程,例如 iPhone / iPad 安装、Mac 安装。

相关阅读

常见问题

为什么终端里的 git、curl 不走代理?

系统代理只对主动读取这个设置的程序有效,很多命令行工具默认不读,需要单独设置环境变量(如 HTTPS_PROXY)。改用 TUN 模式后不需要任何设置,命令行流量也会被虚拟网卡接管。

TUN 模式会影响局域网设备,比如打印机和 NAS 吗?

正常不会。分流规则里一般都有「局域网直连」,访问家里的路由器、打印机、NAS 时不经过加密通道。穿山甲把这条规则设为强制,不可关闭。

开了 TUN 模式,为什么系统设置里多了一个网络连接或网络配置?

那就是虚拟网卡本身。操作系统把它当作一个网络连接来管理,所以第一次使用时需要你授权添加,之后在系统设置里也能看到它的连接状态。

还没有安装穿山甲?

支持 iPhone / iPad、Mac、Windows 与 Android。新用户注册即送 7 天会员体验。

下载客户端
← 全部文章