Claude 订阅转 API 部署指南(住宅代理 + Fail-Safe 隔离方案)
这篇文档整理一套围绕 VPS、住宅代理、Systemd 隔离、Fail-Safe 验证、Claude Code 接入 的部署流程,目标是把账号授权、网络出口与服务常驻拆开管理,形成可长期维护的 AI 系统运维 SOP。
这是 Claude 订阅转 API 的两种方案之一。本文适用于 VPS 公网 IP 是普通机房 IP、需要靠外挂住宅代理让 Claude 看到住宅出口的情况。如果你的 VPS 公网 IP 本身就是干净住宅 ISP IP,请直接参考 Claude 订阅转 API 部署指南(ISP 住宅 IP 方案),那套方案不需要外挂代理。
这是一篇偏运维实践的长期维护型知识页,适合后续继续补充代理选择、故障排查、监控方案与多客户端接入经验。
在正式登录账号或对外提供服务前,务必先完成出口验证与 Fail-Safe 测试。没有验证通过前,不要直接进入生产使用。
两种方案怎么选
| 维度 | 本文:住宅代理 + Fail-Safe | ISP 住宅 IP 方案 |
|---|---|---|
| VPS 公网 IP | 普通机房 IP(被污染 / 不稳定) | 本身就是干净住宅 ISP IP |
| 网络出口 | 外挂 SOCKS5 住宅代理 | VPS 公网出口直接就是目标住宅 IP |
| 核心安全点 | Fail-Safe:代理失效时断开,防止回落暴露机房 IP | iptables 限制来源 + 人工 OAuth |
| 服务常驻 | Systemd User Service + linger | Systemd 系统级 service |
| 适合谁 | 手头只有机房 VPS,但有可用住宅代理 | 已经持有住宅 ISP 节点(常和 x-ui 共存) |
如果你两台条件都具备,优先选 ISP 住宅 IP 方案,链路更短、更好排查。本文针对的是只能靠代理补出口的场景。
背景
很多 AI 工具接入场景都需要一个稳定、可控、可复用的接口层。单纯把服务跑起来并不够,真正影响长期可用性的,通常是以下几个问题:
- 网络出口是否稳定
- 代理失效时是否会泄露原生机房 IP
- 授权链路是否与目标环境保持一致
- SSH 断开或系统重启后服务是否还能自动恢复
- 客户端配置是否统一且易于维护
这篇文章的重点不是“临时跑通一次”,而是整理出一套能用于长期维护的 AI 系统运维流程。
核心架构
| 模块 | 方案 | 作用 |
|---|---|---|
| 转发层 | CLIProxyAPI | 提供高性能接口转发 |
| 隔离层 | Systemd User Service | 让代理仅作用于指定进程 |
| 安全层 | Fail-Safe | 代理异常时直接断开,避免暴露机房 IP |
| 客户端层 | Claude Code / NextChat / LobeChat | 消费统一的 API 接口 |
适用场景
- 需要把 Claude 使用能力封装成统一 API 接口
- 需要在 VPS 上长期常驻服务
- 需要让特定进程走住宅代理,而不是整机全局代理
- 需要为 Claude Code 等客户端提供稳定入口
- 需要一套可以复用、验证、排障的运维文档
准备工作
在开始前,至少准备好以下资源:
- VPS:建议 Ubuntu 22.04+
- 住宅代理:支持 SOCKS5 的静态住宅 IP
- Claude 账号:具备对应使用权限
- 本地浏览器环境:用于最终授权接力
资源清单
- 一台可持续运行的 Linux VPS
- 一组可用的住宅代理账号信息
- 一次完整的本地授权链路
- 后续客户端接入所需的统一地址与密钥
整体部署流程
第一阶段:系统加固与常驻
先确保用户进程在 SSH 断开或系统重启后仍可继续运行。
第二阶段:安装与 Systemd 隔离配置
把代理环境变量绑定到服务进程,而不是整台机器。
第三阶段:Fail-Safe 验证
在真正登录账号前,验证代理是否生效,以及失效时是否会自动中断。
第四阶段:授权握手
确保本地浏览器和 VPS 端的网络出口策略一致,完成授权接力。
第五阶段:正式投产
启用正式服务与管理面板,准备客户端接入。
第六阶段:客户端配置
把统一接口接到 Claude Code 或其他客户端中。
第一阶段:系统加固与常驻
目标是让服务具备“掉线不掉进程、重启可恢复”的基础条件。
1. 开启用户进程常驻
loginctl enable-linger root2. 预检当前机房 IP
curl ip.sb记录当前 VPS 的原生机房 IP,后面做代理验证时要拿它做对照。
这一步看起来很简单,但它决定了后续你是否能明确判断“当前流量到底是走代理,还是走 VPS 原生出口”。
第二阶段:安装与 Systemd 隔离配置
这一阶段的关键,不是“把程序安装上去”,而是“让程序的网络出口可控”。
1. 一键安装 CLIProxyAPI
curl -fsSL https://raw.githubusercontent.com/brokechubb/cliproxyapi-installer/refs/heads/master/cliproxyapi-installer | bash2. 编辑 Systemd User Service
nano /root/.config/systemd/user/cliproxyapi.service建议写成如下结构:
[Unit]
Description=CLIProxyAPI Service
After=network.target
[Service]
Type=simple
WorkingDirectory=/root/cliproxyapi
ExecStart=/root/cliproxyapi/cli-proxy-api
Restart=always
RestartSec=10
Environment=HOME=/root
# 代理格式示例:socks5h://用户名:密码@IP:端口
Environment="HTTP_PROXY=socks5h://<USER>:<PASS>@<PROXY_IP>:<PORT>"
Environment="HTTPS_PROXY=socks5h://<USER>:<PASS>@<PROXY_IP>:<PORT>"
Environment="ALL_PROXY=socks5h://<USER>:<PASS>@<PROXY_IP>:<PORT>"
[Install]
WantedBy=default.target3. 为什么要这样配
这样做的价值在于:
- 代理只注入目标服务进程
- 系统其他操作不必强制走代理
- 问题定位更清楚
- 出口策略更容易验证
第三阶段:零风险 Fail-Safe 物理验证
这是整篇文章里最重要的一段。不要跳过。
验证目标
你要确认两件事:
- 服务正常运行时,出口确实是住宅 IP
- 代理异常时,服务会失败退出,而不是偷偷回落到机房 IP
1. 临时把 ExecStart 改成探测器
ExecStart=/usr/bin/bash -c "curl -s http://ip.sb"2. 执行验证三步
systemctl --user daemon-reload
systemctl --user restart cliproxyapi.service
journalctl --user -u cliproxyapi.service -n 103. 结果判定
- 成功:日志输出的是你的住宅 IP
- Fail-Safe 成功:如果故意填错代理信息,日志应显示连接失败,例如
status=7/NOTRUN - 需要排查:如果日志出现的是 VPS 原生机房 IP,说明隔离策略没有真正生效
4. 验证完成后还原服务启动命令
把 ExecStart 改回原来的程序路径,然后重新执行:
systemctl --user daemon-reload如果你没有做“故意填错代理”的反向测试,就还不能确认 Fail-Safe 是否真的成立。很多问题都只会在代理失效时暴露。
第四阶段:最高安全等级授权
这一阶段的目标,是让本地浏览器与 VPS 端的授权动作尽量保持同一网络策略下完成。
本地端准备
开启住宅代理,并使用浏览器无痕窗口访问 Claude 官网。
VPS 端发起授权
执行带代理前缀的登录命令。
浏览器接力
把终端输出的授权 URL 复制到本地浏览器中打开。
回传授权结果
把授权完成后跳转的 localhost URL 完整粘贴回 VPS 终端,直到出现成功提示。
对应命令如下:
cd /root/cliproxyapi
ALL_PROXY=socks5h://<USER>:<PASS>@<PROXY_IP>:<PORT> ./cli-proxy-api --claude-login --no-browser成功标志通常是:
- 终端显示
Login Successful - 服务能够继续进入后续正式运行阶段
Claude 登录必须由账号持有人在本地浏览器人工完成。不要反复尝试 OAuth,不要把账号密码、验证码或浏览器会话交给第三方工具或自动化流程。
第五阶段:正式投产
当隔离、验证、授权都完成后,再进入正式启用阶段。
启动服务
systemctl --user enable cliproxyapi.service
systemctl --user restart cliproxyapi.service查看管理后台
http://<VPS_IP>:8317/management.html这里可以用于做基础状态观察与运行监控。
第六阶段:客户端配置
如果要接入 Claude Code,可在本地配置中写入统一接口信息。
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "<你在 config.yaml 中自定义的 Key>",
"ANTHROPIC_BASE_URL": "http://<VPS_IP>:8317/v1",
"ANTHROPIC_MODEL": "claude-sonnet-4-5-20250929"
}
}运维检查清单
上线前建议逐项确认:
- 已开启
linger,服务支持常驻 - 已记录 VPS 原生机房 IP
- Systemd 环境变量已写入正确代理信息
- 已验证正常情况下输出住宅 IP
- 已验证错误代理情况下不会回落到机房 IP
- 已完成授权接力并确认登录成功
- 已能通过管理后台观察服务状态
- 已完成 Claude Code 或其他客户端接入
深度运维 FAQ
为什么不用 Docker?
在这个场景下,Systemd 对进程级环境变量的控制更直接,验证路径也更清晰,尤其适合配合 curl 做出口探测。
住宅代理失效了怎么办?
如果 Fail-Safe 配置正确,服务会直接停止工作,而不是继续走原生机房 IP。此时更换新代理并重启服务即可。
如何确认运行中的进程真的加载了代理变量?
cat /proc/$(pgrep cli-proxy-api)/environ | tr '\0' '\n' | grep _PROXY哪些地方最容易出问题?
最常见的是:
- 代理地址填错
- 只配置了某一个
_PROXY变量 - 修改了 service 文件但没有
daemon-reload - 授权阶段本地浏览器与 VPS 端网络策略不一致
- 只做了正向验证,没有做反向失效测试
后续优化方向
后续根据反馈继续补充:
- 多代理供应商对比
- 多客户端接入模板
- 管理后台监控指标说明
- 常见报错排查手册
- VPS 安全加固补充清单
后续可能继续拆分出“代理验证”“授权排障”“客户端接入模板”等独立子文章。