直接回答
客户端显示“已连接”,一般只代表它已经启动、内核在运行,不保证系统代理已经指向它,也不保证所选节点真的连通。排查时先用 curl 直接经本地端口发一个请求:能通,说明内核和节点正常,问题在系统代理、浏览器设置或软件冲突;不通,再看客户端日志里的报错关键词,判断是端口、节点、证书还是协议支持的问题。
要点
- 先分清是单个节点失败、全部节点失败,还是显示已连接但网页打不开,三者的排查方向不同
- 用 curl 经本地端口测试,可以把问题一分为二:节点链路,或者系统与浏览器的设置
- 系统代理的地址和端口必须与客户端当前的本地端口一致,改过端口后要重新开启系统代理
- 浏览器代理扩展、多个代理软件或 VPN 同时运行,是“已连接却打不开”的常见原因
- 日志中的 refused、timeout、x509 等关键词能快速指向问题所在,但只是线索而不是定论
已连接却打不开网页的排查顺序
-
第 1 步: 经本地端口测试
用 curl 通过客户端的本地端口请求一个测试地址,判断问题在节点链路还是系统与浏览器设置。
-
第 2 步: 确认系统代理已生效
在系统设置或命令行中确认系统代理已开启,并指向 127.0.0.1 和客户端端口;手机端确认 VPN 已连接。
-
第 3 步: 核对端口一致
对照客户端设置中的端口,检查系统代理端口是否一致、端口是否被其他程序占用。
-
第 4 步: 排除浏览器设置
停用代理切换类扩展,检查 Firefox 等浏览器自带的代理设置,用其他浏览器对比。
-
第 5 步: 退出冲突的软件
只保留一个代理客户端,关闭加速器和其他 VPN,避免争抢系统代理、端口和路由。
-
第 6 步: 查看日志关键词
把日志级别临时调高,根据 refused、timeout、x509 等关键词判断原因。
-
第 7 步: 检查安全软件
留意第三方安全软件的网络防护或 HTTPS 扫描功能,必要时把官方客户端加入信任列表后对比。
先分清是哪一种“连不上”
“连不上”有好几种表现,排查方向各不相同。动手之前,先对照下表判断自己属于哪一种:
| 现象 | 通常意味着 | 先做什么 |
|---|---|---|
| 只有某个节点超时或打不开,换节点后正常 | 该节点在维护、负载过高或入口受到干扰 | 换同地区的其他节点;长期不可用再向服务商反馈 |
| 所有节点都显示超时 | 订阅、系统时间、本地网络或客户端内核等共同环节出了问题 | 按问题排查速查表中“所有节点测速超时”一行检查 |
| 节点测速正常、显示已连接,但网页打不开 | 流量没有交给客户端,或交给了错误的地址 | 按本文第一步起逐项核对 |
| 只有部分网站打不开 | 分流规则没有覆盖,或 DNS 解析异常 | 临时切换全局模式对比 |
| 网页能打开,只是很慢或晚上卡顿 | 线路拥塞、节点负载或本地网络 | 见梯子速度慢的分步排查 |
| 退出客户端后什么网站都打不开 | 系统代理或 DNS 设置残留 | 见文末“退出客户端后断网”一节 |
本文重点处理第三种,也是最让人困惑的一种。客户端界面上的“已连接”或“运行中”,通常只说明客户端已经启动、内核在运行,并不保证流量真的经过了它。一次正常的访问要依次走完下面这条链路:
浏览器 → 系统代理设置(127.0.0.1:端口)→ 客户端本地端口 → 内核按规则选择出口 → 节点 → 目标网站
任何一个箭头断开,都会表现为“已连接但打不开”。下面的步骤就是逐段检查这条链路。
第一步:绕开浏览器,直接测本地端口
先跳过浏览器和系统代理,直接把请求交给客户端的本地端口。测试前在客户端中选好一个测速正常的节点;如果规则模式下测试地址被判为直连,可以临时切换到全局模式,并在全局模式下重新选好这个节点,测完再切回规则模式。端口 7897 请换成客户端设置中显示的端口:
# macOS / Linux:-sS 表示平时不输出进度,出错时显示报错
curl -x http://127.0.0.1:7897 -sS -o /dev/null -w "HTTP %{http_code}\n" --max-time 10 https://www.google.com/generate_204
# Windows PowerShell:请写 curl.exe,curl 在 PowerShell 中是 Invoke-WebRequest 的别名
curl.exe -x http://127.0.0.1:7897 -sS -o NUL -w "HTTP %{http_code}\n" --max-time 10 https://www.google.com/generate_204
根据输出把问题一分为二:
- 输出
HTTP 204:本地端口、内核和节点都正常,问题在系统代理、浏览器或软件冲突,继续看第二到第五步和第七步; - 立刻报错,类似
Failed to connect to 127.0.0.1 port 7897(后半句措辞因 curl 版本而异):本地端口没有程序在监听,多半是内核没有启动或端口填错,重点看第三步; - 等待一段时间后超时,或出现 TLS 握手失败、连接被重置、空响应一类报错:请求已经进入客户端,但经节点出去时失败了,换几个节点再试,并结合第六步的日志判断原因。
问题排查页的自查命令里也有一条类似的命令,可以对照使用。
第二步:确认系统代理真的指向客户端
curl 能通、浏览器打不开时,最常见的原因是系统代理没有生效。
Windows
打开“设置 → 网络和 Internet → 代理”,在“手动设置代理”下确认“使用代理服务器”已开启,地址为 127.0.0.1,端口与客户端一致。Windows 10 与 Windows 11 的界面略有不同,以实际版本为准。同一页面的“自动设置代理”中如果开启了“使用设置脚本”,浏览器通常会优先按脚本决定走向,排查时需要一并确认。也可以用 PowerShell 直接查看:
# ProxyEnable 为 1、ProxyServer 为 127.0.0.1:端口,说明系统代理已指向本机客户端
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' | Select-Object ProxyEnable, ProxyServer, AutoConfigURL
ProxyEnable为0:系统代理没有开启,客户端里的开关可能没有生效,或被其他软件关掉了;ProxyServer的端口与客户端不同:端口不一致,见第三步;AutoConfigURL有值:启用了代理脚本,确认它是不是当前客户端设置的。
macOS
在终端运行 scutil --proxy,正常时可以看到 HTTPEnable : 1、HTTPProxy : 127.0.0.1 和对应的 HTTPPort,HTTPS 与 SOCKS 项同理。也可以在“系统设置 → 网络 → 当前网络 → 详细信息 → 代理”中查看,位置以系统版本为准。macOS 的代理设置按网络服务分别保存,从 Wi-Fi 换成有线或其他网卡后,新网络上未必有代理设置,重新开关一次系统代理即可。
Android 与 iOS
手机客户端一般通过系统的 VPN 接口接管流量,没有“系统代理端口”的概念。Android 连接成功后状态栏通常会出现钥匙图标;iOS 状态栏会显示“VPN”,也可以在“设置 → 通用 → VPN 与设备管理”中查看状态。图标都没有出现,说明并没有真正连上;图标在但打不开,问题多半在节点或规则。各系统接管流量的差异,见电脑和手机怎么用梯子。
第三步:核对端口是否一致
系统代理的端口必须与客户端当前监听的端口一致。下表是常见客户端的端口位置,默认值会随版本变化,一律以设置页显示为准:
| 客户端 | 端口在哪里看 | 常见默认值 |
|---|---|---|
| Clash Verge Rev | 设置中的端口设置(混合端口) | 常见 7897 |
| 其他 Clash 系客户端 | 设置页或配置文件中的 mixed-port | 常见 7890 |
| v2rayN 7.x | 设置 → 参数设置中的本地监听端口 | 常见 10808 |
| Shadowrocket 等手机客户端 | 通过 VPN 配置接管,一般无需手动设置端口 | 不涉及 |
端口不一致通常有三种来由:在客户端里改过端口,但系统代理还是旧值;装过别的代理软件,系统代理被它改成了自己的端口;端口被其他程序占用,内核根本没能监听。最后一种可以这样查:
# Windows:查看谁在监听 7897 端口
Get-NetTCPConnection -LocalPort 7897 -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess
# 把 12345 换成上一条命令输出的 OwningProcess,查看对应的程序名
Get-Process -Id 12345
# macOS / Linux
lsof -nP -iTCP:7897 -sTCP:LISTEN
改端口之后,记得在客户端里关闭再重新开启一次系统代理,让新端口写入系统设置。
第四步:排除浏览器自身的代理设置
即使系统代理设置正确,浏览器也可能不按它走:
- 代理切换类扩展:Chrome、Edge 默认跟随系统代理,但安装了 SwitchyOmega 一类的扩展后,扩展的设置会覆盖系统代理。扩展选了“直接连接”,或者指向一个早已失效的端口,网页就会打不开。先把扩展切到“使用系统代理”,或者暂时停用。
- 浏览器自带的代理设置:Firefox 有独立的连接设置(“设置 → 常规 → 网络设置”),可选不使用代理、自动检测、使用系统代理设置和手动配置等。默认一般是使用系统代理设置;如果被改成不使用代理,或手动填了错误的端口,就不会经过客户端。
- 对比测试:用无痕窗口或另一个浏览器打开同一网址。扩展默认通常不在无痕窗口中运行,无痕窗口能打开而普通窗口不行,基本就是扩展的问题。
第五步:排除多个代理软件或 VPN 的冲突
两个代理客户端同时运行,会争抢系统代理设置和本地端口:后启动的那个会改写系统代理,先启动的那个退出时又可能把系统代理整个关掉,结果谁都用不了。开启 TUN 时问题更明显,两个虚拟网卡会争抢路由,表现为时通时断或完全断网。游戏加速器、公司 VPN 也会建立自己的虚拟网卡,与代理客户端同时开启时同样可能冲突,具体见加速器和梯子同时开会不会冲突。
在 Windows 上,可以列出当前处于连接状态的网卡,看看有没有多余的虚拟网卡(名称因软件而异):
Get-NetAdapter | Where-Object Status -eq 'Up' | Select-Object Name, InterfaceDescription
第六步:看日志里的关键词
前面几步都正常、问题仍在时,客户端日志往往能直接说明原因。Clash Verge Rev 有单独的“日志”页面,v2rayN 主界面下方会显示运行信息,位置以实际版本为准。mihomo 内核的日志级别分为 silent、error、warning、info、debug 几档,排查时可以临时调到 info 或 debug,用完再调回去。
日志格式因客户端和版本而异,下表的关键词只是常见的类似写法,可以作为判断线索:
| 日志关键词 | 更可能的原因 | 处理方向 |
|---|---|---|
connection refused | 目标端口没有服务在监听:如果是 127.0.0.1,说明本地端口或内核没在运行;如果是节点地址,说明节点端口拒绝连接,可能已下线或更换端口 | 重启客户端、核对端口;更新订阅后换节点 |
i/o timeout、timeout | 节点不可达:入口受阻、当前网络限制了该端口,或服务器宕机 | 换节点,或换到手机热点对比 |
x509、certificate | 证书校验失败:系统时间不准、证书过期、证书与域名设置不匹配,或网络中存在 HTTPS 检查 | 开启系统自动对时;仍报错再联系服务商 |
unsupported、unknown(不支持的协议或类型) | 内核版本不支持该节点的协议,或订阅格式与客户端不匹配 | 升级客户端,或切换到支持该协议的内核 |
no such host 等解析失败 | 节点地址是域名,而本地无法解析 | 检查本地网络与客户端的 DNS 设置 |
EOF、connection reset | 连接被中途关闭:密码等参数不匹配、订阅过期被服务端拒绝,或连接受到干扰 | 更新订阅;多个节点都如此时联系服务商 |
address already in use | 本地端口被其他程序占用,内核无法监听 | 按第三步找出占用端口的程序 |
如果要把日志或截图发给别人求助,先遮挡订阅链接、节点地址和密码,相关习惯见订阅链接泄露的预防与处理。
第七步:检查防火墙与安全软件
Windows 自带的防火墙默认放行出站连接,一般也不会拦截浏览器到 127.0.0.1 的本机连接。更常见的干扰来自第三方安全软件:“网络防护”“HTTPS 扫描”一类功能会自己接管浏览器流量,可能绕过系统代理,也可能让网页出现证书错误。可以临时关闭这类功能做对比,或者把客户端加入信任列表。加入信任列表之前,先确认客户端来自官方下载渠道,不要对来路不明的修改版放行。
退出客户端后断网怎么办
另一种常见情况是:客户端退出以后,连国内网站也打不开了。原因通常是客户端被强制结束、崩溃或直接卸载,没来得及还原系统设置,系统代理仍指向一个已经关闭的本机端口。用第二步的命令查看,如果客户端已退出而 ProxyEnable 仍为 1,就是这种情况。
处理方法很简单:重新打开客户端,关闭系统代理后再正常退出;或者直接在系统的代理设置中关闭“使用代理服务器”。使用过 TUN 模式的,如果网卡 DNS 被改动,可以把它改回自动获取,再运行 ipconfig /flushdns 清空缓存。各系统的具体做法,同样可以参考上文提到的电脑与手机使用指南。
常见问题
curl 能通,但浏览器还是打不开,问题在哪?
开了 TUN 模式反而全部打不开,只用系统代理就正常,为什么?
手机显示 VPN 已连接,但 App 都打不开怎么办?
在公司或学校的电脑上一直打不开,有什么特殊原因?
参考资料
- Microsoft 支持:Use a proxy server in Windows :Windows 手动代理与自动代理脚本的设置位置
- Clash Verge Rev 官方文档 :系统代理、TUN 模式与端口设置
- v2rayN GitHub :系统代理选项与本地监听端口
- 虚空终端 mihomo 文档 :入站端口、日志级别与代理配置字段