为什么浏览器能用,Claude Code 终端却连接不稳定
在浏览器里打开 Claude 网页,不代表终端中的 Claude Code 已经走上同一条代理线路。浏览器通常会读取操作系统的系统代理设置,而命令行程序由当前 Shell 启动,可能忽略系统代理;Claude Code 发起请求时所用的网络库、版本和运行环境也会影响它是否识别代理变量。因此,「网页正常、终端报连接错误」并不能直接说明节点失效,先要确认请求是否进入 Clash Verge。
还要区分登录与运行阶段。登录可能涉及授权页面、账户验证和回调,开始对话后则会访问模型 API,并可能建立持续传输的连接。若其中一部分域名走代理、另一部分直连,症状可能表现为登录反复跳转、请求超时、回复中途断开,或等待一段时间后才重试。此时一味更换节点不一定有帮助:应该先看 Clash Verge 的连接记录,确认终端请求出现的时间、目标域名、命中的规则以及所选出站。
本文以当前电脑本机运行 Claude Code、Clash Verge 与 Mihomo 内核为前提。界面名称会随客户端版本略有变化,端口也由配置决定;不要把常见示例端口当作固定值。开始前确认 Clash Verge 已载入配置、核心处于运行状态,并且所选策略组中有可用节点。若设备受到公司网络策略管理,应先遵守组织规定,不要擅自绕过访问控制。
先在 Clash Verge 确认代理端口与运行模式
打开 Clash Verge 的设置或端口信息页面,查看当前的 mixed-port、HTTP 端口或 SOCKS 端口。mixed-port 通常可同时接收 HTTP 与 SOCKS 流量,但是否启用、监听在哪个地址,都取决于当前配置;如果界面显示的是单独端口,就要按对应协议填写环境变量。以下示例中的 7897 只是演示值,请替换为你实际看到的端口。通常使用本机地址 127.0.0.1,不要为了让其他设备连接而随意开放局域网监听。
接着检查主界面的代理模式。日常使用优先从规则模式开始:由配置中的规则决定哪些连接代理、哪些直连。在 Proxies 或策略组页面中,选择当前可用的代理出站,并观察延迟测试与连接状态。若终端连接日志没有对应请求,问题可能在客户端未使用代理变量、端口写错或核心未监听;若日志出现请求但走了直连或错误策略组,再检查分流规则。
可以暂时切换到全局模式做一次短时对照,但不要把它当作长期修复。若全局模式下请求进入代理并成功,而规则模式失败,说明需要检查规则命中;若两种模式都没有终端连接记录,优先回到 Shell 环境变量、端口和运行状态排查。测试结束后切回适合日常使用的规则模式,避免其他不相关流量也被送往代理。
若应用不读取代理变量,或者你需要让更多未配置代理的程序也经由 Clash,可评估启用 TUN。TUN 在系统网络层接管流量,通常比逐个为命令行工具设置环境变量覆盖面更广,但需要相应权限,并可能与 VPN、虚拟机网络、企业安全软件或其他虚拟网卡冲突。建议先用普通端口代理验证成功,再测试 TUN;遇到网络整体失效时,应先关闭刚启用的功能并恢复到上一步,而不是同时调整多项网络设置。
为终端设置环境变量并验证是否生效
在 macOS 或 Linux 的终端中,先于当前会话临时设置代理,再启动 Claude Code。HTTP 代理示例适用于 Clash Verge 提供 HTTP 或 mixed-port 的情况;实际端口请以客户端显示为准。用同一个终端窗口运行程序,能避免变量只写入某个 Shell、却没有传给另一个进程的问题。
export HTTP_PROXY="http://127.0.0.1:7897"
export HTTPS_PROXY="http://127.0.0.1:7897"
export ALL_PROXY="socks5h://127.0.0.1:7897"
claude
不同客户端与运行库支持的变量可能不同,不必一开始就同时设置所有协议。若使用 HTTP/mixed-port,可先只设置 HTTP_PROXY 与 HTTPS_PROXY;若使用 SOCKS 端口,再按该端口的协议设置 ALL_PROXY。socks5h 通常表示域名解析也交由代理侧处理,但并非所有程序都接受这种写法。设置多个变量若造成行为难以判断,就删减到与所用端口相匹配的一组,再逐项测试。
Windows PowerShell 可在当前窗口临时设置相应变量,退出窗口后这些值通常不会继续保留。若 Claude Code 是从 VS Code、Windows Terminal 配置、任务计划或其他启动器打开,变量是否继承还取决于启动器进程;在一个 PowerShell 窗口里测试成功,不代表从另一个图标启动的程序也会得到相同设置。
$env:HTTP_PROXY = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:ALL_PROXY = "socks5h://127.0.0.1:7897"
claude
运行前可检查当前 Shell 是否确实保存了变量:macOS/Linux 使用 printenv HTTPS_PROXY,PowerShell 使用 $env:HTTPS_PROXY。如果输出为空,说明变量没有在当前会话生效;如果值仍是旧端口,更新配置后重新打开终端或重新设置。确认变量无误后启动 Claude Code,再打开 Clash Verge 的连接页观察是否出现新的终端连接。变量存在只证明 Shell 已设置它,并不证明 Claude Code 一定使用了它,最终还要以连接记录和实际请求结果为准。
排查完成后,如果希望每次打开终端都自动使用代理,可以把变量写入对应 Shell 的启动配置,但更稳妥的做法是按需启用,并保留清晰的关闭方式。需要临时直连时,可以在当前会话中清除变量,或新开一个未设置代理变量的终端。不要把代理地址、访问令牌或账号密钥复制到公开日志、截图或配置仓库中;环境变量本身也可能被同一用户权限下的调试工具读取。
用连接日志核对分流,并处理常见失败
当终端已指向正确端口,下一步是在启动 Claude Code 后立即查看 Clash Verge 的连接记录。优先关注目标主机名、规则类型、命中的策略组、实际出站和连接结果。Claude Code 使用的具体域名可能随版本、登录方式和服务配置变化,因此不建议仅凭一份旧域名清单就断定覆盖完整。以实际日志中出现的主机名为准,再逐条确认它们是否进入预期的代理策略组。
如果目标域名命中 DIRECT,而该服务需要经代理访问,检查配置的规则顺序与已有规则集;更具体的规则通常需要放在可能提前匹配的宽泛规则之前。可按 Mihomo 规则语法为日志中确认的域名添加后缀匹配,并把它指向已有策略组,但不要把未经验证的域名或宽泛关键字规则整段照抄进配置。改动配置前先备份;若订阅更新会覆盖本地修改,应使用客户端支持的覆写方式,或在更新后重新核对规则是否仍存在。
如果日志显示连接已经交给代理,但仍然超时,先用另一个节点做对照,并区分连接建立失败与连接建立后流式响应中断。单次失败可能来自节点线路、远端服务状态、出口质量或连接被中途重置;持续流式请求尤其容易暴露不稳定的线路。切换节点时尽量一次只改一个变量,记录同一请求的时间与结果。若不同节点表现相同,再检查系统时间、DNS、客户端版本和终端运行环境,不要因延迟测试数值正常就认为长连接一定可靠。
如果 Clash Verge 完全没有相关记录,先核对终端端口和协议是否匹配、代理变量是否传递给当前进程,以及核心是否仍在运行。若只有浏览器记录而没有终端记录,通常说明终端没有使用系统代理,或 Claude Code 所在的容器、远程 Shell 与本机代理不在同一网络命名空间。Docker、SSH 远程主机与 Dev Container 里的 127.0.0.1 指向各自环境,并不自动等于运行 Clash Verge 的宿主机;这类场景需要单独配置可达的代理地址,并评估监听范围与访问安全。
遇到证书错误时,不要关闭 TLS 校验,也不要随意安装来源不明的根证书。先检查系统日期、网络是否经过需要认证的企业网关,以及当前代理线路是否正常;如果日志显示连接成功但应用报授权错误,还应确认账号登录状态和服务端返回的信息。用清晰的错误类型区分网络超时、解析失败、TLS 握手失败与账户权限问题,可以避免把所有故障都归结为「Clash 节点不行」。
相比只负责设置系统代理的简易工具,Clash Verge 能让你同时检查代理端口、策略组和连接日志;相比不区分流量的全局 VPN,它也更便于把 Claude Code 相关请求与日常直连流量分别管理。若你希望在一个界面里完成节点选择、规则分流和终端代理排查,可前往 下载 Clash V.CORE,再按本文方法先验证本机端口与 Shell 环境,逐步确认 Claude Code 的请求是否进入预期线路。