Clash开启后某些软件不能联网 – 原因与解决办法

不知道大家有没有碰到过这种情况:Clash开着,浏览器上网一切正常,但某个软件就是连不上网,或者更新失败。关了Clash反而好了,一开就不行。

我当初碰到这个问题的时候,特别懵——明明浏览器都能上,凭啥你这个软件就不行?后来折腾了好久才搞明白,不同的软件获取代理的方式不一样,不是所有软件都乖乖走系统代理的。

今天就来唠唠这个问题,为什么有的软件不走路子,以及怎么让它们都用上代理。

先搞清楚:哪些软件容易出问题?

不是所有软件都会碰到这个问题。容易出问题的一般是这几类:

1. UWP应用(微软商店的应用)

比如微软商店、Xbox、Forza、各种UWP版的QQ、微信什么的。这些应用默认是不走系统代理的,或者说走得很别扭。

2. 游戏客户端

Steam、Epic、Origin、各种网游客户端。有些游戏客户端不走系统代理,或者只走部分流量。

3. 命令行工具

pip、npm、git、curl这些命令行工具,很多默认不走系统代理,需要单独配置。

4. 一些比较老的软件

有些老软件根本不支持系统代理,只能直连或者自己配置代理。

5. 企业级软件

比如Outlook、Teams、一些公司内部的软件,可能有自己的网络设置,不理会系统代理。

先看看你出问题的软件属于哪一类,然后我们接着往下看。

原因一:软件不走系统代理

这个是最常见的原因。

Clash开的”系统代理”,只是改了系统的代理设置。但不是所有软件都会去读系统代理设置。有些软件就是头铁,非要直连,你能怎么办。

为什么有的软件不走系统代理

  • 软件自己设计的:有些软件就是不支持系统代理,需要手动在软件里配置
  • UWP应用的限制:微软的UWP应用有网络隔离,默认不能访问本地回环地址,而Clash的代理端口就在本地
  • 服务类程序:以系统服务运行的程序,用的是系统账户的网络设置,不是当前用户的

怎么判断是不是这个原因

很简单:在出问题的软件里,看看有没有代理设置的选项。如果有,手动配置一下Clash的代理地址(一般是127.0.0.1:7890),看看能不能用。

配置了就能用,说明就是这个问题。配置了还是不行,那继续往下排查。

原因二:UWP应用的网络隔离

这个是Windows上特有的问题,坑了不少人。

UWP应用(就是微软商店下载的那些)有个叫”网络隔离”的东西,默认不允许访问localhost(本地回环地址)。而Clash的代理端口就是在localhost上的,所以UWP应用默认是连不上Clash的。

表现就是:桌面版的软件都正常,UWP应用全部上不了网。

怎么解决

方法一:用Clash的UWP工具

Clash for Windows自带了一个UWP工具,在”Tool”页面里,点一下”UWP Loopback”,然后把你要代理的UWP应用打勾,保存就行。

这个工具本质上就是改了Windows的网络隔离设置,允许这些UWP应用访问本地回环地址。

方法二:用命令行工具

如果你用的Clash客户端没有这个功能,可以用微软官方的CheckNetIsolation工具,命令行操作:

# 查看所有UWP应用的SID
CheckNetIsolation.exe LoopbackExempt -s

# 添加豁免(把SID换成你要加的应用的SID)
CheckNetIsolation.exe LoopbackExempt -a -p=SID

不过命令行比较麻烦,还是建议用Clash自带的图形化工具,方便。

方法三:开TUN模式

开了TUN模式之后,所有流量都会被虚拟网卡接管,就不存在UWP不UWP的问题了,所有应用都能走代理。

不过TUN模式配置起来麻烦一点,而且性能上会有点损耗。如果你有很多UWP应用需要代理,TUN模式倒是一劳永逸的办法。

原因三:软件的代理设置不对

有些软件虽然支持代理,但配置得不对,也会连不上。

常见的情况

代理类型不对

Clash的混合端口(mixed-port)支持HTTP、SOCKS5等多种代理协议,但有些软件只支持特定类型的代理。如果软件里选的代理类型不对,就会连不上。

一般来说,HTTP代理兼容性最好,大部分软件都支持。SOCKS5支持的软件少一点,但功能更强(支持UDP)。

代理地址填错了

127.0.0.1写成了localhost,或者端口号填错了,这种低级错误但真的很多人犯。

开了PAC但规则不对

有些软件支持PAC自动代理,但PAC脚本的规则不对,导致该走代理的没走,不该走的走了。

怎么排查

在软件的代理设置里,手动配置成127.0.0.1,端口填Clash的混合端口(默认7890),代理类型选HTTP。保存了试试能不能用。

如果手动配置了能用,那就是之前的设置不对。如果手动配置了还是不行,那继续往下看。

原因四:规则匹配错了

这个也挺常见的。Clash的规则没配对,导致某些软件的流量走到了错误的策略上。

比如:
– 该走代理的域名走到直连去了,结果连不上
– 该直连的走到代理去了,结果速度很慢或者连不上

怎么排查

打开Clash的日志面板,然后用出问题的软件发起一个连接,看看日志里匹配到了哪条规则、走了哪个策略。

如果匹配到的规则不对,那就是规则的问题,去调整规则就行。

常见的规则问题

规则顺序不对

Clash的规则是从上往下匹配的,匹配到第一条就停了。如果你把范围大的规则写在前面,可能会把后面更精确的规则覆盖掉。

规则写错了

域名写错了,或者规则类型用错了(比如DOMAIN写成了DOMAIN-SUFFIX),都可能导致匹配不正确。

GEOIP不准确

有些域名的服务器IP在国内,但服务本身是国外的,GEOIP判断成国内走了直连,结果连不上。这种情况需要手动加规则。

原因五:TUN模式的问题

如果你开了TUN模式,某些软件不能联网可能跟TUN的配置有关。

常见的TUN问题

路由表不对

TUN模式需要改系统路由表,如果路由配置不对,有些流量可能不会走到虚拟网卡。

DNS的问题

TUN模式下,如果DNS配置不对,某些软件可能解析不了域名,表现为连不上网。

跟其他软件冲突

如果同时开了别的VPN软件、网游加速器什么的,它们可能会抢路由表,导致冲突。

排查方法

先把TUN模式关了,用系统代理模式试试。如果关了TUN就好了,那就是TUN的问题。再去调整TUN的配置。

原因六:软件本身的问题

有些软件有自己的网络逻辑,可能会绕过系统代理,或者有自己的一套东西。

常见的情况

游戏的反作弊系统

有些游戏的反作弊系统会检测代理、VPN之类的,发现了就不让你连,防止作弊。

企业软件的安全策略

一些公司的内部软件,强制只能用公司网络,检测到代理就断开。

爬虫/下载工具

有些工具自带代理池或者多线程下载,可能部分连接走代理部分不走,表现为时好时坏。

怎么应对

这种情况就比较难办了,因为是软件本身的限制。如果是游戏的话,可以试试用TUN模式,让代理更”透明”一点,说不定能混过去。

但不建议为了玩游戏绕过反作弊,封号了得不偿失。

原因七:端口被软件自己占用了?不对

等等,这里说一个容易搞混的。

不是软件被占用了端口,而是有些软件会自己监听端口,或者有自己的网络栈。不过这个一般不会导致”不能联网”,最多是冲突。

这个不是重点,简单提一下就行。

通用解决方法汇总

说了这么多原因,给大家整理几个通用的解决方法,按顺序试:

方法一:给软件手动配置代理

如果软件有代理设置,直接手动配上Clash的地址:127.0.0.1:7890,类型选HTTP或者SOCKS5。

这是最简单的方法,能用就用。

方法二:开TUN模式

TUN模式是终极解决方案,因为它是在系统层面接管流量,不管软件支不支持代理,只要它走系统网络,就会被TUN模式接管。

如果很多软件都不走系统代理,直接开TUN模式最省心。

但TUN模式配置起来稍微麻烦一点,而且需要管理员权限。

方法三:用代理转换工具

有些软件只支持特定类型的代理,可以用privoxy之类的工具做代理转换,把SOCKS5转成HTTP,或者反过来。

不过这个比较进阶,一般用不上。

方法四:给命令行工具设环境变量

命令行工具一般读环境变量里的代理设置。Windows的话,可以在环境变量里加:

HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890

或者在PowerShell里临时设置:

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

设完了在当前终端里运行的命令就会走代理了。

几个常见软件的具体解决方法

说几个经常被问到的软件怎么处理。

Steam

Steam的话,设置里有个”网页浏览器”的代理设置,但那个只管Steam的内置浏览器,不管下载和游戏连接。

要让Steam完全走代理,最简单的办法是开TUN模式。或者在Steam的快捷方式里加启动参数:-tcp,强制用TCP连接,配合系统代理有时候能行。

各种网游

网游的话,一般建议用TUN模式,而且要开UDP转发。很多游戏用的是UDP协议,系统代理模式不支持UDP,TUN模式才行。

但注意,有些游戏的反作弊会检测代理,用了可能封号,自己权衡。

微软商店/UWP应用

前面说过了,用Clash的UWP Loopback工具,把需要的应用加到豁免里就行。或者直接开TUN模式,一劳永逸。

Git/Git命令行

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

如果是SSH协议的,还要另外配置SSH的代理。

pip/npm

这些可以设环境变量,或者在各自的配置文件里设置代理。

最后说两句

某些软件不能联网这个问题,说穿了就是两个原因:要么软件不走系统代理,要么规则没配对。

大部分情况下,开个TUN模式就能解决。TUN模式虽然配置起来麻烦一点,但真的省心,什么软件都能走代理。

如果不想开TUN,那就根据具体的软件,找到对应的解决方法,手动配置一下。

希望这篇文章能帮到你。如果你碰到的软件不在上面说的里面,欢迎在评论区留言,大家一起讨论。

FAQ

为什么浏览器能上网但其他软件不行?

因为浏览器一般会读取系统代理设置,所以Clash开了系统代理之后浏览器就能用。但很多其他软件不读系统代理,或者有自己的网络设置,所以就上不了网。

开了TUN模式之后所有软件都能走代理吗?

基本上是的。TUN模式是在系统层面创建虚拟网卡,所有网络流量都会经过这个虚拟网卡,不管软件支不支持代理。但也有极少数软件会绕过系统网络栈直接跟网卡交互,这种就没办法了,不过非常少见。

怎么让某个特定的软件不走代理?

在Clash的规则里,可以按进程名来匹配规则,把特定软件的流量设置为直连。Clash Meta支持PROCESS-NAME规则类型,可以精确控制某个程序走不走代理。

手机上Clash也会有这个问题吗?

手机上的情况不太一样。安卓上如果用的是VPN模式(大部分Clash客户端默认都是),那所有流量都会走VPN,不存在这个问题。iOS上也是类似,用VPN配置的话是全局的。但如果是用代理模式,那也会有部分应用不走代理的问题。

为什么有的软件开了代理反而更慢或者连不上?

可能是这些软件的服务器在国内,走代理反而绕远路了。可以在Clash规则里把这些软件的域名或者进程名设置为直连,让它们不走代理,速度反而更快。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注