先分清 Claude Code 的请求路径
Claude Code 在终端中运行,登录、读取账号信息和调用模型接口时会发起网络请求。浏览器能访问网页,不代表终端进程也走了同一条代理路径:浏览器可能读取系统代理设置,而命令行程序通常需要读取当前进程的代理环境变量,或使用自身支持的代理配置。
排查时按请求经过的顺序检查:终端进程是否获得代理地址 → Clash 是否在该地址和端口监听 → 请求是否进入内核 → 规则将请求交给了哪个出站 → 节点是否能连接目标服务。若请求没有出现在 Clash 的连接记录中,优先检查终端环境变量、代理地址和监听端口;若记录已出现,再检查规则、出站和连接错误。
以下命令以本机 Clash 的 HTTP 代理入口为例,地址使用 127.0.0.1,端口使用示例值 7890。端口并非所有客户端的默认值,实际操作前先在 Clash Verge、Clash Verge Rev 或其他客户端的设置中查看 HTTP 或混合端口。若客户端只提供 SOCKS 端口,应使用相应的 socks5:// 地址;不要把 SOCKS 专用端口误当成 HTTP 端口。
检查 Clash 端口与代理连通性
先确认配置已激活、代理组中有可用出站,并且客户端没有显示内核启动错误。规则模式适合日常使用,但某个请求最终是直连还是走代理,取决于实际匹配的规则和代理组选择。只开启系统代理不会自动确保终端程序使用它。
在 macOS 或 Linux 的终端执行以下命令,测试本机 TCP 端口是否可连接:
nc -vz 127.0.0.1 7890
如果系统没有安装 nc,可以跳过这一步,直接使用 curl 发起显式代理请求:
curl --proxy http://127.0.0.1:7890 \
--connect-timeout 8 --max-time 20 \
-I https://api.anthropic.com/
Windows PowerShell 可使用系统自带的 curl.exe,避免同名命令别名造成参数差异:
Test-NetConnection -ComputerName 127.0.0.1 -Port 7890
curl.exe --proxy http://127.0.0.1:7890 `
--connect-timeout 8 --max-time 20 `
-I https://api.anthropic.com/
这里的 curl 测试用于验证本机代理入口及到目标地址的一次请求,不是 Claude Code 登录测试。返回 HTTP 响应不一定代表账号已获准使用服务;收到 401、403 或其他应用层响应,也不能单凭状态码认定节点故障。相反,连接被拒绝通常提示端口不对或客户端未监听;超时则还需要结合 Clash 连接记录与日志判断。
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| 本机端口连接失败 | 监听端口、客户端运行状态、地址是否写错 | 查看 Clash 设置中的 HTTP 或混合端口 |
| curl 立即显示连接拒绝 | 端口是否监听,以及 HTTP / SOCKS 类型是否匹配 | 改用实际代理类型和端口重试 |
| curl 超时且连接记录无请求 | 命令中的代理地址、终端环境和本机端口 | 先解决请求未进入 Clash 的问题 |
| 连接记录显示请求但访问失败 | 规则命中、代理组成员、节点与 DNS 错误 | 沿连接记录查看最终出站和日志详情 |
为终端进程设置代理
许多命令行工具会读取 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 环境变量。先在当前终端临时设置,再启动 Claude Code,便于验证且不会修改系统范围的代理设置。下面的地址假设 Clash 正在本机的 7890 端口提供 HTTP 或混合代理。
macOS 与 Linux
export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"
export NO_PROXY="localhost,127.0.0.1,::1"
claude
不少工具同时读取小写变量。若设置大写变量后仍不生效,可在同一个终端补充小写形式再测试:
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export no_proxy="$NO_PROXY"
如果你确认 Clash 提供的是 SOCKS5 入口,可把代理地址改为实际的 SOCKS 端口,例如 socks5h://127.0.0.1:7891。这里的 7891 也只是示例。协议前缀、端口和客户端监听类型必须一致;不要把 SOCKS 地址写到 HTTP 端口上。不同程序对代理协议和 DNS 解析位置的支持不完全相同,遇到问题时可先用明确的 HTTP 或混合代理入口做对照。
Windows PowerShell
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:NO_PROXY = "localhost,127.0.0.1,::1"
claude
环境变量只对设置它的终端进程及其子进程生效。若在一个窗口设置变量,却从开始菜单、IDE 或另一个终端启动 Claude Code,新进程未必能继承这些设置。修改变量后应在同一窗口启动程序;若 Claude Code 已经运行,需要先退出并重新启动。
验证完成后,可关闭临时终端,或在当前 shell 中清除变量。macOS 与 Linux 可以执行 unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy NO_PROXY no_proxy;PowerShell 可执行 Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:NO_PROXY -ErrorAction SilentlyContinue。若将设置写入 ~/.zshrc、~/.bashrc 或 PowerShell 配置文件,之后每个新终端都可能继续使用它;持久配置前应确认确有需要,并保留恢复方法。
代理地址通常不需要填写账号密码。不要把 API 密钥、账号令牌或带认证信息的代理 URL 粘贴到公开日志、截图或共享终端历史中。客户端连接记录和终端输出可能包含目标域名、账号标识或其他敏感信息,分享前应先检查并脱敏。
配置分流并确认请求确实经过代理
终端环境变量解决的是“程序向哪里发送代理请求”,Clash 规则解决的是“内核收到请求后怎样转发”。两者不能互相替代。先保持当前配置的常用模式,再通过连接记录查看 Claude Code 实际访问的域名、命中的规则和最终出站。如果该请求命中 DIRECT,即使终端已经指向 Clash,也仍可能直接连接目标。
若已确认需要让相关请求走指定代理,可以在客户端提供的覆写、规则编辑或配置管理功能中添加规则,而不是直接覆盖订阅文件。下面只展示规则写法示意,需放进当前配置兼容的规则位置,并按实际情况替换代理组名称:
rules:
- DOMAIN-SUFFIX,anthropic.com,手动选择
- DOMAIN-SUFFIX,claude.ai,手动选择
手动选择 必须替换成配置中真实存在的代理组名称;规则要放在会先匹配该请求的宽泛规则之前。此示例只覆盖两个域名后缀,并不代表 Claude Code 的全部登录或服务请求都只访问这些域名。不同版本、登录方式和服务功能可能涉及其他域名;应以 Clash 连接记录中实际出现的目标为依据,确认归属后再考虑添加规则。不要因为请求失败就把所有流量改成全局代理,也不要随意添加不明来源的域名清单。
- 在 Clash 的连接页清空或筛选旧记录,然后在终端发起一次新的 Claude Code 请求。
- 确认出现了与本次操作相符的请求,并记录目标域名、匹配规则、策略组及最终节点。
- 如果没有请求记录,回头检查环境变量是否在启动进程时生效,以及代理端口是否正确。
- 如果请求命中预期规则但失败,再检查该出站的节点状态、日志错误和 DNS 解析结果。
- 修改规则后重新发起新请求验证;已经建立的连接不一定会因规则变化立即重新建立。
根据错误现象定位节点、DNS 与登录问题
错误文字可以帮助缩小范围,但不应脱离连接记录和运行环境单独解读。Claude Code 的登录流程可能打开浏览器进行授权,再由终端等待回调;浏览器与终端可能使用不同代理设置。浏览器登录成功,不一定说明终端到接口的请求也能连通;浏览器回调失败,也不一定代表模型接口节点不可用。
- 连接被拒绝或连接本机失败:确认 Clash 正在运行、监听地址为本机可访问地址,并核对端口及代理类型。若客户端只监听 SOCKS 端口,使用 HTTP 前缀可能无法建立正确连接。
- 请求长时间等待后超时:在 Clash 连接页确认请求是否进入内核。若已进入,检查最终出站、节点是否可用,以及客户端日志中的拨号、TLS 或超时信息;若未进入,则先检查启动 Claude Code 的终端环境。
- 提示名称解析失败:查看日志中的域名解析错误,检查当前配置的 DNS 设置以及节点服务器域名能否解析。目标域名 DNS、代理节点域名 DNS 和终端本机解析可能处于不同路径,不能仅凭浏览器可解析就判定内核 DNS 正常。
- 出现 401 或 403:这类响应需要结合登录状态、账号资格、服务可用地区与服务端返回内容判断。切换代理节点不能修正无效凭据或账号权限,也不意味着服务会对所有地区开放。
- 提示速率限制或服务繁忙:检查请求频率、账号状态和服务端响应。反复刷新登录、同时启动多个会话或高频重试,可能增加请求次数;应先停止重复操作并查看完整错误信息。
- 浏览器能登录而终端仍失败:分别确认浏览器和终端使用的网络路径、登录回调是否成功,以及终端进程是否继承代理变量。不要把浏览器的系统代理状态当作终端已经配置的证据。
DNS 排查时,不要为了“修复解析”而直接关闭所有 DNS 接管、删除缓存或替换整份配置。先比较同一请求在 Clash 连接记录与日志中的目标名称和解析错误,再做一项可回退的改动。若怀疑节点异常,可选一个已确认可用的出站进行对照;延迟测试通过只说明探测请求在当时可达,不保证登录流程、身份认证和所有接口都能正常完成。
确认网络路径后,再使用 Claude Code 提供的正常登录流程检查账号状态。不要在排查文档或命令历史中公开访问令牌、密钥、订阅地址或完整认证响应。若错误明确指向地区、账号或服务资格,应以服务提供方当前的官方说明为准,而不是不断更换代理规则。