Claude Code 适合在终端中辅助编程,但安装依赖、账户登录、模型请求和扩展下载都需要稳定的网络连接。很多用户已经在 v2rayN 中成功打开浏览器,却发现终端里的 Claude Code 仍然提示超时、无法连接或登录页面加载失败,原因通常不是节点失效,而是命令行程序没有继承 v2rayN 的代理设置。
本文以 Windows 上的 v2rayN 为主,同时补充 macOS、Linux 终端的通用写法。你将学会如何选择匹配的 Xray 内核、导入订阅、确认本地监听端口,并通过 HTTP_PROXY、HTTPS_PROXY 和 ALL_PROXY 为终端程序设置代理。示例只讨论客户端和终端配置,不提供账号绕过、接口伪造或修改服务端限制的方法。
如果浏览器能访问而 Claude Code 不能用,先在 v2rayN 开启系统代理或确认本地端口,再在当前终端设置代理变量,最后用命令测试连接。Windows PowerShell、命令提示符和 macOS/Linux 的变量写法不同,关闭终端后临时变量通常会失效。
先理解 v2rayN 与终端代理的关系
v2rayN 是运行在本机的代理客户端,通常会启动一个本地 HTTP 代理端口和一个 SOCKS 代理端口。浏览器是否能使用代理,取决于浏览器自身设置或系统代理状态;Claude Code 这类命令行程序则主要读取当前进程的环境变量。也就是说,在 v2rayN 主界面中选中节点,并不代表所有终端命令会自动经过代理。
常见的本地端口是 HTTP 代理 127.0.0.1:10809、SOCKS5 代理 127.0.0.1:10808,但不同版本、配置文件或用户自定义设置可能不同。不要直接复制网上的端口数字,应该在 v2rayN 的设置页面查看当前实际值。Windows 防火墙、其他代理软件或开发工具也可能占用相同端口。
终端代理与节点协议是两个层次。Claude Code 不需要知道你使用的是 VMess、VLESS、Trojan 还是 Shadowsocks,它只需要连接一个本地 HTTP 或 SOCKS 代理。v2rayN 再负责把本地请求按照当前节点的协议、传输方式、TLS 或 REALITY 参数转发出去。因此,终端变量填写的是本地监听地址,而不是订阅链接、服务器地址或节点 UUID。
结论:系统代理不等于终端代理
浏览器可以访问只能证明浏览器的流量走通了;要让 Claude Code 使用同一条线路,还必须让启动它的终端进程读取正确的代理变量。
选择 v2rayN 内核与可用节点
Claude Code 本身不解析 VMess 或 VLESS 节点,真正处理节点的是 v2rayN 调用的代理内核。现代订阅中经常出现 VLESS + TCP + TLS、VLESS + REALITY、VMess + WebSocket + TLS 或 Trojan 等组合。选择时应以订阅能够完整导入、当前内核能够正常启动为前提,而不是单纯按照协议名称判断速度。
对现代 VLESS、REALITY、Vision 等配置的适配通常更完整,适合新订阅和日常终端使用。
适合:新节点、VLESS 配置
对传统 VMess、WebSocket 等配置具有较好的兼容经验,适合维护旧节点。
适合:旧订阅、兼容兜底
由客户端按照导入配置或当前设置选择内核,操作简单,但排查问题时不容易快速定位差异。
适合:不熟悉内核的新手
在 v2rayN 中,先确认主界面能够显示订阅节点,再通过节点右键菜单或客户端提供的测试功能检查延迟。延迟测试成功只说明测试请求得到响应,不代表 Claude Code 的所有域名都能访问。建议选择一个延迟较低且连续连接稳定的节点,先固定使用,不要在排查过程中同时启用自动切换、负载均衡和多组复杂规则。
- 如果节点包含
reality-opts、公钥、短标识或xtls-rprx-vision,优先使用支持这些字段的 Xray 内核。 - 如果节点是传统 VMess + WebSocket + TLS,检查 WebSocket 路径、服务器名称和 TLS 状态是否完整导入。
- 如果 v2rayN 日志出现端口占用,先关闭其他代理程序,或在设置中修改本地监听端口。
- 如果所有节点都无法连接,先检查系统时间、订阅更新结果、DNS 和网络本身,不要立即修改终端变量。
导入订阅并确认本地端口
订阅链接应由服务提供方提供。不要把单个节点分享链接误当成订阅地址,也不要把本地 HTTP 端口填入订阅设置。导入后,v2rayN 会把订阅中的多个节点转换为客户端可选择的配置;终端只连接 v2rayN 的本地入口。
打开客户端
启动 v2rayN,确认托盘区和主界面均显示运行状态。若程序提示缺少内核,先在客户端的内核管理或设置页面补齐对应核心。
添加订阅
进入「订阅分组」或对应的订阅管理入口,点击添加,将服务提供方给出的订阅地址粘贴到 URL 字段并保存。
更新节点
在订阅分组菜单中执行「更新当前订阅」或「更新全部订阅」,等待节点列表刷新,确认没有证书错误或超时提示。
选择节点
在主界面选择一个稳定节点,执行延迟测试或连接测试。测试完成后明确记下当前选中的节点名称。
确认端口
进入「设置」→「参数设置」→「本地监听」或相近名称的页面,记录 HTTP 与 SOCKS5 端口,常见值分别是 10809 和 10808。
完成上述步骤后,可以先在 v2rayN 中开启「系统代理」进行浏览器验证,再单独验证本地端口。系统代理开关的具体位置可能位于主界面底部状态栏、托盘菜单或「设置」页面。开启后,浏览器能够正常访问只能说明系统代理路径可用;Claude Code 仍需要在终端中显式读取变量。
| 检查项目 | 正确表现 | 异常时先看哪里 |
|---|---|---|
| 节点状态 | 选中节点后客户端保持运行,没有连续重连 | 节点参数、内核日志和服务器状态 |
| HTTP 端口 | 本机端口处于监听状态,例如 127.0.0.1:10809 | 本地监听设置、端口占用 |
| 系统代理 | 浏览器访问测试页面表现正常 | 系统代理开关、浏览器独立代理设置 |
| 终端变量 | 当前 Shell 能输出代理地址 | 变量名称、端口和终端类型 |
Windows 终端设置代理变量
Windows 用户首先要确认自己使用的是 PowerShell 还是命令提示符。两者设置临时环境变量的语法不同。临时变量只对当前窗口及其启动的子进程有效,因此必须在设置变量后,从同一个窗口启动 Claude Code。若先打开 Claude Code,再设置变量,已经运行的进程不会自动获得新配置。
PowerShell 写法
假设 v2rayN 的 HTTP 端口为 10809,可以在 PowerShell 中执行:
$env:HTTP_PROXY="http://127.0.0.1:10809"
$env:HTTPS_PROXY="http://127.0.0.1:10809"
$env:ALL_PROXY="socks5://127.0.0.1:10808"
多数基于 Node.js、Python 或其他常见网络库的命令行工具会识别大写变量。为了兼容只读取小写变量的程序,也可以同时设置:
$env:http_proxy=$env:HTTP_PROXY
$env:https_proxy=$env:HTTPS_PROXY
$env:all_proxy=$env:ALL_PROXY
如果只想让当前命令使用代理,可以把变量和命令放在同一条 PowerShell 逻辑中,或者先设置变量、运行 Claude Code,使用结束后关闭窗口。不要把带有账号、密钥或订阅内容的完整命令复制到公开聊天记录中。
命令提示符写法
在 cmd 中使用 set 设置当前窗口变量:
set HTTP_PROXY=http://127.0.0.1:10809
set HTTPS_PROXY=http://127.0.0.1:10809
set ALL_PROXY=socks5://127.0.0.1:10808
检查是否生效时执行 echo %HTTP_PROXY%。PowerShell 则使用 echo $env:HTTP_PROXY。如果输出为空,通常是打开了另一个终端窗口,或者把 PowerShell 语法粘贴到了 cmd 中。
macOS 与 Linux 终端设置代理变量
在 macOS 或 Linux 的 Bash、Zsh 终端中,环境变量使用 export。HTTP 代理通常填写 v2rayN 或其他桌面代理客户端提供的 HTTP 监听端口,SOCKS5 则填写 SOCKS 监听端口:
export HTTP_PROXY="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"
export ALL_PROXY="socks5://127.0.0.1:10808"
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"
如果使用 fish,写法是 set -x HTTP_PROXY http://127.0.0.1:10809,不能直接照搬 Bash 的 export。终端窗口关闭后,手动设置的变量一般会消失;需要长期使用时,可以把相关配置放入用户自己的 Shell 配置文件,但建议先临时测试,确认端口和节点稳定后再保存。
某些命令只支持 HTTP 代理,不支持 socks5://。这时优先为 HTTP_PROXY 和 HTTPS_PROXY 填写 v2rayN 的 HTTP 端口。不要把 SOCKS5 地址写成 HTTP 协议头,也不要把 HTTP 端口写成 socks5://。协议头与监听端口必须对应,否则常见表现是连接立即关闭或代理握手失败。
启动 Claude Code 前先测试链路
不要一遇到登录失败就反复安装 Claude Code。先验证“终端 → 本地代理 → 远端服务”的链路,可以把问题缩小到端口、变量、节点或账户配置。下面的测试命令只用于检查当前终端能否通过代理发起 HTTPS 请求,具体目标地址应以当前服务文档和网络环境为准。
- Windows PowerShell:执行
echo $env:HTTPS_PROXY,确认输出的是当前端口。 - Windows cmd:执行
echo %HTTPS_PROXY%,确认变量不是空值。 - macOS/Linux:执行
printf '%s\n' "$HTTPS_PROXY",确认 Shell 已加载变量。 - 通用检查:使用
curl -I https://example.com观察是否能返回 HTTP 响应;它只能验证基础代理路径,不能证明 Claude Code 账户一定可用。
如果 curl 能够访问普通 HTTPS 网站,但 Claude Code 仍然失败,继续查看错误信息中的域名、证书、认证状态和请求超时。若错误显示无法连接 127.0.0.1:10809,说明本地端口没有监听或端口填错;若提示代理连接被拒绝,优先检查 v2rayN 是否正在运行以及本地防火墙规则。
结论:先测本地端口,再测远端服务
把“代理变量是否存在”“本地端口是否监听”“节点是否能出站”“账户是否能使用服务”分成四步测试,通常比直接重复登录更快找到故障点。
启动、持久化与常见排查
确认终端变量和基础网络均正常后,再在同一个终端窗口启动或使用 Claude Code。若安装命令需要访问包管理服务,也应在安装前设置变量;仅在安装完成后设置代理,无法解决安装阶段的下载超时。安装成功后,登录和模型请求仍然需要当前进程能够访问相应服务。
如果你使用的是集成开发环境内置终端,需注意它可能在启动时继承环境变量。可以完全退出开发工具,再先设置代理变量,然后重新打开工具。若只在外部 PowerShell 中有效、集成终端中无效,通常是集成终端启动环境、Shell 类型或终端配置文件不同。
- 提示连接拒绝:检查 v2rayN 是否运行,确认
HTTP_PROXY端口与「本地监听」页面一致。 - 提示超时:固定一个节点,关闭自动切换,先测试延迟、丢包和普通 HTTPS 访问。
- 提示代理协议错误:确认变量中的
http://、https://、socks5://与实际端口类型匹配。 - 浏览器正常而终端失败:检查终端变量,不要只看 v2rayN 的系统代理开关。
- 登录成功但请求失败:区分账户权限、服务区域、模型可用性和本地网络问题,不要通过修改客户端协议规避服务限制。
- 设置后仍无效:关闭旧终端和旧进程,重新打开 Shell,确认 Claude Code 是从设置过变量的窗口启动。
最后,稳定使用的推荐顺序是:在 v2rayN 中导入并更新订阅,选择一个确认可用的节点,记录 HTTP 或 SOCKS5 本地端口,在当前终端设置代理变量,先用基础 HTTPS 请求验证,再启动 Claude Code。若更换节点或修改 v2rayN 端口,需要同步检查终端变量。完成配置后,可根据需要把临时设置整理到个人 Shell 配置文件,但仍应保留随时删除和切换的能力。