想在国内使用 Claude Code,真正容易出问题的地方通常不是安装命令本身,而是登录请求、终端进程与代理客户端之间没有连通。浏览器能打开网页,不代表终端里的 Node.js、npm、curl 或 Claude Code 就一定会使用同一条代理链路。本文以 Clash Verge 和 mihomo 内核为例,从客户端安装、订阅导入开始,配置系统代理、终端环境变量与 TUN 模式,再用日志和命令逐层确认连接是否生效。
本文只讨论本地客户端、终端代理与网络连通性配置。Claude、Anthropic 账户及相关服务仍需符合服务提供方的地区、账户和使用条款要求,不要使用来历不明的激活工具或共享账号。
先理解终端访问链路:浏览器能用不等于 Claude Code 能用
Clash Verge 处理终端请求,大致经过「终端程序 → 本机代理端口 → mihomo 规则 → 节点 → 目标服务」这条链路。任何一环没有接上,都会表现为登录超时、认证页面打不开、API 请求失败或安装依赖卡住。
Windows 下 Clash Verge 常见的混合端口是 7897,但不同版本、不同用户配置可能使用 7890、7897 或其他端口。不要直接照抄端口,应在 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 的格式。
- 打开 Clash Verge,确认 mihomo 内核已经启动。
- 进入「订阅」页面,新建订阅并粘贴完整 URL。
- 点击更新,确认节点数量不是 0,且更新日期发生变化。
- 进入「代理」页面,选择一个延迟正常的节点或策略组。
- 将运行模式设置为「规则」,不要一开始就使用全局模式。
订阅更新失败时,先把链接复制到浏览器中访问。若返回登录页、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 设置也可能影响本地服务,开发环境中遇到 localhost、127.0.0.1 或局域网地址异常时,应确认这些地址没有被送入代理。
登录失败、超时与认证异常的排查顺序
排查时不要同时修改多个开关。建议按照「端口 → 节点 → 终端变量 → 规则 → DNS → 账户」的顺序,每一步只验证一个结论。
- 确认内核运行: Clash Verge 主界面能看到代理节点和日志,系统代理开关不会自动关闭。
- 确认端口监听: Windows 执行
netstat -ano | findstr 7897;macOS 或 Linux 执行lsof -i :7897。如果没有监听,说明端口填写错误或内核没有启动。 - 确认节点可用: 在代理页面切换到另一个节点,观察延迟和连接日志,不要只看订阅中是否有节点名称。
- 确认终端变量: PowerShell 执行
Get-ChildItem Env: | findstr PROXY;macOS 或 Linux 执行env | grep -i proxy。 - 确认规则命中: 打开日志后重新执行请求,观察目标域名后面显示的是具体代理组还是
DIRECT。 - 确认 DNS: 如果日志显示域名解析失败,检查 Clash Verge 的 DNS 设置,必要时先关闭 IPv6,避免本地 IPv6 路径与代理链路不一致。
- 最后检查账户: 网络请求已经成功但仍提示未授权、地区或权限错误时,这属于账户和服务侧问题,不是继续更换本地端口可以解决的。
登录回调失败尤其容易误判。很多 CLI 登录流程会打开浏览器,完成认证后再通过本机回调地址把结果交还给终端。此时 localhost、127.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 自身的登录和账户提示。