Claude Code 在终端中运行,是否能连接服务取决于命令行进程能否访问所需的网络地址。浏览器已经通过 v2rayN 打开网页,只能说明浏览器当前的流量路径可用;终端可能没有读取系统代理设置,仍在直接连接。排查时应依次确认节点、v2rayN 本地监听端口、代理协议、终端环境变量和目标服务响应,而不是先反复更换节点或修改订阅参数。
本文以 v2rayN 和常见终端为例,说明如何确认本地 HTTP、SOCKS 或混合代理入口,设置 Claude Code 可读取的代理环境变量,并用 curl 验证链路。端口示例不代表你的默认配置;实际值应以 v2rayN 设置和监听状态为准。代理能建立网络连接,也不等于账户、服务区域或 API 权限一定符合 Claude Code 的使用要求。
一、先理清 Claude Code 的连接路径
Claude Code 的请求由终端中启动的命令行进程发出。v2rayN 管理订阅、节点和路由,并在本机启动代理核心;终端程序连接的是本机代理入口,而不是直接连接订阅里的远端节点地址。浏览器与终端是两个不同的应用,即使浏览器已能访问网页,终端也可能没有配置代理。
可以把排错拆成四层:v2rayN 是否成功启动核心并选中可用节点;本地端口是否正在监听;终端变量是否指向正确端口和协议;目标服务是否返回了可解释的 HTTP 响应。逐层确认能避免把“终端没走代理”误判成节点失效,也能区分网络连通与账户认证问题。
- 节点层:确认 v2rayN 已更新订阅、选中活动节点,且核心日志没有配置解析失败或远端连接错误。
- 本地入口层:确认要使用的 HTTP、SOCKS5 或混合端口确实由当前核心监听。不要仅凭常见端口号猜测入口类型。
- 终端层:检查当前终端进程的环境变量。只在客户端中开启系统代理,不保证所有命令行工具都会自动读取。
- 服务层:网络请求成功后,再看 Claude Code 返回的登录、权限、账户或服务区域提示;这些提示不一定能通过换节点解决。
如需取得客户端,可从本站下载中心选择适合当前桌面系统的版本。先完成 v2rayN 的基础连接验证,再配置 Claude Code,排错时就能少一个变量。
二、在 v2rayN 中确认本地代理入口
打开 v2rayN 的「设置」→「参数设置」,查找本地监听端口、入站类型或类似字段;不同版本的分组和字段名称可能略有差别。分别记下 HTTP、SOCKS 或混合入口对应的端口。若只看到一个端口,也应查看界面说明或核心日志,确认它接受的协议,不能把 SOCKS 端口直接当作 HTTP 端口填写。
本机入口示例
- 监听地址
- 127.0.0.1
- 示例端口
- 10808
- 入口协议
- 以客户端实际配置为准
- 检查位置
- 参数设置与核心日志
10808 只是演示值;不要因为常见示例使用它,就认定本机也在该端口监听。
终端变量格式
- HTTP 入口
- http://127.0.0.1:端口
- SOCKS 入口
- socks5h://127.0.0.1:端口
- 绑定地址
- 本机使用 127.0.0.1
- 作用范围
- 启动命令的当前进程环境
变量中的 URL 协议必须与 v2rayN 实际监听类型相符;端口号按本机值替换。
在 Linux 上可以用下面的命令查看示例端口是否处于监听状态。若端口不是 10808,替换为实际数字。输出中的监听地址若是 127.0.0.1,表示供本机连接;若没有输出,先回到 v2rayN 检查核心是否启动、端口是否配置正确,以及是否有其他进程占用了端口。
ss -lntp 'sport = :10808'
Windows 可在 PowerShell 中检查本地监听:
Get-NetTCPConnection -LocalPort 10808 -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess
本机终端连接代理时通常使用回环地址 127.0.0.1。不要为了让 Claude Code 使用代理而打开“允许局域网连接”;该选项针对其他设备访问电脑代理的场景,会扩大可连接范围,与本机进程访问本机端口不是一回事。
三、为终端设置代理环境变量
许多命令行网络工具会检查 HTTP_PROXY、HTTPS_PROXY 和 ALL_PROXY 等环境变量。变量应设置在启动 Claude Code 的同一个终端会话中。下面以 HTTP 代理端口 10809 和 SOCKS5 端口 10808 为演示值;若 v2rayN 实际端口或入口类型不同,请替换为对应值,不要同时把多个协议名硬套到同一个不兼容的入口上。
-
确认节点
在 v2rayN 中选中活动节点,查看核心日志,确认核心已正常启动。节点名称本身不能证明连接可用;必要时先用客户端提供的连接测试,再从浏览器确认基础访问。
-
核对端口
进入「设置」→「参数设置」,确认 HTTP 或 SOCKS 入口的监听地址和端口。后续命令中的
10809、10808均为示例,分别替换成对应的实际端口。 -
设置变量
在当前终端设置代理变量。使用 HTTP 入口时,代理 URL 写成
http://127.0.0.1:端口;使用 SOCKS5 时,可用socks5h://127.0.0.1:端口,并确保该端口确实提供 SOCKS5。 -
先测请求
先用 curl 请求普通 HTTPS 网站,再测试目标服务域名。若第一步就提示连接被拒绝,优先检查本地监听、端口和协议,不要先排查账户登录。
-
启动程序
在变量仍有效的同一终端里运行 Claude Code。若关闭终端或另开一个未设置变量的窗口,原会话中的临时设置通常不会自动带过去。
Linux 与 macOS:当前 Shell 会话
在 Bash、Zsh 等常见 Shell 中,以下命令使用 HTTP 代理端口示例。执行后,当前 Shell 启动的子进程通常会继承这些变量。若 v2rayN 的 HTTP 入站不是 10809,请按实际设置修改;如果只提供 SOCKS5,则改用对应的 SOCKS URL。
export HTTP_PROXY="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"
export ALL_PROXY="http://127.0.0.1:10809"
claude
使用 SOCKS5 时,可把变量设为如下形式。socks5h 表示由 SOCKS 代理处理域名解析,适用于需要避免本机先行解析目标域名的情况;它并不会修复不可达的代理端口,也不代表所有应用都一定支持所有代理 URL 格式。
export HTTP_PROXY="socks5h://127.0.0.1:10808"
export HTTPS_PROXY="socks5h://127.0.0.1:10808"
export ALL_PROXY="socks5h://127.0.0.1:10808"
claude
Windows:PowerShell 当前会话
PowerShell 中可使用进程环境变量启动程序。下面以 HTTP 入口为例,端口仅作演示。执行 echo 可以确认变量已写入当前会话,但还不能证明代理端口可连接;下一节还要用 curl 实测。
$env:HTTP_PROXY = "http://127.0.0.1:10809"
$env:HTTPS_PROXY = "http://127.0.0.1:10809"
$env:ALL_PROXY = "http://127.0.0.1:10809"
echo $env:HTTPS_PROXY
claude
若想取消当前 PowerShell 会话中的变量,可执行:
Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue
优先用临时会话验证,不要一开始就把未知端口写进系统级环境变量或长期 Shell 配置。这样可以避免其他程序也被意外导向代理,并方便在测试结束后恢复原状。
四、验证终端确实通过代理请求
先验证“终端到本机代理”这段链路,再验证“代理到目标网站”这段链路。下面用 curl 发出 HTTPS 请求,-I 只请求响应头。收到目标站点的 HTTP 状态码,通常说明 DNS、TCP 和 TLS 已经走到某个响应阶段;它不代表登录成功,也不等于 Claude Code 的所有请求都必然使用同一条网络路径。
curl -I -x http://127.0.0.1:10809 https://example.com
curl -I -x http://127.0.0.1:10809 https://api.anthropic.com
若使用 SOCKS5 入口,可显式指定代理协议进行对照:
curl -I --proxy socks5h://127.0.0.1:10808 https://example.com
这里的 -x 参数只影响当前 curl 命令,不会替 Claude Code 设置环境变量。先比较显式指定代理的请求和不指定代理的请求;如果前者成功、后者失败,说明终端默认没有自动使用该入口。接着在变量已经设置的 Shell 中运行 curl -I https://example.com,检查环境变量是否被 curl 读取。
判断原则:收到 HTTP 响应不等于服务授权通过
测试目标返回 200、301、401、403 或 404,都可能表示请求已经到达目标并收到响应;状态码的含义不同,不能一概当成代理失败。若 curl 能建立 TLS 连接,但 Claude Code 提示账户、认证或服务不可用,应分别检查登录状态、账户权限和服务要求,不要把它们与本地端口故障混为一谈。
Claude Code 能否使用某个服务,还会受到账户、组织策略、服务可用范围和服务条款约束。代理只是网络连接路径,不会替代账户资格或权限校验;如果服务明确拒绝访问,应按服务方的官方要求处理,不应通过反复更换代理来规避限制。
五、超时、拒绝连接与请求失败怎么排查
遇到失败时,先记录完整错误文本、发生时间、所用代理协议和本地端口。不要公开订阅链接、认证信息、访问令牌或包含个人信息的日志。按错误发生的位置逐步缩小范围,通常比一次性改 DNS、端口和节点更容易找到原因。
浏览器能用,Claude Code 还是超时?
浏览器可能读取系统代理,而命令行没有。先在启动 Claude Code 的同一终端执行 echo $HTTPS_PROXY(PowerShell 用 echo $env:HTTPS_PROXY),再确认变量写的是正在监听的本地入口;变量未设置或端口不匹配时,浏览器正常也不能证明 CLI 已走代理。
提示 connection refused 是节点坏了吗?
不一定。该提示常见于本地地址可达但目标端口没有进程监听,或客户端监听类型与端口填错。先在 v2rayN 查看入口和核心状态,再用 ss 或 PowerShell 检查端口;确认本地连接成功后,再看核心日志中的远端错误。
HTTP 和 SOCKS 端口应该填哪个?
选择终端变量格式能够支持、且 v2rayN 确实监听的入口。HTTP 代理 URL 使用 http://;SOCKS5 入口可用 socks5h://。两种入口不能只靠改 URL 前缀互相转换,端口也必须对应各自的协议。
curl 成功,但 Claude Code 仍然报错?
确认 Claude Code 是从已设置变量的同一个终端启动,而不是通过另一个图形入口或旧终端会话启动。随后查看错误是否指向登录、账户权限、模型访问或服务响应;网络可达只证明连接链路的一部分正常。
如果请求间歇性超时,可以在相同网络、相同端口和相同测试目标下重复几次,并对照 v2rayN 核心日志的时间戳。所有目标都失败,优先检查节点和本地代理;只有特定域名失败,继续核对路由规则、DNS 和目标服务响应。一次超时不足以证明某个节点永久不可用,也不宜据此修改节点订阅中的服务器参数。
六、整理成可复现的日常启动方式
临时变量适合初次测试,也便于确认问题是否来自代理配置。验证成功后,可按使用习惯决定是否写入当前用户的 Shell 配置文件;写入前保留原文件备份,并记录所用的本地端口。若端口可能随配置变化,长期保存之前先确认 v2rayN 的监听设置稳定,避免每次更新后出现旧变量指向空端口。
- 保持最小范围:只设置当前需要的终端会话,不要为了一个 CLI 工具无条件修改整台设备的网络设置。
- 区分代理入口:记清 HTTP 与 SOCKS5 各自的监听端口,环境变量中的 URL 协议要与实际入口相符。
- 先验证再启动:用 curl 检查本地端口和目标响应,再运行 Claude Code;失败时保留错误原文和核心日志时间点。
- 保护凭据:订阅地址、环境变量、认证令牌和日志都可能包含敏感内容,分享前应检查并遮盖。
- 尊重服务要求:代理连通不代表账户或服务权限合规。遇到访问拒绝,应按服务提供方要求确认账户状态与可用范围。
整个配置的关键不是让浏览器“看起来能上网”,而是确认 Claude Code 所在的进程继承了正确的代理变量,并能连接 v2rayN 正在监听的本地入口。按节点、本地端口、终端变量、目标响应的顺序验证,可以把“代理没有接上”和“服务本身拒绝请求”分开处理。