最近碰到很头疼的问题:我的系统代理打不开了。
问题出现在几周前,我出去旅游了一趟,回来的时候突然代理就无法使用了,当时我以为只是订阅的网站忘记续费了,打开之后发现还有余额。那么我又以为是游戏加速器导致的问题,于是重启了电脑,但还是无法使用。奇怪的是,在 clash 软件里面显示的节点都是可以 ping 通的。这我就很纳闷了:明明节点没有任何问题,为什么没法走代理?而且我不管打开什么网页,软件里都没有显示有任何一点的流量通过。
此时补充一下配置:我使用的是 win11 的系统,平时浏览器多使用火狐,系统里 edge 和 chrome 也都有。这次出问题时我使用的是火狐浏览器。此时,我立马想到的是先用其他浏览器试试,当然,其它的浏览器也没法连接到外网。
这时候,我首先怀疑的问题就是系统代理没有正常打开。于是我就来到 windows 的 [设置]-[网络和Internet]-[代理] 处,查看了一下代理的情况。原来代理状态是关闭的,那我就手动打开,填入地址 127.0.0.1
和端口号 7890
,并且保存,然后尝试连接,结果没有任何变化,依然无法连接外网。这时我瞟了一眼设置的代理,欸,为什么又关闭了,明明我是刚才打开并保存的。于是我再次打开,然而我只要一切换界面,回去一看,又自动关闭了,这也太奇怪了。
我从来没有见过这种情况,便上网搜索一番,在 github 上找到了一个 clash for windows 项目的 issue 被很多人提到,讲的就是系统代理自动被关闭的情况。按照该 issue 下方各路大神提供的方法,我使用 Process Monitor
观察修改 HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\
项目的应用。但令人头疼的是,我始终只能在该软件里看到我自己修改的动作,却没有观察到任何其他的软件对该注册表进行修改。我百思不得其解:既然我修改了,又被改回去了,为什么找不到是什么东西修改了它呢?当时已经是比较晚的时候了,我出于无奈,只能先将火狐浏览器的代理手动设置成 127.0.0.1:7890
,能凑合用,把系统代理的问题留到后面解决。
本来我想着可能我也不需要在浏览器之外的软件里使用代理,然而几天后我有安装 python 库的需求,当时我像往常一样输入 pip install ...
,结果报错 ValueError: check_hostname requires server_hostname
。这是挺常见的,一般来说是系统设置了代理的原因。我习惯性地准备关闭 clash,可是我突然一想,不对啊,我的系统代理不是本来就没有打开吗?一时半会我还真没想明白,那我就把 vscode 设置从代理走试试?结果又报了另外的错误,似乎也是连接上的错误。
于是,我想在 powershell 里用命令查看一下我的网络代理情况,使用指令 netsh winhttp show proxy
结果是 直接连接(无代理)
那我的代理确实没有打开呀。如果我想要用指令打开呢?我尝试了指令 netsh winhttp set proxy '127.0.0.1:7890'
,再次查看状态,依然显示直连,完全没有变化,看来这时候系统代理无法修改的问题依然存在。我只能又去搜搜看遇到 pip 无法安装的时候大伙都是怎么解决的,搜出来一个修改注册表项的方法:将 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
中的 ProxyEnable
项值修改为 0。这样做居然临时解决了问题。
当然,临时解决了问题,却没有完全修复问题。我的系统代理目前是处于完全没有办法配置的情况,这势必在后面给我带来各种各样的麻烦,我肯定要找方法完全解决。于是又是各种各样地找解决方案,终于有一条修改注册表项的方法:修改 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings
中的 ProxySettingsPerUser
为 1,这样我的代理设置就神奇地可以修改了,直接用 clash 软件打开系统代理即可。当然这时候要把之前上一步的注册表项 ProxyEnable
恢复为 1 才行。
踩了不少坑,系统才恢复正常。其实这个问题很让我意外的地方是,解决问题的中途我因为系统还残留一些其他的问题,将系统重装为 win10,然后正好还换了一块全新的主板,结果重装之后过一阵子居然重现了这个问题,这就让我感到很不理解了,理论上重装不是能解决 100% 的问题吗?虽然我最终也没有想出来问题发生的根源在何处,但是我猜测是我常用的某款软件修改了最后的这个注册表项,毕竟我重装了系统,常用的软件也不能落下,那么可能就有一款软件导致了这样的问题发生。在此记录下解决问题的全过程,供之后参考。