Clash系统代理不生效怎么办?原因与排查步骤
你遇到的症状
客户端里系统代理开关是开着的,浏览器或软件却没有走代理,出口地区没变,国外网站照样打不开。
Clash系统代理不生效,是新手用 Clash 系客户端时最常碰到的问题:开关明明亮着,浏览器却像没开代理一样。先给结论:系统代理不生效,绝大多数时候是“设置没写进去”“端口对不上”“被别人覆盖”“软件本来就不读”这四类里的一类,可以逐项判断,不需要重装,更不需要先怀疑订阅和节点。这篇只处理本地这一层,流量已经进了客户端、仍然没网的,跳去看 已连接但无法上网怎么办。
示例以 Clash Verge(Mihomo 内核)为主,其他客户端的开关名称不同,按含义对应;系统菜单名称也会随版本变化,以你实际看到的为准。
先判断:系统代理不生效,还是别处的问题
打开客户端类似“连接”的页面,再到浏览器刷新一个站点,看列表:
| 观察到的结果 | 说明 | 下一步 |
|---|---|---|
| 列表里没有这个域名的记录 | 流量没进客户端,确实是这一层的问题 | 继续往下看本文 |
| 有记录,但命中直连 | 代理在起作用,是规则或模式的问题 | 看 分流规则 和 全局模式与规则模式 |
| 有记录,走了节点但一直不完成 | 本地没问题,是订阅或节点的问题 | 回到 已连接但无法上网 的订阅和节点两层 |
| 浏览器直接提示代理服务器出错 | 系统里的代理地址已经没人在听 | 看下面第 2、3 步 |
第 1 步:开关状态与权限
- 怎么判断:客户端设置页和托盘菜单里的系统代理开关,是不是真的处于开启状态;点击之后有没有出现权限不足或失败的提示。
- 常见原因:权限不够,写入被拒绝,开关会自动弹回;有的客户端还要先授权辅助组件才能改系统设置。
- 下一步:按提示授权,或以管理员身份运行客户端,然后关一次再开一次,不要连点。
第 2 步:核对系统里实际写了什么
客户端说开了不算数,要看系统里写了什么。期望的结果是:地址为 127.0.0.1(或 localhost),端口与客户端里显示的混合端口一致。默认端口因客户端和版本而异,常见的有 7890、7897,以客户端显示为准。
Windows:进入类似“设置 → 网络和 Internet → 代理”的页面,看“使用代理服务器”是否开启、地址和端口是否正确;也可以用命令行读取:
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
netsh winhttp show proxy
前两条看用户级的代理开关和地址(0x1 表示开启),第三条是另一套机制,部分系统服务读它,一般不用处理。
macOS:到类似“系统设置 → 网络 → 当前网络 → 详细信息 → 代理”的页面,看网页代理、安全网页代理、SOCKS 代理三项;命令行读取如下,服务名换成第一条命令列出的名称:
networksetup -listallnetworkservices
networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
scutil --proxy
macOS 的代理设置是按网络服务分别保存的,从无线换成有线、接了新的网卡,新接口上可能没有这项设置,这就是“换了网络又失效”的常见原因。
Linux:取决于桌面环境。GNOME 一类的桌面可以用 gsettings get org.gnome.system.proxy mode 查看;没有统一代理设置的环境,要靠环境变量或软件自己的设置。
- 核对结果不对:没写进去,回第 1 步;写的是别的地址,看第 4 步。
- 核对结果正确:进入第 3 步。
第 3 步:端口有没有人在听
地址对了,但如果那个端口上没有客户端在监听,浏览器会提示代理服务器出错。常见原因:客户端改过端口、端口被别的程序占了、客户端已经退出。
检查命令:Windows 用 netstat -ano | findstr :端口号,macOS 用 lsof -nP -iTCP:端口号 -sTCP:LISTEN。
- 没有监听记录:重启客户端,确认端口没被其他程序占用;需要的话换一个端口,换完回头核对第 2 步。
- 有监听,但进程不是客户端:端口被别的程序占了,换端口或关掉它。
第 4 步:谁在覆盖你的设置
系统代理只有一个“主人”,谁最后写入,谁生效。逐项排除:
- 其他代理软件、加速器、VPN:同时开着,会互相覆盖,也可能在退出时把设置清空。排查时只留一个。
- 浏览器扩展:代理切换类扩展会让浏览器忽略系统设置,浏览器设置页通常会提示代理由某个扩展控制。临时停用,或用无痕窗口对照。
- 残留的脚本地址:Windows 代理页里的“使用设置脚本”如果指向了你不认识的地址,可能是别的工具留下的,先关掉不认识的项。
- 安全软件和组织策略:被管理的设备上,代理设置可能被策略锁定,设置页会提示由组织管理,别硬改,先问管理员。
有的客户端提供类似“代理守卫”的选项,会定时把设置恢复成自己的。别的软件也在写的话,两边会反复抢,先关掉冲突方,再考虑要不要开。
第 5 步:浏览器有没有走自己的代理设置
Chrome 和 Edge 系浏览器默认读取系统设置。Firefox 有自己的网络设置,要确认选的是“使用系统代理设置”,而不是不使用代理或手动配置。默认选项会随版本变化,别凭记忆。
第 6 步:这个软件本来就不读系统代理
这一步最容易被误判。其实是软件根本不看这项设置:
| 软件类型 | 为什么不走 | 怎么办 |
|---|---|---|
| 命令行工具 | 多数只认环境变量或自己的配置 | 设置环境变量,或使用工具自己的代理项 |
| Git、npm、pip 等 | 各有独立的代理配置 | 分别设置,或改用 TUN |
| 游戏客户端、部分桌面软件 | 自带网络栈,不读系统设置 | 软件内有代理项就用它,否则考虑 TUN |
| Windows 商店类应用 | 默认不允许连接本机回环地址 | 有的客户端提供类似“UWP 工具”的入口,用它解除限制 |
以 Git 为例,单独设置代理的写法如下,端口号以客户端显示为准:
git config --global http.proxy http://127.0.0.1:端口号
git config --global --unset http.proxy # 不用时取消
多个软件都不走,又不想逐个设置,就该考虑 TUN 了:它在更底层接管流量,不要求软件配合,但需要权限、也要处理 DNS 和冲突。适用场景和开启步骤见 TUN模式设置,概念见 TUN模式是什么。
第 7 步:绕过列表、重启和残留
- 绕过列表:系统代理有一份“这些地址不走代理”的列表,默认通常包含本机和内网网段。你访问的地址如果被误加进去,就会直连。
- 重启软件:很多软件只在启动时读一次代理设置,改完后把它完全退出再打开。
- 残留问题:客户端异常退出后,系统里还指着没人听的端口,整台电脑像断网了一样。重新打开客户端再正常关闭,让它清理;还不行,到系统的代理设置里手动关掉开关。
症状分叉:四种常见现象,各走哪条路
前面七步是按顺序写的,但你遇到的现象不一定正好从第 1 步开始。下面把四种最常见的现象列成分叉路,找到最像你的那一条,再顺着往下走。系统菜单名称和路径因系统版本而异,以你实际看到的为准;各系统下客户端本身的设置,可以对照 Windows客户端教程 和 Mac客户端教程。
- 现象一:浏览器和软件都不走代理,连接页里完全没有记录
- 系统的代理设置页里是空的,或者开关处于关闭:回到第 1 步,看权限和开关状态;
- 地址或端口有值,但和客户端显示的不一致,或者地址不是本机:看第 4 步,有人把设置覆盖了;
- 地址和端口都对:看第 3 步,确认端口上确实有客户端在监听;有监听,再看第 5 步,浏览器是不是在用自己的代理设置。
- 现象二:浏览器正常,命令行、游戏或某些桌面软件不走代理
- 直接看第 6 步。这不是故障,是这些软件本来就不读系统设置,处理方法是单独设置代理地址,或者考虑 TUN。
- 现象三:整台电脑的所有网站都打不开,连国内网站也不行
- 多半是残留问题:客户端异常退出,系统里还指着一个没人监听的端口。看第 7 步,重新打开客户端再正常关闭一次,仍不行就到系统的代理设置里手动关掉开关。
- 现象四:昨天还正常,今天不行;或者换了网络之后失效
- 在 macOS 上,设置按网络服务分别保存,换了接口要重新写入,看第 2 步;也可能是别的软件在开机时覆盖了设置,看第 4 步。
这张分叉表的作用,是帮你跳过不相关的步骤。比如现象二里你完全不用去查端口和扩展,因为问题不在那里;现象三也不要先去怀疑订阅,这时候你的节点可能一点问题都没有。每走完一条分叉,都回到“连接页有没有记录”这个分水岭验证一次,别凭感觉判断好了没有。
十一项自查清单:照着打勾,十分钟内收口
下面这份清单把七步压缩成十一个可以逐项核对的动作。一边做一边打勾,做到哪一项出现变化,就记下来,那一项通常就是原因。
- 刷新一个站点,连接页里看过有没有出现这个域名的记录
- 客户端里的系统代理开关处于开启,点击后没有权限不足或失败的提示
- 系统的代理设置页里,地址是 127.0.0.1 或 localhost,端口与客户端显示的混合端口一致
- 这个端口上确实有客户端进程在监听,没有被其他程序占用
- 其他代理软件、加速器、VPN 都已退出,只留下一个
- 浏览器里的代理切换类扩展已停用,或者已经用无痕窗口对照过
- 如果你用 Firefox,网络设置里选的是使用系统代理设置
- 代理页里的“使用设置脚本”没有指向不认识的地址
- 绕过列表里没有误加你要访问的地址
- 出问题的软件,确认过它读不读系统代理;不读的,已设置单独的代理地址或考虑 TUN
- 修改完毕后,把相关软件完全退出,再启动一次
清单里的每一项都对应前面的某一步,看不懂的地方回去看原文。如果十一项全部勾上,系统代理仍然不生效,就做文末“对照实验”那一节的办法:关掉系统代理、开启 TUN,用同一个站点验证,把问题定位在“这一层”还是“更深的一层”。
系统代理是一个约定,不是一道闸门
理解了这一点,很多“为什么不生效”的疑问会自己消失。系统代理的本质,是操作系统里放着的一张“地址牌”:客户端在上面写下“本机的这个地址和端口,可以帮你转发”,至于其他软件看不看这张牌、什么时候看、看了听不听,全看软件自己。操作系统并不会强制所有流量都去按这张牌走,这和 TUN 在更底层接管流量,是两种完全不同的机制。
由此可以推出几个边界,具体表现因软件和系统版本而异,以对应软件的官方说明为准:
- 读取时机:不少软件只在启动时读取一次,运行期间不会再看。这也是前面强调“改完要完全退出再打开”的原因;另外,已经建立好的长连接,一般不会因为你改了设置而自动换路。
- 代理协议类型:系统代理里常见的是 HTTP 类和 SOCKS 类两种,有的软件只支持其中一种,客户端提供的“混合端口”是为了兼容这两种而设计的。端口对不上、类型不支持,都会表现为不生效。
- 流量类型:系统代理主要面向软件主动发起的网络请求,对某些不经过这套机制的流量,比如部分游戏和语音软件使用的流量,通常不起作用。这类需求才是 TUN 的适用场景,开启前请先读 TUN模式设置。
- 域名解析由谁做:不同软件、不同设置下,域名是在本地解析还是交给节点那一端解析,会有差别。怀疑解析环节出了问题,对照 DNS泄漏检测 的方法核对。
- 受管理的设备:公司或学校发放的设备,代理设置可能被策略统一管理,不允许个人修改,这时需要按管理员的要求处理。
把系统代理当成“一个靠软件自觉的约定”,而不是“一键全局生效”,你就不会再被“开关亮着却不生效”这件事搞糊涂了。
系统代理不生效的五个常见误区
下面五条是最容易把排查带偏的想法,每条按“误区、为什么不对、正确做法”说清楚。
-
误区:“客户端里的开关亮着,就一定已经生效。”
- 为什么不对:开关只是客户端自己的状态,写入系统时可能被权限拦截、被别的软件覆盖,系统里实际是什么要另外去看。
- 正确做法:到系统的代理设置页核对地址和端口,再用连接页验证有没有记录。
-
误区:“浏览器能走代理,所有软件都应该能走。”
- 为什么不对:浏览器一般会主动读取系统设置,命令行、游戏、很多桌面软件并不读,这是机制差异。
- 正确做法:先弄清出问题的软件读不读系统代理,再决定是单独设置还是改用 TUN。
-
误区:“照着别人的教程填端口,就一定对得上。”
- 为什么不对:默认端口因客户端和版本而异,你自己的客户端可能改过,别人的数字未必适用于你。
- 正确做法:只认你自己客户端界面上显示的端口,系统里填的也必须和它一致。
-
误区:“关闭客户端时不用管系统代理,反正会自己恢复。”
- 为什么不对:正常退出时,客户端通常会清理自己写入的设置;但强制结束进程、异常退出,可能留下指向没人监听的端口,导致整台电脑像断网。
- 正确做法:尽量从客户端里正常退出;出现残留,重新打开客户端再正常关闭一次,或者手动关掉系统里的代理开关。
-
误区:“开了 TUN,系统代理就彻底没用了,两个同时开也无所谓。”
- 为什么不对:两者同时开并不算错,但出了问题很难分清是哪一层的原因;TUN 还需要权限,并且要处理 DNS 和冲突。
- 正确做法:排错阶段只留一个,用对照的方式逐个验证,确认问题所在,再决定日常怎么开。
实在找不到原因:对照实验
- 关掉系统代理,开启 TUN,用同一个站点验证;
- 能通,说明节点和订阅没问题,问题在这一层的设置,回头再核一遍上面几步;
- 不通,说明问题不在这一层,转去 已连接但无法上网;
- 如果订阅本身还没导对,先看 Clash Verge导入订阅,客户端见 Clash Verge下载。
一次只改一个地方,改完立刻验证。
今天就做:五分钟定位
- 看连接页有没有记录,决定是不是这一层的问题;
- 核对系统里的地址和端口,确认端口有人监听;
- 关掉其他代理软件和扩展,确认出问题的软件读不读系统设置;
- 以上都排除,再对照 TUN。
客户端体验也是选机场时值得看的一项,可以去 机场推荐排行榜 对照资料。使用代理服务请遵守所在地法律法规,机场牛不提供法律意见。
系统代理不生效常见问题
系统代理开关打开了,为什么还是不走代理?
开关只代表客户端发出了写入请求,不代表系统里真的生效。常见原因是权限不足被还原、端口与客户端监听的端口不一致、被别的代理软件或策略覆盖。先到系统的代理设置页核对地址和端口,再看客户端连接页有没有记录。
浏览器能走代理,命令行和游戏却不走,是哪里错了?
没错,是机制如此。系统代理只对主动读取这项设置的软件有效,浏览器通常会读,命令行工具、游戏和不少桌面软件不读。给它们单独设置代理地址,或者在确认权限和冲突后改用 TUN 模式,覆盖面会大得多。
关掉客户端后整台电脑都上不了网,怎么恢复?
多半是客户端异常退出,系统里还留着指向本机端口的代理设置,而那个端口已经没人监听。重新打开客户端再正常关闭一次,让它自己清理;不行就到系统的代理设置页手动关掉代理开关,必要时重启电脑。
系统代理和 TUN 能同时开吗?
可以同时开,不算错,但出问题时很难判断是哪一层的原因。日常浏览只开系统代理就够用,需要覆盖不读系统设置的软件时再开 TUN。排错阶段建议两者只留一个,用对照的方式逐个验证。
怎么确认系统代理现在到底是谁在控制?
先到系统的代理设置页看地址和端口是否指向本机和客户端显示的端口;再看浏览器的设置页,是否提示代理由某个扩展控制;被组织管理的设备,设置页通常会提示由组织管理。然后依次退出其他代理软件、停用扩展,每退出一个就重新核对一次,变化出现的那一步就是原因。
换了网络之后代理又失效了,要重新设置吗?
可能要。在 macOS 上代理设置按网络服务分别保存,从无线换到有线或其他网卡后,新的接口上可能没有这项设置。先关掉再重新打开客户端里的代理开关,让它重新写入,再到系统设置里核对当前使用的网络。