电脑上的代理客户端有两种接管流量的办法。系统代理是在操作系统里登记一个本机地址和端口,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。
参考来源
- Clash Verge Rev 文档,名词解释里的系统代理与 TUN
- Clash Verge Rev 文档,Windows 常见问题
- Clash Verge Rev 文档,macOS 常见问题
- Clash Verge Rev 文档,其他问题里的命令行代理
- Clash Verge Rev 仓库 v2.5.2 的中文界面文字
- v2rayN 7.24.9 的中文界面文字
- mihomo 文档,混合端口
- mihomo 文档,域名嗅探
- mihomo 文档,按进程匹配的规则
- Microsoft Learn,netsh winhttp
- Microsoft Learn,Windows 更新客户端如何选择代理
- Android 开发者文档,VPN 的分应用与绕过
- Clash Meta for Android 的中文界面文字
- v2rayNG 的中文界面文字
更新记录
- 首次发布