梯子实验室tizilab.net

梯子TUN模式是什么意思:哪些程序不走系统代理

简短回答

梯子 TUN 模式是让客户端建一块虚拟网卡,再改系统路由,把本机发出的 TCP 和 UDP 连接都导进这块网卡交给内核处理。系统代理只是在系统里登记一个本地端口,程序自己愿意读才会走代理;TUN 在程序发出连接之后才接手,命令行工具、游戏这些对代理设置不理不睬的程序,连接同样会落进内核。代价是要管理员权限或系统服务,还可能和 DNS、其他 VPN 起冲突。

背景:这个问题从哪来

客户端装好、节点能测出延迟、浏览器也能打开境外网站,可终端里的 git clone 还在超时,某个游戏的联机也照旧走本地网络。这时去客户端设置里翻,会看到“系统代理”旁边还有一个叫 Tun、虚拟网卡或增强模式的开关,旁边往往还写着要先装服务。

这类情况的共同点是,出问题的程序没有经过客户端。本文用一组对照讲清楚两种接管方式各能管到哪些程序,再列出常见客户端的 TUN 开关在哪、要什么权限。系统代理本身怎么登记端口,只在必要处带过。

两种接管方式管到的范围差多少

Clash Verge Rev 的文档把这两种方式归为“入站”,也就是本机程序的连接怎样到达本地的代理内核。两者的差别整理成下表。

对比项 系统代理 TUN 模式
做法 在注册表、系统设置等约定位置写入本地端口 建一块虚拟网卡,改系统路由把连接导进去
程序要不要配合 要,程序自己去读这项设置 不用,接管发生在程序发出连接之后
UDP 文档写明代理不了 TCP 和 UDP 都接管
权限 普通用户即可 需要管理员或 root,或者由系统服务代办
常见副作用 客户端异常退出后系统代理没撤,导致断网 改系统 DNS、和其他 VPN 或多余网卡冲突

mihomo 文档里对应的是 tun 配置段,auto-route 负责把全局流量路由进虚拟网卡,dns-hijack 把 DNS 请求交给内核处理。sing-box 的 Tun 入站也有 auto_route 字段,作用相同。

这两个开关只决定连接进不进客户端。进来以后走节点还是直连,由规则、全局、直连三种模式决定,这部分见 全局模式和规则模式的区别。

哪些程序会绕开系统代理

下面几类都能在官方文档里找到依据。

  1. 命令行工具。 curl 的文档写的是运行前检查 http_proxy、https_proxy、ALL_PROXY 等环境变量,没有提到读取系统代理设置。git 的 http.proxy 说明也指向这几个环境变量。我们的判断是,只开系统代理、不设环境变量时,这两个工具会直接连目标地址。
  2. 用 WinHTTP 写的 Windows 程序。 微软文档说明 WinHTTP 的代理按会话指定,程序要和 IE、WinINet 用同一套设置,得自己调用接口去取;以系统服务身份运行的程序,还要先加载用户的注册表设置才取得到。后台更新程序多半属于这一类,是否读取取决于开发者怎么写。
  3. 商店版应用。 Clash Verge Rev 的 macOS 常见问题写明,从 App Store 装的 Telegram 默认对系统代理置之不理。Windows 常见问题提到,UWP 应用(例如微软商店)因为沙盒限制访问不了本机回环地址,需要用客户端的 UWP 工具解除。
  4. 游戏的 UDP 数据。 系统代理不转发 UDP,游戏对战的数据包即使在程序读了代理设置的情况下也不会进客户端。
  5. 安卓上的应用。 Android 文档在 VpnService.Builder 的 setHttpProxy 说明里写到,这个 HTTP 代理只是建议,有些应用会忽略它。

同一个程序的两次对照

对照的做法是只改一个变量。选一台 Windows 电脑,客户端用规则模式,先只开系统代理,再关掉系统代理只开 TUN,两次都执行同一组动作。下表的“预期”按上面的文档推出,本站没有留存这组对照的截图记录。

动作 只开系统代理(预期) 只开 TUN(预期)
浏览器打开境外网站 能打开,连接页出现这条记录 能打开,连接页出现这条记录
PowerShell 里运行 curl.exe -I https://www.google.com 超时或报错,连接页没有记录 返回响应头,连接页出现 curl 的记录
git clone 一个境外仓库 和没开客户端时一样 连接页出现 git 的记录
游戏联机的 UDP 数据 不进客户端 连接页出现 UDP 记录

第二、三行在只开系统代理时结果不同的,说明这个程序不读系统代理。这张表说明不了节点质量,程序能连上只代表连接进了客户端,速度和稳定性要另外测。

各客户端的 TUN 开关在哪

开关名称取自本站的客户端页和教程截图,权限一栏来自各自的官方说明。

客户端 开关位置和名称 权限和前提
Clash Verge Rev 设置页“系统设置”分组第一行,Tun(虚拟网卡)模式 先安装服务;文档写明服务模式的用途是让非管理员也能启动 TUN
Clash Party 左栏“虚拟网卡”卡片 不需要另装服务模式;macOS 上报错时用“手动授权内核”
FlClash(电脑) 仪表盘右侧“虚拟网卡”开关 Windows 第一次开启会申请安装 Helper 服务,用户账户控制窗口选“是”
NekoRay 资料未写(客户端页只记录它有 TUN 模式) 资料未写
Throne 资料未写 Linux 上创建 TUN 需要 root
Surge(Mac) 总览页“增强模式” 5.8.0 起由 Network Extension 实现,按系统弹窗允许
OpenClash 插件内的 TUN 模式 依赖 kmod-tun

按 Clash Verge Rev 的 Windows 常见问题,服务装不上导致闪退的一个原因是 360、金山毒霸等杀毒软件拦了安装,文档给的办法是不用这类杀毒软件。完整步骤见 Clash Verge Rev 的 Windows 教程,其他 Windows 客户端列在 电脑梯子软件页。

开 TUN 以后常见的副作用

  • 系统 DNS 被改。 macOS 常见问题说明,Tun 劫持不到发往局域网地址的 DNS 请求,所以 Clash Verge Rev 开 Tun 时会把系统 DNS 换成一个公共 DNS 地址,关掉 Tun 再改回原值。mihomo 文档也写到,Windows 和 macOS 默认无法自动劫持发往局域网的 DNS。
  • 网络整体异常。 Windows 常见问题把原因归到多块网卡或网段和配置冲突,办法是删掉多余的网卡。
  • 和别的 VPN 抢位置。 按 Android 文档,一台手机上 VPN 连接只能存在一条,后建的会让先前那条的接口失效。电脑上同时开公司 VPN 和梯子的 TUN,我们推测也会在路由上互相覆盖,本站没有测过。
  • 个别程序异常。 sing-box 文档在 strict_route 的说明里提到,Windows 上开启后在某些情况下可能让 VirtualBox 等程序工作不正常。

自己怎么验证

  1. 看网卡。 开 TUN 前后各运行一次 ipconfig(Windows)或 ifconfig(macOS)。开启后应多出一块网卡,macOS 上名字以 utun 开头,这是 mihomo 文档对 macOS 设备名的要求。
  2. 看路由。 Windows 运行 route print,开启 TUN 后默认路由应指向这块虚拟网卡。
  3. 看连接页。 关掉系统代理,只留 TUN,用 curl 访问一个境外地址,客户端连接页出现这条记录并带进程名,就说明接管生效。
  4. 排查时一次只开一项。 两项都开着时看不出连接是从哪条路进来的。节点全部超时的情况另见 全部节点超时的对照排查。

这篇没有覆盖的

本文的对照表是按官方文档推出的预期,本站没有做过留档的实测,不同客户端和内核版本的结果可能不同。iOS 上的客户端、路由器上的透明代理、Linux 的 auto-redirect 都没有展开。表里的开关名称会随客户端改版变化,以当前版本的界面为准。更多客户端的下载地址和版本记录见 梯子下载页。

本文引用的来源10 条 · 在新窗口打开

  1. Clash Verge Rev 文档:名词解释(系统代理、Tun 模式、服务模式)clashverge.dev
  2. Clash Verge Rev 文档:Windows 常见问题clashverge.dev
  3. Clash Verge Rev 文档:macOS 常见问题clashverge.dev
  4. mihomo 文档:TUN 配置wiki.metacubex.one
  5. sing-box 文档:Tun 入站sing-box.sagernet.org
  6. Android 开发者文档:VpnServicedeveloper.android.com
  7. Android 开发者文档:VpnService.Builder(setHttpProxy)developer.android.com
  8. Microsoft Learn:在 WinHTTP 中使用 WinINet 代理设置learn.microsoft.com
  9. Git 文档:git-config(http.proxy)git-scm.com
  10. Everything curl:代理环境变量everything.curl.dev

常见问题4 题

TUN 模式和系统代理可以同时开吗

可以同时开。系统代理把读取它的程序直接引到本地端口,其余连接经虚拟网卡进入内核,两条路最后都交给同一个内核按规则分流。排查问题时建议一次只开一项,这样才分得清是哪条路出的问题。

开了 TUN 以后还要选规则模式或全局模式吗

要选。TUN 和系统代理只管连接怎么进入客户端,出口选节点还是直连,要看当前是哪一种代理模式,两组开关互不替代。开着 TUN 用规则模式,国内网站仍然会按规则直连。

手机上的梯子 App 有 TUN 开关吗

安卓客户端大多直接用系统的 VpnService 建虚拟网卡,本站记录的 v2rayNG 默认就是这样接管流量,FlClash 安卓版的仪表盘也只有一张 VPN 卡片。所以手机上一般没有“系统代理和 TUN 二选一”这一项,首次连上前系统会先弹窗请你确认。

退出客户端后 TUN 的服务还在运行正常吗

在 Clash Verge Rev 上属于设计如此。官方文档写明服务进程独立于主程序,退出客户端后会留在后台,官方的说法是它不影响系统。本站没有核对各版本卸载服务的入口。

本文最后一次核对来源是 。软件界面、服务政策和法规会变,发现和现在不一致的地方,请按更正与反馈里的方法告诉我们。

梯子和VPN的区别:六个能自己观察到的不同

梯子和 VPN 的区别,本文拆成六个能在自己设备上看到的项目,包括装什么、要不要订阅链接、怎么分流、状态栏图标、协议名和服务器归谁。

新手入门更新约 7 分钟