想在国内使用 Claude Code,真正容易出问题的地方通常不是安装命令本身,而是登录请求、终端进程与代理客户端之间没有连通。浏览器能打开网页,不代表终端里的 Node.js、npm、curl 或 Claude Code 就一定会使用同一条代理链路。本文以 Clash Verge 和 mihomo 内核为例,从客户端安装、订阅导入开始,配置系统代理、终端环境变量与 TUN 模式,再用日志和命令逐层确认连接是否生效。

本文只讨论本地客户端、终端代理与网络连通性配置。Claude、Anthropic 账户及相关服务仍需符合服务提供方的地区、账户和使用条款要求,不要使用来历不明的激活工具或共享账号。

先理解终端访问链路:浏览器能用不等于 Claude Code 能用

Clash Verge 处理终端请求,大致经过「终端程序 → 本机代理端口 → mihomo 规则 → 节点 → 目标服务」这条链路。任何一环没有接上,都会表现为登录超时、认证页面打不开、API 请求失败或安装依赖卡住。

Windows 下 Clash Verge 常见的混合端口是 7897,但不同版本、不同用户配置可能使用 78907897 或其他端口。不要直接照抄端口,应在 Clash Verge 的「设置」→「端口」中查看当前混合端口。混合端口通常同时接受 HTTP 和 SOCKS5 请求,但终端变量的协议前缀仍然要写对。

组件 作用 常见检查点
Clash Verge 提供图形界面与内核控制 内核是否运行,代理开关是否打开
mihomo 建立代理连接并执行规则 日志中是否出现连接与规则匹配记录
混合端口 接收 HTTP、HTTPS 与部分 SOCKS 请求 端口是否被其他程序占用
系统代理 让支持系统设置的应用自动使用代理 浏览器是否读取系统代理
终端变量 明确告诉 curl、npm、Git 使用哪个代理 变量是否在当前终端会话中生效
TUN 模式 在网络层接管未读取代理设置的程序 服务模式、虚拟网卡和 DNS 是否正常

建议先使用系统代理加终端变量完成基础配置,确认 Claude Code 可以正常连接后,再考虑 TUN。这样出现问题时变量更少,也容易判断到底是终端没有读代理,还是 mihomo 规则没有命中。

安装 Clash Verge 并导入可用订阅

先从本站的下载页面获取与系统匹配的 Clash Verge 安装包。Windows 设备通常选择 x64 版本;macOS 需要区分 Apple Silicon 与 Intel;Linux 则根据发行版和架构选择对应包。安装目录尽量使用纯英文路径,例如 C:\Program Files\Clash Verge,不要放在包含中文、特殊符号或过深层级的目录中。

首次启动后,进入「订阅」页面,点击「新建」或「添加订阅」,填写一个容易识别的名称,再粘贴服务商提供的 Clash Meta 或 mihomo 订阅链接。保存后点击「更新」,等待节点列表出现。若服务商同时提供 sing-box、V2Ray 和 Clash 格式,应选择明确标注为 Clash、Clash Meta 或 mihomo 的格式。

  1. 打开 Clash Verge,确认 mihomo 内核已经启动。
  2. 进入「订阅」页面,新建订阅并粘贴完整 URL。
  3. 点击更新,确认节点数量不是 0,且更新日期发生变化。
  4. 进入「代理」页面,选择一个延迟正常的节点或策略组。
  5. 将运行模式设置为「规则」,不要一开始就使用全局模式。

订阅更新失败时,先把链接复制到浏览器中访问。若返回登录页、JSON 错误、404 或「订阅已过期」,问题在链接或账户状态,不是 Clash Verge 配置。若浏览器能访问而 Clash Verge 失败,可以先打开系统代理,再回到订阅页面更新。订阅内容中如果出现 proxies:proxy-groups:rules: 等字段,通常说明返回的是 Clash 类配置;如果返回一整页 HTML,则多半是鉴权失败或被重定向到网页。

不要把订阅链接公开发到聊天群或截图中。订阅 URL 往往包含可直接鉴权的 token,泄露后他人可能消耗你的流量或导致链接被服务商吊销。

动手配置:系统代理、Shell 环境变量与 Claude Code

节点选择完成后,先在 Clash Verge 中打开「设置」→「系统代理」。Windows 会把代理地址写入系统设置,macOS 则写入当前网络服务的代理配置。浏览器通常会读取这项设置,但命令行工具并不一定读取,因此还要为终端单独设置环境变量。

Windows PowerShell 配置

在 PowerShell 中执行下面的命令,把 7897 替换成 Clash Verge 实际显示的混合端口:

$env:HTTP_PROXY="http://127.0.0.1:7897"
$env:HTTPS_PROXY="http://127.0.0.1:7897"
$env:ALL_PROXY="socks5://127.0.0.1:7897"
$env:NO_PROXY="localhost,127.0.0.1,::1"

这些变量只对当前 PowerShell 窗口及其启动的子进程有效。关闭窗口后需要重新设置。若希望每次打开 PowerShell 都自动加载,可以使用用户环境变量,但不建议在尚未验证端口正确时直接永久写入。先测试成功,再按自己的终端配置方式持久化。

macOS 与 Linux 终端配置

在 Terminal、iTerm2 或其他 Shell 中执行:

export http_proxy="http://127.0.0.1:7897"
export https_proxy="http://127.0.0.1:7897"
export all_proxy="socks5://127.0.0.1:7897"
export no_proxy="localhost,127.0.0.1,::1"

如果使用 zsh,可将这些内容写入 ~/.zshrc;bash 用户通常写入 ~/.bashrc。修改后执行 source ~/.zshrc 或重新打开终端。NO_PROXY 用于排除本机地址,避免访问本地开发服务时绕一遍代理。

安装与启动前的验证

先不要急着运行 Claude Code,用 curl 验证终端是否真的通过 Clash Verge:

curl -I https://example.com
curl -I https://api.anthropic.com

第一个请求用于确认代理基本可用,第二个请求用于确认目标域名能够建立 HTTPS 连接。返回 200、3xx、401 或 403 都说明 TCP/TLS 请求已经抵达服务器;如果是连接超时、无法解析主机名或 Could not connect to server,应回到端口、节点和规则排查。HTTP 状态码本身不等于账户授权成功,它只能说明网络层请求已经走通。

确认终端变量后,再按 Claude Code 官方文档提供的方式安装和登录。安装依赖时如果使用 npm,可先检查 npm 是否继承了变量:

npm config get proxy
npm config get https-proxy

如果 npm 曾经写入过失效的固定代理,可以删除旧值,让它跟随当前 Shell 环境:

npm config delete proxy
npm config delete https-proxy

此时再执行安装命令。不要同时在 npm 配置、终端变量、浏览器扩展和 Clash Verge 中设置多套互相不同的代理,否则很难判断请求实际经过了哪里。

为 Claude Code 相关域名设置分流规则

规则模式下,Clash Verge 不会把所有流量自动送往代理节点。mihomo 会按照规则从上到下匹配,第一条命中的规则决定流量交给哪个策略组。因此「代理已经打开但 Claude Code 仍然超时」可能不是终端变量问题,而是目标域名被错误地匹配到了 DIRECT

优先在 Clash Verge 的规则或配置覆写功能中使用订阅提供的规则集。只有在确认规则集没有覆盖目标域名时,才增加自定义规则。示例结构如下,其中 PROXY 必须替换为你实际配置中的策略组名称:

rules:
  - DOMAIN-SUFFIX,anthropic.com,PROXY
  - DOMAIN-SUFFIX,claude.ai,PROXY
  - DOMAIN-SUFFIX,console.anthropic.com,PROXY
  - DOMAIN-SUFFIX,npmjs.org,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

这里的域名只是按服务域名进行示例说明,实际请求可能还涉及登录、静态资源、模型接口、包管理器或身份验证所使用的其他域名。不要凭感觉把所有海外域名都写进规则,也不要把整个系统永久设置为全局代理。更稳妥的做法是打开 Clash Verge 日志,执行一次登录或测试命令,观察具体请求的域名和命中策略,再针对性补充。

现象 可能匹配结果 处理方向
浏览器和终端都无法打开目标站点 节点不可用或请求未建立 检查节点延迟、代理端口和内核日志
浏览器可以,终端超时 终端没有读取系统代理 设置 HTTP_PROXY、HTTPS_PROXY
终端能访问普通网页,目标服务失败 目标域名命中 DIRECT 或规则缺失 在日志中确认域名并补充分流规则
登录页面能打开但回调失败 回调地址被代理或防火墙处理异常 保留 localhost 直连,检查浏览器回调窗口
安装依赖很慢或校验失败 npm 使用了旧代理或连接被中途重置 清理 npm 旧配置并重新测试

系统代理还是 TUN 模式:终端场景的选择

系统代理属于应用层设置。浏览器等主动读取系统代理的程序可以自动使用 Clash,但某些终端工具、开发环境、脚本运行时并不会读取 Windows 或 macOS 的代理设置。手动设置环境变量后,curl、npm、Git 等命令通常可以正常工作。

TUN 模式则通过虚拟网卡接管 IP 层流量。它不要求每个程序实现 HTTP 代理支持,因此对没有代理选项的命令行工具、编辑器扩展和部分桌面应用更方便。代价是需要管理员权限或服务模式,还可能影响局域网、虚拟机、Docker 和公司内网访问。

使用场景 推荐方案 原因
只使用浏览器和少量命令 系统代理 + 终端变量 改动少,容易定位问题
多个开发工具都不读代理 TUN 模式 在网络层统一接管
需要频繁访问公司内网 系统代理 + 精确规则 减少内网被错误接管
使用 Docker、虚拟机或本地服务 先使用系统代理 避免虚拟网卡改变现有路由

需要 TUN 时,先进入「设置」→「服务模式」完成安装,再打开「TUN 模式」。Windows 可能要求允许安装虚拟网卡驱动。开启后确认状态没有立即回退,并检查「设备管理器」→「网络适配器」中是否存在对应虚拟网卡。TUN 开启后,可以清理之前临时设置的代理变量,避免请求同时经过 TUN 和显式代理:

Remove-Item Env:HTTP_PROXY,Env:HTTPS_PROXY,Env:ALL_PROXY -ErrorAction SilentlyContinue

macOS 或 Linux 可使用:

unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY

如果 TUN 模式下只有 Claude Code 失败而其他网站正常,重点检查规则、DNS 和登录回调,不要反复切换节点。TUN 的 DNS 劫持和 Fake-IP 设置也可能影响本地服务,开发环境中遇到 localhost127.0.0.1 或局域网地址异常时,应确认这些地址没有被送入代理。

登录失败、超时与认证异常的排查顺序

排查时不要同时修改多个开关。建议按照「端口 → 节点 → 终端变量 → 规则 → DNS → 账户」的顺序,每一步只验证一个结论。

  1. 确认内核运行: Clash Verge 主界面能看到代理节点和日志,系统代理开关不会自动关闭。
  2. 确认端口监听: Windows 执行 netstat -ano | findstr 7897;macOS 或 Linux 执行 lsof -i :7897。如果没有监听,说明端口填写错误或内核没有启动。
  3. 确认节点可用: 在代理页面切换到另一个节点,观察延迟和连接日志,不要只看订阅中是否有节点名称。
  4. 确认终端变量: PowerShell 执行 Get-ChildItem Env: | findstr PROXY;macOS 或 Linux 执行 env | grep -i proxy
  5. 确认规则命中: 打开日志后重新执行请求,观察目标域名后面显示的是具体代理组还是 DIRECT
  6. 确认 DNS: 如果日志显示域名解析失败,检查 Clash Verge 的 DNS 设置,必要时先关闭 IPv6,避免本地 IPv6 路径与代理链路不一致。
  7. 最后检查账户: 网络请求已经成功但仍提示未授权、地区或权限错误时,这属于账户和服务侧问题,不是继续更换本地端口可以解决的。

登录回调失败尤其容易误判。很多 CLI 登录流程会打开浏览器,完成认证后再通过本机回调地址把结果交还给终端。此时 localhost127.0.0.1::1 不应经过远程节点。请保留 NO_PROXY 配置,不要在代理规则中把本地地址统一指向代理组。

如果 Claude Code 运行后提示网络错误,可以先退出当前终端,关闭旧的代理变量,重新打开一个干净的 Shell 再验证。不同终端窗口的环境变量相互独立,一个窗口中修改成功,不代表编辑器内置终端或另一个 PowerShell 也会同步。

一套适合新手的稳定使用方案

完成配置后,日常可以采用下面的顺序:启动 Clash Verge,确认 mihomo 内核运行;选择可用节点;开启系统代理;打开新的终端并加载代理变量;用 curl 测试普通 HTTPS 与目标服务域名;最后再启动 Claude Code。这样每次遇到问题,都能快速判断是客户端、节点、规则还是终端环境。

如果只是偶尔使用,推荐「规则模式 + 系统代理 + 终端环境变量」。如果经常使用多个不支持代理设置的开发工具,再启用 TUN。规则配置不要追求复杂,优先确保本地地址直连、国内常用服务保持直连、明确需要代理的目标域名进入代理组,最后用日志验证实际命中结果。

还要定期更新订阅并清理失效节点。订阅更新后策略组名称可能发生变化,手写规则若引用了不存在的策略组,会导致配置加载失败或规则无法按预期执行。修改配置前保留一份可恢复的备份,每次只改一处,确认 Claude Code、npm 和本地开发服务都正常后再继续调整。需要了解 Clash Verge 基础操作时,可以查看教程

最重要的判断标准不是「系统代理开关是否亮起」,而是终端请求是否在 Clash 日志中出现、是否命中预期代理组、是否能够稳定完成 TLS 连接。三项都确认后,再处理 Claude Code 自身的登录和账户提示。