Claude Code 受到开发者关注后,不少新手会遇到一个看似矛盾的现象:浏览器可以打开相关页面,但终端里的安装命令、登录流程或代码请求却一直超时。原因通常不在 Claude Code 本身,而在于浏览器、系统代理和命令行程序使用的代理入口并不完全相同。Clash Verge 即使已经连接了节点,也不代表当前终端会自动读取它的代理设置。

这篇文章以 Clash Verge 和 mihomo 内核为基础,说明如何导入订阅、确认代理端口、为终端设置环境变量,再通过分流规则让 Claude Code 相关请求稳定经过代理。不同版本的 Clash Verge 菜单名称可能略有差异,但核心思路一致:先确认代理链路正常,再让终端显式使用本地代理,最后按日志和请求类型定位问题。

i

请先确认所使用的 Claude 服务、账号和网络访问方式符合所在地法律法规、服务条款以及组织的安全政策。本文只介绍本地代理客户端与终端环境的配置方法,不提供账号注册限制或服务区域限制的绕过方案。

准备 Clash Verge 与终端环境

在配置 Claude Code 之前,先把问题拆成三个独立层面:Clash Verge 是否正常运行,代理订阅是否包含可用节点,以及终端程序是否真的把请求交给了 Clash。只要其中一层没有配置好,后面的登录或命令测试都会失败。

确认客户端与内核状态

打开 Clash Verge 后,先在配置或订阅页面导入服务商提供的订阅链接。订阅链接包含节点和配置内容,属于敏感凭据,不要粘贴到公开网页、截图或无关工具中。导入完成后执行一次更新,确认配置列表中出现节点,并在代理页面选择一个延迟正常、状态可用的节点或代理组。

随后检查 Clash Verge 的运行状态。需要重点确认内核已经启动,而不是只有客户端窗口打开。通常可以在日志页看到内核启动信息,在设置页看到 HTTP、SOCKS 或 Mixed 监听端口。常见本地地址是 127.0.0.1,端口可能是 78907897 或其他自定义值,不能直接照抄示例端口。

检查项目应确认的内容异常时的表现
订阅状态更新成功、节点数量正常、未过期列表为空或所有节点同时不可用
内核状态mihomo 已启动且没有配置解析错误界面存在但端口没有监听
代理端口记录 HTTP 或 Mixed 端口号终端连接 127.0.0.1 时被拒绝
当前节点代理组已经选定可用节点请求卡在连接或握手阶段

先用 curl 验证本地端口

不要一开始就用 Claude Code 排查。先使用最小化命令测试 Clash 的本地 HTTP 代理端口。下面假定端口为 7890,如果 Clash Verge 中显示的是其他端口,请替换为实际值:

curl -x http://127.0.0.1:7890 -I https://api.anthropic.com

这条命令的目的不是验证账号是否可用,而是确认终端能通过本地代理发出 HTTPS 请求。如果返回 HTTP 响应头,或者至少能看到来自远端的响应,说明本地端口、当前节点和基本代理链路大概率正常。如果提示 Connection refused,先检查内核是否启动及端口是否写错;如果提示超时,切换节点并查看 Clash 日志,不要急着修改 Claude Code 配置。

设置终端代理环境变量

系统代理开关主要服务于会主动读取系统设置的桌面应用,终端程序通常更依赖环境变量。Claude Code 的网络请求由命令行进程发起,因此建议在终端中显式设置 HTTP_PROXYHTTPS_PROXY 和必要的 ALL_PROXY。对于 HTTPS 请求,本地 HTTP 代理也可以通过 CONNECT 方法建立隧道,不必强行把 HTTP 代理地址写成 SOCKS 地址。

macOS 与 Linux 配置方法

在当前终端会话中临时设置变量:

export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export NO_PROXY="127.0.0.1,localhost"

设置完成后,先查看变量是否生效:

env | grep -i proxy
curl -I https://api.anthropic.com

如果第二条命令没有使用代理参数却能得到响应,说明当前终端环境变量已被 curl 读取。若想让配置在每次打开终端时自动加载,可以把相关 export 行写入正在使用的 shell 启动文件。zsh 通常使用 ~/.zshrc,bash 常见的是 ~/.bashrc~/.bash_profile。修改后执行对应的 source 命令,或者关闭并重新打开终端。

source ~/.zshrc
# 或
source ~/.bashrc

如果终端通过 SOCKS5 端口连接,可以将 ALL_PROXY 指向 SOCKS5 地址。但要注意,并不是所有命令行工具都完整支持 SOCKS5 环境变量,而且有些工具只识别小写变量。遇到行为不一致时,优先使用 Clash 的 HTTP 或 Mixed 端口,再针对单个工具查阅其代理参数。

Windows 终端配置方法

PowerShell 中可以这样设置当前会话:

$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:http_proxy=$env:HTTP_PROXY
$env:https_proxy=$env:HTTPS_PROXY
$env:NO_PROXY="127.0.0.1,localhost"

如果使用 CMD,对应写法是:

set HTTP_PROXY=http://127.0.0.1:7890
set HTTPS_PROXY=http://127.0.0.1:7890
set NO_PROXY=127.0.0.1,localhost

这些变量只对当前窗口及其启动的子进程有效。也就是说,在一个 PowerShell 窗口里设置代理后,从该窗口启动的 Claude Code 会继承变量,但已经打开的另一个终端窗口不会自动获得相同设置。使用 Windows Terminal 时,还要确认实际运行的是 PowerShell、Command Prompt 还是 WSL,因为它们拥有不同的环境配置文件。

!

不要把带有账号密码的代理地址长期写入 shell 历史记录或公开的项目配置文件。本文示例使用本机无认证端口;如果代理端口要求用户名和密码,应优先使用客户端提供的安全配置方式,并避免把凭据提交到 Git 仓库。

为 Claude Code 配置分流规则

终端代理变量解决的是“请求是否进入 Clash”,分流规则解决的是“进入 Clash 后走哪个出口”。如果规则把相关域名错误地送到直连组,即使环境变量设置正确,Claude Code 仍可能出现登录失败、API 请求超时或响应不完整。

在 Clash Verge 的规则模式下,建议先使用服务商配置中已有的规则组,确认目标域名能够匹配到预期的代理组。不要为了测试把所有流量永久设置为代理,这样会增加排查范围和本地网络负担。更稳妥的做法是针对实际使用到的服务域名添加明确规则,并把规则放在宽泛的兜底规则之前。

域名类别用途示例建议检查方向
Claude 服务域名claude.ai 及其相关站点确认网页登录和会话请求没有误走直连
API 域名api.anthropic.com确认 API 请求匹配代理组,且没有被错误的直连规则覆盖
账号与控制台域名登录或控制台页面使用的官方域名通过日志查看实际请求域名,按实际结果补充规则
代码依赖域名npm、Git 或项目自身使用的仓库地址根据项目需求单独判断,不要默认全部跟随 Claude 规则

规则匹配通常按从上到下的顺序执行。若前面存在宽泛的 DOMAIN-SUFFIXGEOSITE 或规则集,它可能先于自定义规则命中。添加规则后,应在日志或连接页面中搜索目标域名,确认实际命中的规则名称和代理组,而不是只看界面上的“代理已开启”状态。

rules:
  - DOMAIN-SUFFIX,anthropic.com,Claude
  - DOMAIN-SUFFIX,claude.ai,Claude
  - MATCH,GLOBAL

上面的配置只是规则结构示例,其中 Claude 必须替换为你配置中真实存在的代理组名称。不要直接把这段内容覆盖到订阅配置里,因为订阅更新可能覆盖手动修改,同时代理组名称、规则集格式和客户端支持范围也可能不同。若 Clash Verge 提供自定义规则或脚本功能,应按照当前客户端的配置方式维护,并在修改前保留原配置备份。

安装、登录与首次运行

完成代理测试后,再按 Claude Code 官方当前提供的安装方式安装命令行工具。不同系统和发行渠道的安装命令可能变化,应以官方文档或产品界面显示的命令为准。安装命令本身可能访问包管理器、代码仓库或其他依赖服务,因此“API 域名可访问”并不等于“安装源一定可访问”,安装失败时要在 Clash 日志中查看实际失败的域名。

安装完成后,在同一个已经设置代理变量的终端窗口启动 Claude Code。首次运行通常会进入登录或授权流程,可能同时涉及终端请求和浏览器页面。终端启动的浏览器不一定继承当前 shell 的环境变量,因此要分别确认两件事:一是浏览器能够打开登录页面,二是回到终端后授权结果能够被命令行程序读取。

  1. 先启动 Clash Verge 并选择可用节点。确认代理组不是空组,也不是自动测速后选中了不可用节点。
  2. 设置终端环境变量。执行 env | grep -i proxy 或 PowerShell 的环境变量查看命令,确保变量存在。
  3. 测试基础 HTTPS 请求。使用 curl 访问相关官方域名,观察 Clash 日志是否出现对应连接。
  4. 启动 Claude Code 登录。如果浏览器页面无法打开,单独检查浏览器系统代理;如果页面能打开但终端没有完成授权,查看终端输出和 Clash 日志。
  5. 执行一个最小任务。先让工具读取一个小型项目目录或回答简单的代码问题,确认请求、响应和本地文件权限都正常后,再运行复杂任务。

首次运行时,不要同时修改节点、DNS、TUN、规则和终端变量。一次只改变一个因素,才能知道问题是在哪一步产生的。如果浏览器登录正常但终端请求超时,重点查看环境变量和命令行进程是否继承变量;如果终端请求能发出但返回鉴权错误,则应检查账号状态、登录会话或产品权限,这不是 Clash 节点连通性问题。

TUN 模式与终端代理的取舍

显式设置环境变量是最容易控制的方式,它只影响当前终端启动的程序,适合希望明确区分直连和代理的开发环境。缺点是部分工具不读取这些变量,子进程或容器也可能拥有独立网络环境。Git、npm、Python 包管理器、Docker 和某些 IDE 终端,都可能有自己的代理配置或进程启动方式,不能因为 Claude Code 能访问就认为整个开发环境都已打通。

TUN 模式通过虚拟网卡和路由接管更多系统流量,不依赖应用是否读取代理环境变量。对于不支持 HTTP 或 SOCKS 代理的程序,TUN 往往更方便。但它也会扩大影响范围,包括系统更新、局域网访问、虚拟机和容器流量都可能受到规则影响。启用 TUN 前,需要在 Clash Verge 中授予系统要求的权限,确认自动路由、DNS 劫持和局域网访问选项不会与现有 VPN、虚拟网卡或安全软件冲突。

方式优点限制适合场景
环境变量范围清晰,容易临时关闭和定位工具可能不读取,子进程需继承设置普通终端、curl、脚本和单个开发项目
系统代理浏览器和桌面应用配置简单终端及后台服务可能完全忽略浏览器、GUI 工具和常规桌面应用
TUN 模式覆盖不支持代理设置的应用影响范围大,可能与其他虚拟网络冲突需要统一接管系统或容器流量的场景

常见故障的定位顺序

如果 Claude Code 无法使用,建议按照“端口、节点、规则、变量、工具”的顺序排查,不要一上来反复更换配置文件。

排查时可以暂时把 Clash 日志级别调到 debug,复现一次问题后恢复为 info。在日志中搜索 anthropicclaude 或实际失败的域名,重点观察 DNS 解析、规则命中、连接建立和 TLS 握手分别是否成功。日志中出现目标域名且命中了预期代理组,只能证明请求进入了 Clash;最终是否成功还要看节点服务端和账号接口返回结果。

一套稳定的配置应当满足:Clash Verge 内核正常运行,订阅中有可用节点,本地 HTTP 或 Mixed 端口能被 curl 使用,终端环境变量已生效,相关域名命中预期规则,并且 TUN、系统代理与其他 VPN 没有重复接管同一流量。

完成以上配置后,日常使用 Claude Code 时只需要保持 Clash Verge 运行、确认代理组状态,并从已加载环境变量的终端启动工具即可。订阅更新、节点切换或规则调整后,重新用最小化 curl 命令验证一次,可以避免把节点失效误判为 Claude Code 安装问题。需要客户端和配置教程时,可前往 Clash 客户端下载页 或查看 配置教程