机场推荐网

某个 App 不走代理,系统代理和 TUN 模式差在哪

某个 App 不走代理,多半是它不读系统代理。系统代理只在系统里登记一个地址,读不读由程序自己定,也带不了 UDP;TUN 模式建一张虚拟网卡,所有程序的流量都要从它经过。

更新于 7 分钟读完作者 阿量参考了 14 份一手资料

电脑上的代理客户端有两种接管流量的办法。系统代理是在操作系统里登记一个本机地址和端口,Clash Verge Rev 的名词解释说得明白,程序自发去读这份信息,再把请求交过来,而且它不能代理 UDP 流量。TUN 是客户端建一张虚拟网卡,改系统路由,把所有流量引到这张网卡上,TCP 和 UDP 一起拦下,程序这边不需要任何配置。

某个 App 不走代理,头一个要问的就是它读不读系统代理。浏览器几乎都读,别的程序各有各的脾气。Clash Verge Rev 在首页给 TUN 写的说明也是这个意思,它适用于特殊不遵循系统代理设置的应用。

先去连接页找它的进程名

动设置之前,先确认它到底有没有进代理。Clash Verge Rev 左侧的连接页,列出当前每一条连接的主机、规则、进程和链路。让那个 App 重新联一次网,比如刷新一下,再到连接页里找它的进程名。

找不到它,说明它的流量根本没进内核,下面按类型对号入座。找到了,规则和链路那两栏写着 DIRECT,说明它读了代理,只是分流规则把它放去了直连。这种情况切到全局模式试一次就能确认,处理办法写在连不上的排查顺序讲个别网站的那一节。

按 App 的类型对号入座

App 类型 读不读系统代理 让它走代理的办法
浏览器 开系统代理,装了代理扩展的看扩展设置
命令行工具 多数不读,认环境变量 给终端设环境变量,或开 TUN
游戏、语音通话 常常不读,数据多走 UDP 开 TUN
微软商店里的应用 读了也连不上本机端口 用 UWP 工具解除限制,或开 TUN
Windows 更新等系统服务 读的是另一份 WinHTTP 设置 单独设 WinHTTP,或开 TUN
自带代理选项的软件 看它自己的设置 在软件里填本机地址和端口

命令行工具认的是环境变量

curl、pip 这类工具不看系统代理,看的是终端里的环境变量。Clash Verge Rev 能替你生成这几行,先在设置页的 Verge 基础设置里选好复制环境变量类型,有 Bash、CMD、PowerShell 等几种,再右键任务栏的托盘图标,选复制环境变量,粘进终端执行。v2rayN 的托盘右键菜单里也有一项,叫复制终端代理命令至剪贴板。

手动写也不难,PowerShell 里是下面两行,端口换成你客户端的。

$env:HTTP_PROXY = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"

环境变量只在当前这个终端窗口里有效,关掉就没了。Git、npm 这类工具另有自己的代理配置项,要长期生效就在它们自己的配置里写。

游戏和语音,交给 TUN

游戏和语音通话的数据大量走 UDP,系统代理带不了,很多游戏也压根不读系统代理,只能开 TUN。Clash Verge Rev 的开关在设置页系统设置分组的虚拟网卡模式,界面提示写着 TUN 模式需要安装服务模式或管理员模式,旁边有安装服务的按钮。它的说明还写了一句,启用时无须打开系统代理。v2rayN 7.24.9 的开关在主界面底部状态栏,叫启用 Tun。

微软商店的应用被沙盒挡着

从微软商店装的应用有沙盒,读了系统代理也够不着本机的代理端口。Clash Verge Rev 设置页里 Clash 设置那一组有个 UWP 工具,说明写着 Windows 8 开始限制 UWP 应用直接访问本地主机的网络服务,用这个工具可以绕过。点开后勾选要走代理的应用,保存即可。v2rayN 的设置菜单里也有一项专门解除 UWP 应用的回环限制,作用相同。开 TUN 也能绕开这道限制。

Windows 更新读的是 WinHTTP

Windows 里有两份代理设置。你在设置里看到的、客户端写的是一份,系统服务常用的 WinHTTP 是另一份。微软的文档写明,Windows 更新检查更新时要用 WinHTTP,自动更新服务只认用 netsh 命令配置的代理或者网络里的自动发现。以管理员身份运行命令提示符,下面三条分别是查看、从系统代理导入、恢复直连。

netsh winhttp show proxy
netsh winhttp import proxy source=ie
netsh winhttp reset proxy

导入以后要记得这件事。客户端一关,走 WinHTTP 的服务就连不上网了,用完执行第三条恢复。只是偶尔需要,开 TUN 更省心。

自带代理选项的软件,在软件里填

Clash Verge Rev 在 macOS 常见问题里拿 Telegram 举过例子,App Store 版的它不理会系统代理,文档建议在应用自己的设置里填代理,端口用 7897,也可以换成官网下载的版本。很多软件的设置里都有网络或代理一栏,地址填 127.0.0.1,端口填客户端的混合代理端口。mihomo 文档写明混合端口同时支持 HTTP(S) 和 SOCKS5,软件让你选类型,选哪个都行。

TUN 开着还是漏,再查三处

第一处还是连接页。TUN 下能在连接页找到它,规则却是 DIRECT,就给它单独写一条按进程匹配的规则。mihomo 的规则文档里有 PROCESS-NAME,Clash Verge Rev 订阅卡片右键的编辑规则里能直接选这个类型,内容填连接页里看到的进程名,策略选代理组。

第二处是程序自己解析域名、只拿一个 IP 去连。这样的连接到了内核手里只剩一个 IP,域名规则一条都匹配不上。mihomo 的嗅探功能就是为这种连接准备的,parse-pure-ip 的说明是对所有未获取到域名的流量进行强制嗅探。v2rayN 在参数设置里有开启流量探测,作用相同。嗅探和 DNS 的关系,DNS 泄露那篇有更多细节。

第三处是别的软件在抢路由。游戏加速器、公司的 VPN 都要改系统路由,和 TUN 同时开会互相打架。Clash Verge Rev 的 Windows 常见问题还记了一种情况,开了 TUN 以后整台电脑的网络出毛病,文档把原因归到多张网卡或网段与配置冲突上,处理方法是删掉系统里用不上的虚拟网卡。

安卓上没有系统代理,只有分应用

手机上的代理客户端都以 VPN 的身份运行,相当于一直开着 TUN。Android 开发者文档写明,不设允许名单或禁止名单时,所有应用的流量都走 VPN。所以在安卓上,问题通常反过来,是想让某些 App 别走代理。

v2rayNG 的入口在设置里的 VPN 设置,叫分应用代理。界面上的说明写得很清楚,常规模式下勾选的应用使用代理、未勾选的直连,绕行模式下勾选的应用直连、未勾选的使用代理。国内 App 多的手机用绕行模式,勾的东西少。

Clash Meta for Android 的入口在设置的网络页,访问控制模式有三个选项,意思分别是全部应用都走、只让勾选的走、勾选的不走,想排除国内 App 就选第三个,界面上写作不允许已选择的应用,选好以后到访问控制应用包列表里勾。这一页的选项在 Clash 运行时改不了,要先停下再改。

同一页还有一个开关叫允许应用绕过,说明是允许其他应用绕过 VPN。Android 文档对这个机制的描述是,打开以后,应用可以把自己绑定到某个具体的网络上,直接从那张网出去。某个 App 在手机上死活不走代理,看一眼这个开关是不是开着。

常见问题

游戏开着系统代理还是走直连,怎么办

开 TUN 模式。游戏的数据大量走 UDP,Clash Verge Rev 的名词解释里,系统代理一项注明不能代理 UDP,不少游戏也根本不读系统代理。TUN 用虚拟网卡把 TCP、UDP 一并接过来,在 Clash Verge Rev 里得先装好服务,或者以管理员身份启动它。

Telegram 不走系统代理,怎么让它走代理

在 Telegram 自己的设置里填代理。Clash Verge Rev 的 macOS 常见问题提到,App Store 版的 Telegram 不理会系统代理,可以在它的设置里手动填,地址 127.0.0.1,端口用客户端的 7897,也可以改用官网下载的版本。

安卓上怎么让国内 App 不走代理

用客户端的分应用功能把它们排除在外。v2rayNG 在设置的 VPN 设置里有分应用代理,打开绕行模式后,勾选的应用直连。Clash Meta for Android 在设置的网络页里有访问控制模式,选不允许已选择的应用,再到应用包列表里勾上。

开了 TUN 模式,系统代理还要不要开

不用。Clash Verge Rev 界面上的说明是 TUN 模式接管系统所有流量,启用时无须打开系统代理。两个都开也能用,读系统代理的程序会先把请求交给代理端口,其余程序的流量由虚拟网卡接走。

Windows 更新不走代理是怎么回事

它读的是另一份代理设置。微软文档写明 Windows 更新检查更新时要用 WinHTTP,WinHTTP 的代理和你在系统设置里看到的那一份是分开的。用管理员命令提示符运行 netsh winhttp show proxy 能看到它当前的设置,或者直接开 TUN。

参考来源

  1. Clash Verge Rev 文档,名词解释里的系统代理与 TUN
  2. Clash Verge Rev 文档,Windows 常见问题
  3. Clash Verge Rev 文档,macOS 常见问题
  4. Clash Verge Rev 文档,其他问题里的命令行代理
  5. Clash Verge Rev 仓库 v2.5.2 的中文界面文字
  6. v2rayN 7.24.9 的中文界面文字
  7. mihomo 文档,混合端口
  8. mihomo 文档,域名嗅探
  9. mihomo 文档,按进程匹配的规则
  10. Microsoft Learn,netsh winhttp
  11. Microsoft Learn,Windows 更新客户端如何选择代理
  12. Android 开发者文档,VPN 的分应用与绕过
  13. Clash Meta for Android 的中文界面文字
  14. v2rayNG 的中文界面文字

更新记录

  • 首次发布