使用 Claude Code 时,如果浏览器可以正常访问网页,但终端中的登录、模型请求或更新命令持续超时,问题可能不在 v2rayN 节点本身,而在命令行程序没有使用代理。桌面应用的系统代理设置不会自动保证每个终端进程都走代理;终端通常需要读取代理环境变量,或由程序提供的参数明确指定代理。
本文以 Windows 上的 v2rayN 和 PowerShell 为例,说明如何确认本地 HTTP 代理监听端口、用 curl 验证连接,并通过环境变量让 Claude Code 所在的终端进程使用代理。也会区分本地代理不可用、请求未走代理、路由直连和远端连接失败,帮助你逐层定位问题。
一、终端代理与系统代理不是一回事
v2rayN 负责启动本地代理入口并将流量交给选定内核处理;Claude Code 则是从终端启动的命令行程序。开启 v2rayN 的「设置系统代理」后,遵循系统代理设置的应用可能自动使用代理,但终端工具是否读取系统设置,取决于它本身及其运行环境。不能仅凭浏览器能打开网页,就认定 Claude Code 的请求已经经过代理。
排查时要把链路拆开看:第一,Claude Code 是否读取了代理配置;第二,本地监听端口是否存在且协议匹配;第三,v2rayN 内核是否把相关目标交给预期出站;第四,节点是否能连接远端服务。每一层都可能表现为“请求超时”,但处理方法并不相同。
- 系统代理:由操作系统保存代理配置,部分图形应用会读取它;并不等于所有命令行程序都会自动使用。
- 环境变量:由当前终端进程传给它启动的程序。Claude Code 若支持并读取相应变量,启动时就能获得代理地址。
- 路由规则:请求进入 v2rayN 后,内核还会按当前模式和规则选择代理或直连出站。
- 远端连接:本地代理收到请求不代表远端服务一定可达;节点、DNS、TLS 和目标服务状态仍会影响结果。
二、在 v2rayN 中核对本地监听端口
先确认 v2rayN 正在运行,目标节点已选中并且内核处于启动状态。打开 v2rayN 的「设置」→「参数设置」,查找本地监听或本地代理端口相关选项。界面布局和字段名称可能随版本变化,应以当前版本显示的配置及运行状态为准;不要把常见示例端口直接当成自己的实际端口。
HTTP 代理入口
- 地址
127.0.0.1- 端口示例
10809- 环境变量
HTTP_PROXY、HTTPS_PROXY
仅作示例;先确认该端口实际提供 HTTP 代理,再用于下文命令。
SOCKS 代理入口
- 地址
127.0.0.1- 端口示例
10808- 变量写法
socks5h://
端口与协议须对应;SOCKS5H 会把目标域名交给代理侧解析。
上面的端口仅用于说明命令格式。v2rayN 可能配置了不同端口,也可能只启用了其中一种协议。若将 SOCKS 端口写成 http://,或把 HTTP 端口写成 socks5h://,客户端与本地监听之间就无法完成正确握手。使用前应从参数设置、运行配置或客户端显示信息确认入口的协议与端口。
本地地址使用 127.0.0.1,表示连接当前运行命令的设备。若 Claude Code 实际运行在 WSL、容器、远程 SSH 会话或虚拟机里,它看到的回环地址未必是 Windows 主机的回环地址。遇到这种环境,应先确认该运行环境能否访问 Windows 上的监听地址;不要直接假定 Windows 中的 127.0.0.1 在所有隔离环境里都指向同一台主机。
三、先用 curl 验证本地代理
在给 Claude Code 设置变量之前,先用一个简单请求验证本地端口是否接受连接。以下命令假设已确认 127.0.0.1:10809 是 HTTP 代理入口。如果实际端口或协议不同,替换成真实值。Windows PowerShell 中使用 curl.exe,避免部分环境把 curl 解释为 PowerShell 别名。
# Windows PowerShell:HTTP 代理示例
curl.exe -v --noproxy "" --proxy http://127.0.0.1:10809 --connect-timeout 5 --max-time 20 https://api.anthropic.com/
# 仅当对应端口确实是 SOCKS5 入口时使用
curl.exe -v --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 20 https://api.anthropic.com/
输出中如果显示连接到本地地址,并继续出现代理握手、HTTPS 隧道或远端 HTTP 响应,说明请求至少经过了本地代理入口。目标返回 401、404 或其他非成功状态,并不能单独证明代理失败:测试没有携带 Claude Code 的认证信息,响应码只用于辅助判断网络请求是否到达远端服务。若错误停在连接本地地址阶段,优先检查 v2rayN 是否运行、端口是否正确以及协议是否匹配。
结论:把本地连接与服务响应分开判断
curl 无法连接 127.0.0.1:端口 时,先修复本地监听;curl 能经代理取得远端响应,而 Claude Code 仍超时,才转向检查环境变量、进程继承、路由规则与服务端错误。
四、动手设置终端环境变量
Claude Code 从哪个终端启动,就优先在那个终端中设置代理变量。下面以 PowerShell 和 HTTP 代理为例,使用前将端口替换为 v2rayN 当前的真实 HTTP 监听端口。环境变量只影响当前 PowerShell 会话及其启动的子进程,不会自动改写其他已打开的终端窗口。
-
确认监听端口
在 v2rayN「设置」→「参数设置」中核对本地 HTTP 代理地址和端口,并确认内核正在运行。若只有 SOCKS 入口,不要直接照抄 HTTP 地址格式。
-
设置当前会话
在启动 Claude Code 的 PowerShell 窗口输入:
$env:HTTP_PROXY="http://127.0.0.1:10809"和$env:HTTPS_PROXY="http://127.0.0.1:10809"。这里的http://描述本地代理入口协议,并不表示目标网站使用明文 HTTP。 -
检查变量值
运行
Get-ChildItem Env:HTTP_PROXY,Env:HTTPS_PROXY,确认两项都指向正确的本地地址。如果当前 v2rayN 端口不是 10809,应把变量中的端口同步改成实际值。 -
启动并复测
在同一个 PowerShell 窗口中先用
curl.exe测试,再启动 Claude Code。不要从开始菜单或另一个未设置变量的终端启动,否则新进程不会继承当前窗口中的临时变量。 -
清理临时变量
排查结束后,可在当前窗口运行
Remove-Item Env:HTTP_PROXY,Env:HTTPS_PROXY -ErrorAction SilentlyContinue。这样只清除当前会话变量,不会更改 v2rayN 的监听配置。
若使用命令提示符而不是 PowerShell,可在同一窗口通过 set HTTP_PROXY=http://127.0.0.1:10809 与 set HTTPS_PROXY=http://127.0.0.1:10809 设置当前会话变量。若终端运行在 macOS 或 Linux shell 中,对应写法通常为 export HTTP_PROXY=http://127.0.0.1:10809 和 export HTTPS_PROXY=http://127.0.0.1:10809;但要先确认该设备本身确实有可访问的本地代理监听。
不建议为了省事直接把含凭据的代理地址写入脚本、共享终端配置或截图。本文示例不包含用户名和密码。如果你的代理入口确实要求认证,应按代理软件的实际要求处理凭据,并避免将敏感内容提交到代码仓库或公开日志中。
五、检查路由、变量继承与运行环境
当 curl 经显式代理成功、Claude Code 仍然超时时,先确认它实际从哪个终端启动,以及启动时是否能看到变量。可以在同一个窗口读取 $env:HTTPS_PROXY,再从该窗口启动程序。若通过 IDE、任务计划程序、脚本管理器或另一个终端启动,启动进程可能没有继承刚才设置的变量。应在真正启动 Claude Code 的父进程环境中配置,而不是只在无关窗口里设置。
接着核对 v2rayN 的路由模式和规则。请求即使到达本地监听,也可能按当前规则走直连出站。排错期间可临时选择一个明确的代理模式进行对照,但操作前记下原有设置,测试完成后恢复。若只对特定域名自定义了直连规则,检查目标域名是否命中该规则,以及规则顺序是否让更宽泛的条件提前匹配。
浏览器正常,Claude Code 还是超时?
在启动 Claude Code 的同一终端检查 HTTPS_PROXY,再用同一端口运行显式代理 curl。确认变量已设置后,从该窗口重新启动程序。
提示连接本地端口被拒绝怎么办?
确认 v2rayN 内核已启动,并核对错误中的端口与参数设置一致。若地址属于 WSL、容器或远程环境,还要确认该环境能访问 Windows 主机的监听地址。
curl 有响应但 Claude Code 仍失败?
检查 Claude Code 是否由设置变量的同一会话启动,并查看完整错误是连接超时、认证失败还是服务端拒绝。非成功 HTTP 状态不等同于本地代理连接失败。
如果 v2rayN 日志中出现了对应目标请求,可结合请求时间、目标域名和出站标签确认流量是否进入内核;若完全没有相关记录,也不能立即断定客户端没有发请求,因为访问日志可能未启用,或请求被其他运行环境隔离。建议每次只改变一个条件:先验证端口,再设置变量,最后调整路由,避免同时更换节点、修改 DNS 和重装客户端,让故障来源难以比较。
六、根据错误阶段缩小排查范围
不同错误提示对应的环节不同。先保存完整错误文本与发生时间,再判断失败发生在本机连接、代理握手、远端连接还是账户请求阶段。不要只截取最后一句,也不要在分享日志时暴露订阅链接、UUID、访问令牌或其他凭据。
报错:Failed to connect to 127.0.0.1 port 10809
原因:终端无法连接本地代理入口,常见于 v2rayN 未启动、端口写错或目标运行环境无法访问该地址。
解法:回到 v2rayN 核对监听地址与端口,再用同一终端运行显式代理 curl;在 WSL、容器或远程环境中另查主机网络可达性。
报错:Could not resolve proxy
原因:代理变量中的主机名无法解析,或代理地址格式填写错误;本机代理通常应使用 127.0.0.1,而不是不确定的主机名称。
解法:检查 HTTP_PROXY 与 HTTPS_PROXY 的完整值,确认协议头、地址和端口均正确,并确认没有多余引号或空格。
报错:ETIMEDOUT 或请求持续超时
原因:超时可能发生在本地代理、节点拨号、DNS、路由或远端服务阶段,单独一行不足以确定故障位置。
解法:先比较显式代理 curl 的结果,再结合 v2rayN 同一时间的运行日志核对目标和出站;每次只调整一项配置后复测。
如果显式代理测试成功,但 Claude Code 返回身份验证、权限或服务端错误,应按该错误指向处理,避免反复修改代理端口。若显式代理测试本身失败,先区分本地拒绝、代理协议不匹配和远端超时:连接本地被拒绝通常指向监听配置;代理握手失败常见于 HTTP 与 SOCKS 协议填反;本地握手成功后才超时,则应进一步看内核日志和当前出站状态。
- 测试前记录 v2rayN 当前端口、代理协议、运行内核和路由模式,确保复测时能恢复原状。
- 检查命令执行窗口与 Claude Code 启动窗口是否为同一个会话,尤其注意从 IDE 或快捷方式启动的情况。
- 先使用明确可用的节点验证链路,再按需检查目标域名规则;不要用“系统代理已开启”代替终端代理测试。
- 对照错误发生时间查看日志,分享内容前隐藏令牌、UUID、订阅地址和个人信息。