连接排障 · Clash 技术博客

Clash 连不上 ChatGPT 或 Claude?登录与超时排查

“连不上”可能是登录循环、Access Denied、请求超时或长回复中断。先固定一个出口并重现原来的错误,再按错误发生的位置处理。

  • Claude
  • ChatGPT
  • Access Denied
本文目录

页面上的错误,决定这次该查哪一层

ChatGPT 或 Claude 打不开时,先把页面上的原话记下来。一直转圈、ERR_TIMED_OUT 与 403 Access Denied 不是同一类故障;401、429、5xx 也各自指向认证、频率限制或服务端异常。只写“不能用”,后面每一步都只能靠猜。

页面结果先这样分

看到的现象优先判断
页面框架出现,图标、按钮或登录组件空白静态资源域名可能走了不同规则或出口
ERR_CONNECTION_TIMED_OUT / 请求超时网络路径、节点或长连接失败
401 / Unauthorized登录状态、令牌或 API 凭据
403 / Access Denied服务策略、账号状态或请求被拒绝
429 / Too Many Requests频率或额度限制,不是节点延迟
500 / 502 / 503服务端或上游临时异常,先看官方状态
回复写到一半停止流式连接、节点切换或网络抖动

浏览器首页能打开,只说明主页面到了。脚本、图片和登录组件可能来自其他静态资源域名,登录跳转、文件上传和模型流式回复也会产生不同请求。页面只有外壳时,要在 Connections 中确认这些资源是否和模型请求走同一稳定出口,而不是拿另一个网页代替测试。

固定一个出口,保留可以比较的失败现场

建立可复现的测试

  1. 在 Proxies 固定一条节点

    暂时不要使用 url-test 或 fallback,避免测试过程中出口变化。

  2. 保持 Rule 模式

    打开 Connections,准备观察失败动作对应的域名与规则。

  3. 只重复一个动作

    例如点击登录、发送同一句短消息,或上传同一个小文件。

  4. 保存页面状态和 Clash 结果

    记下 HTTP 状态、连接出口、耗时与日志错误。

如果失败动作在 Connections 中完全找不到,浏览器或桌面应用可能没有经过当前 Clash。若记录出现但命中 DIRECT,检查规则;已经走到固定节点却 timeout,才值得换节点或网络做对照。

登录页反复跳回,重点是会话有没有建立

登录循环常表现为输入账号后又回到登录页,或者验证码完成却没有进入对话。此时先在同一浏览器的无痕窗口重试,排除过期会话和扩展干扰;不要一上来清掉所有网站数据,那会同时退出其他账号。

观察点击登录后的请求:认证跳转若没有进入 Clash,处理浏览器代理;请求进入后返回 401 或 403,则网络已经到达服务,继续检查账号、登录方式和服务提示。频繁换地区或出口还可能让一次登录跨越多个会话环境,测试期间应保持固定节点。

登录问题需要留下的信息

  • 发生循环的具体页面和按钮
  • 无痕窗口是否得到相同结果
  • 失败请求返回 401、403 还是 timeout
  • 登录前后是否一直使用同一固定出口

Access Denied 不是“再加一层代理”就能解决

明确的 403 或 Access Denied 通常说明请求已经到达网站,只是被拒绝。检查页面给出的原因、账号状态、地区限制、服务支持范围和当前出口是否符合服务条款;这与 DNS 超时、端口没开属于不同层。

Global 模式最多用于判断某条规则是否把请求送错了出口,不能把服务端拒绝变成网络成功。若 Rule 和 Global 都在同一固定节点上返回同一个 403,应停止调整 Clash,转而处理账号或服务政策。

短网页正常、长回复中断,要测试连接持续性

模型回复是持续返回的数据流。节点能完成一次延迟探测,并不代表它能稳定维持几十秒的连接。用一条稍长但可重复的提问测试,观察中断时 Connections 的结束原因;同时关闭自动切换,避免回复中途被换到另一个出口。

同一固定节点在家庭网络和手机热点上各试一次。若只在其中一个网络中断,重点检查这个网络和 DNS;若两个网络都在相近位置中断,换另一条协议或节点对照。不要用一次成功就下结论,至少重复两三次相同请求。

回复中断时出现 timeout

比较另一固定节点与另一网络,找出是节点出口还是本地网络。

中断瞬间策略组自动换节点

排障期间改用 select 固定出口,稳定后再调健康检查。

页面提示 429

查看账号额度与频率说明,继续测速不会消除限制。

所有用户同时收到 5xx

查看服务官方状态,等上游恢复后复测。

网页能用、桌面端或 API 不行,要看进程是否读取系统代理

浏览器通常遵循 Windows 或 macOS 系统代理,终端里的 curl、SDK 和部分桌面应用则可能使用自己的网络设置。执行同一个 API 请求时,Connections 没有任何记录,说明请求还没进入 Clash,换节点没有意义。

命令行工具可以按自身文档配置 HTTP_PROXY、HTTPS_PROXY;需要统一接管多个不读取系统代理的应用时,再考虑 TUN。API 返回 401 代表请求已经到服务端,应该核对 API key 和请求格式,而不是继续扩大代理范围。

macOS / Linux 临时对照,先把 7890 换成客户端实际端口
CLASH_PORT=7890
export HTTP_PROXY="http://127.0.0.1:${CLASH_PORT}"
export HTTPS_PROXY="http://127.0.0.1:${CLASH_PORT}"
export NO_PROXY="localhost,127.0.0.1,::1"
curl -I https://example.com
Windows PowerShell 临时对照,7890 同样是端口占位值
$CLASH_PORT = 7890
$env:HTTP_PROXY = "http://127.0.0.1:$CLASH_PORT"
$env:HTTPS_PROXY = "http://127.0.0.1:$CLASH_PORT"
$env:NO_PROXY = "localhost,127.0.0.1,::1"
curl.exe -I https://example.com

用一条短消息确认请求能完整结束

回到固定节点和 Rule 模式,完成一次登录并发送一条短消息。Connections 里应能看到这次操作涉及的请求,页面不再返回原来的错误,回复也能完整结束。

若仍失败,就按现象继续处理:没有连接记录就检查接管方式,显示 DIRECT 就检查规则,出现 timeout 就比较节点和网络,返回 401、403 或 429 则按服务端结果排查。

一条短消息能完整返回以后,再恢复 url-test 或 fallback。若自动组恢复后问题重现,这次就有明确的对照:账号和规则没有变化,变化的是出口选择。

参考资料