运行 Claude Code 时,如果命令一直等待,最后出现 ETIMEDOUT、连接重置或无法完成登录,而浏览器里的 Claude 页面却能打开,问题未必出在账号或模型上。桌面应用、浏览器和终端命令可能采用不同的网络路径:浏览器跟随了 Clash 的系统代理,启动 Claude Code 的 shell 却没有代理环境变量;也可能是 Clash 已接管流量,但规则将 Anthropic 请求判为 DIRECT,或当前节点无法稳定连接目标服务。
排查时先别同时更换客户端、订阅和配置。把问题拆成三段更容易定位:Claude Code 进程是否把请求交给 Clash、Clash 是否将相关域名送入预期策略组、代理节点到服务端的链路是否可用。本文以 Clash Verge Rev 和 Mihomo 常见设置为例,说明如何检查终端代理变量、连接记录、规则命中和节点状态。不同客户端的菜单名称可能不同,判断时以当前界面实际显示的端口、策略和连接日志为准。
先识别错误:连接超时不等于账号故障
Claude Code 出错时,先记录完整报错、发生时间以及触发操作,例如启动命令、登录或发送请求。错误文本能帮助区分网络层和服务层问题。ETIMEDOUT、ECONNRESET、TLS 握手卡住,通常值得优先检查代理路径、DNS、节点和本机网络;若请求很快返回 401 或 403,则更可能与认证状态、权限或账户配置有关。遇到限流提示或明确的服务端错误,也不要简单当成代理超时处理。
接着打开 Clash Verge Rev 的连接面板,在终端重新触发一次失败操作,并查看是否出现 Anthropic 相关主机连接。常见情况下会看到 api.anthropic.com 等域名;登录流程还可能请求其他鉴权或控制台主机,具体以实际记录为准。观察时重点看三项:连接是否出现、匹配到的规则是什么、最终策略是 DIRECT 还是代理策略组。
- 没有相关连接记录:Claude Code 可能没有使用当前 Clash 端口,进程也可能在另一个容器、远程开发环境或不同用户会话中运行。
- 记录显示 DIRECT:先检查规则顺序、规则集覆盖范围和域名匹配,再考虑换节点。
- 记录进入代理组但反复失败:检查所选节点、DNS 和网络稳定性,并用另一节点对照测试。
- 很快返回认证或权限错误:优先检查 Claude Code 登录状态和账号权限,避免把服务层错误误判成连接超时。
不要只凭浏览器能打开某个网站就断定 Claude Code 的网络正常。浏览器可能走系统代理、扩展代理或另一套网络配置,而命令行程序只会使用它所支持的代理设置。
让 Claude Code 所在的终端使用 Clash 代理
在 Clash 中找到当前配置的 mixed-port(混合端口),或确认专用 HTTP 代理端口。常见默认值是 7890,但配置可以更改,不能照抄示例后就认为端口一定正确。检查客户端的端口设置,并确认 Clash 正在运行。下面以本机 HTTP 代理端口 7890 为例;若实际端口不同,请替换为界面显示的数值。
macOS、Linux 或使用 Bash、Zsh 的终端,可在启动 Claude Code 的同一个终端会话中设置环境变量:
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=http://127.0.0.1:7890
对于常见的 HTTPS API 请求,HTTPS_PROXY 尤其值得核对;有些运行时或依赖库只读取其中部分变量,因此同时设置大小写形式可能有帮助。需要时也可以添加小写变量:
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"
如果你使用 SOCKS 端口,不要把它误写成 HTTP 代理地址。SOCKS 代理应使用客户端实际支持的协议格式;而多数只配置了 HTTP 代理变量的程序,不能直接把一个 SOCKS 端口当成 HTTP 端口使用。先确认端口类型,再选择匹配的 URL。
Windows PowerShell 可在当前窗口中设置环境变量,再从该窗口启动程序:
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:ALL_PROXY = "http://127.0.0.1:7890"
设置后可检查当前会话实际持有的变量。macOS 或 Linux 使用 env | grep -i proxy;PowerShell 可分别查看 $env:HTTPS_PROXY 和 $env:HTTP_PROXY。确认值正确后,在同一个窗口重新运行 Claude Code。只修改 ~/.zshrc 或 Windows 的用户环境变量,却不重启已经打开的终端和 IDE,可能导致旧进程仍拿不到新设置。
127.0.0.1 对远程环境而言,指向的并不是你的桌面电脑。
只有确认当前进程需要直连的内部域名或本地服务时,才设置 NO_PROXY。不要把 Anthropic 域名误加进去,否则即使设好了 HTTPS_PROXY,请求也可能被明确排除在代理之外。若曾经配置过 NO_PROXY,检查其中是否包含过宽的通配符、域名后缀或目标主机;修改后重新启动 Claude Code,避免沿用旧环境。
检查 Clash 规则、模式与 DNS 命中
环境变量只负责把请求交给本机代理端口,并不决定最终使用哪个节点。实际出口仍由 Clash 的规则和策略组控制。先确认当前处于适合分流的模式,并在连接面板中查看 Claude Code 请求对应的匹配规则和策略组。若该域名落入 DIRECT,可检查订阅规则、覆写规则及规则排列顺序:越靠前的规则可能先匹配,后面添加的代理规则未必能覆盖已有的直连规则。
如果需要为 Anthropic 域名增加规则,应使用当前配置支持的规则格式,并将规则放在能够先于宽泛直连规则匹配的位置。常见思路是针对确认需要代理的域名或域名后缀指定代理策略组,而不是将所有流量永久切到全局代理。不同订阅和配置的策略组名称并不相同,添加规则前先从实际配置中确认目标组;不要直接复制一个不存在的组名,导致配置校验失败或请求仍走默认策略。
- 规则命中但策略组选择错误:在客户端策略组中切换到可用节点,再触发一次请求,比较连接结果。
- 规则命中 DIRECT:检查是否有更早的直连规则、规则集更新或覆写配置覆盖了自定义项。
- 只看到 IP、看不到域名:可能与 DNS 解析、连接嗅探或流量接管方式有关;不要仅凭 IP 判断规则没有生效,结合连接详情和当前 DNS 设置继续核对。
- 部分请求走代理、部分请求失败:登录、更新和 API 调用可能涉及不同主机,需根据面板中实际出现的域名逐项判断,不要只添加一个猜测出来的主机。
可先在连接面板搜索 anthropic,观察 Claude Code 发起请求时新出现的连接。若自定义规则尚未生效,检查配置是否已保存并重新加载;若规则已命中但请求仍显示直连,则继续查规则优先级和策略组状态。对于订阅托管配置,优先使用客户端支持的规则覆写功能,不要直接修改每次更新都会被覆盖的临时文件。
排查 DNS 时,注意本地解析和代理侧解析可能产生不同结果。某些域名在本地能够解析,不代表目标地址上的 TLS 与服务链路正常;反过来,DNS 返回异常也可能让连接在进入有效代理路径前失败。一次只调整一个变量:先记录当前规则与节点,再测试 DNS 或规则变更。否则同时改模式、DNS 和规则后,即使故障消失,也难以知道真正起作用的是哪一项。
用对照测试区分节点、本机与服务端
当连接已经进入预期代理策略组,仍然发生超时,可以进行简单对照。先保持终端环境变量和 Clash 规则不变,只切换到另一个可用节点,再运行同一操作。如果换节点后连接稳定,问题更可能与原节点的负载、出口线路或目标服务可达性有关;如果多个节点都失败,而其他应用也无法通过 Clash 访问相同服务,就要检查 Clash 运行状态、端口监听、本机防火墙、DNS 设置或上游网络。
也可以用 curl 做基础连通性检查。示例中的地址用于测试 HTTP/TLS 链路,并不等价于完成 Claude Code 的登录、权限验证或模型调用:
curl -I --connect-timeout 10 https://api.anthropic.com
返回任何 HTTP 状态都不一定代表 API 可正常使用,但若命令持续卡在连接阶段或报告超时,就说明仍需检查网络路径。执行时确保 curl 所在 shell 与 Claude Code 使用相同的代理环境。若 curl 能完成 TLS 连接,而 Claude Code 仍失败,再查看 Claude Code 自身的认证状态、运行时、配置文件和错误详情;不要为了让测试返回某个特定状态码而发送不必要的请求或公开 API 凭据。
若你在 Docker、SSH 远程主机、WSL 或 CI 环境中运行 Claude Code,还要确认代理地址从该环境是否可达。容器内的 127.0.0.1 通常表示容器本身,而不是宿主机;远程服务器上的本机回环地址也不会自动连接到你笔记本的 Clash。此时要按实际网络拓扑提供可访问的代理地址,并在网络安全策略允许的前提下配置监听范围。不要为了图方便把代理端口无保护地暴露到公网。
完成每次测试后,记录时间、运行环境、所用节点、终端变量和连接面板中的策略结果。可重复的记录比「刚才好像正常了一次」更有用:如果相同节点和配置在某一时段持续失败,之后又恢复,可能涉及节点负载或服务端波动;如果始终只有 IDE、容器或某个用户账户失败,则优先检查它与正常环境之间的差异。
常见问题
浏览器能用 Claude,为什么 Claude Code 仍然超时?
浏览器可能自动使用系统代理或自己的代理扩展,而终端程序通常需要环境变量或其他明确支持的代理设置。先在启动 Claude Code 的同一终端检查 HTTPS_PROXY,再到 Clash 连接面板确认请求是否出现、是否命中代理策略组。浏览器能打开网页只能说明浏览器当前路径可用,不能证明命令行进程也走同一条路径。
切到 Clash 全局模式就一定能解决吗?
不一定。全局模式可能绕过规则分流方面的问题,但不能弥补错误端口、终端没有使用代理、远程环境无法访问本机代理或节点本身不可用。建议先通过连接记录找出失败环节;全局模式可以作为短时对照测试,测试完后恢复日常需要的模式,避免内网和国内流量也不必要地走代理。
返回 401 或 403,还要继续换节点吗?
先确认连接是否已经完成、错误是否稳定返回。如果 Clash 面板显示请求走到了预期节点,而 Claude Code 很快收到认证或权限相关响应,应检查登录状态、账户访问权限和当前使用的配置。换节点通常不能解决凭据无效或账号权限不足;网络层排障与账户问题应分别处理。
什么时候需要开启 TUN?
若程序不读取代理环境变量,且 Clash 规则模式无法接管该进程的流量,可以评估 TUN。它在系统网络层接管流量,可能与其他 VPN、虚拟网卡、安全软件或企业网络策略冲突。对于能显式设置代理的 Claude Code,通常先尝试“终端环境变量 + Clash 规则分流”,确认确实有进程无法覆盖后,再考虑 TUN,并在开启前记录原有网络设置。
和只能切换系统代理、却无法查看终端请求实际命中结果的简单工具相比,Clash 的连接面板、规则策略组与节点切换能把「程序没交给代理」「规则送去直连」和「节点链路不稳」分开验证,排查过程更有依据。如果你希望按自己的终端环境和网络需求选择客户端,可以前往下载页查看适用版本。