怎么让 Claude 账号不容易被 ban:固定出口 IP、隔离登录环境
这篇文章记录我怎么尽量让 Claude 账号不容易被 ban。
Claude 的风控会看登录和请求从哪来。如果同一个账号今天从 A 国登录,明天从 B 国请求;或者 IP 今天在家里,明天在酒店,后天又换成某个代理,就容易触发风控,严重的会被 ban。账号注册在别的国家/地区、人却在另一个地方用,或者经常换网络,都会碰到这个问题。
我的做法是:把 Claude 的登录和模型请求都交给同一台 qube,出口固定走 Mullvad 的 WireGuard。 Claude 看到的地址始终是这一个,不跟着你本机的网络变。写代码、跑命令还在你自己的电脑上,那边怎么换网络都不会影响 Claude。
- 登录 qube
slchris-project的 netvm 是sys-bwg-mullvad,新连接只从 WireGuard 的wg0出去。出口是固定的,不跟着 Mac 的网络变。 - 登录 qube 上跑 magpie,监听
eth0:3425,只接受带网关密钥的局域网请求。Claude 的登录状态只留在这台 qube。 - Mac 上的 Claude Code 连本机 magpie,本机 magpie 通过局域网连到登录 qube 的
3425。模型请求从 Mullvad 出去;改文件和跑命令仍在 Mac 上。
这篇文章适合谁
这篇适合这些场景:
- 账号注册在别的国家/地区,或者你需要在不同地区使用;
- 你经常换网络:家里、公司、酒店、热点,IP 会变;
- 你不想让 Claude 看到家里的真实地址;
- 你有多台机器,想共用同一个 Claude 登录,但不想每台机器各自登录、IP 各不相同;
- 你愿意折腾 Qubes、防火墙和 Salt。
这篇不是零基础的 Qubes 教程。你至少需要:
- 装好 Qubes OS,能开 qube,会在 dom0 里跑命令;
- 有一个能用的 WireGuard 出口配置(本文用 Mullvad);
- 有一个没被停掉的 Claude 账号,并且已经在用 Claude Code。
如果你只是想让 Claude 能用,但还没装 Qubes,这篇不适合当入门教程。下面会先把用到的名词解释一遍,再进入操作。
环境介绍
这一节先说明本文用到的名字,再列一下我这台机器的版本。
名词速查
第一次看 Qubes 和 magpie 的话,先扫一眼这张表,后面遇到再回来查。
| 名词 | 说明 |
|---|---|
| Qubes OS | 把不同任务放进不同虚拟机的桌面系统 |
| qube | Qubes 里的虚拟机 |
| dom0 | Qubes 的管理域 |
| AppVM | 日常干活的 qube,/rw 以外重启会还原 |
| TemplateVM | 给 AppVM 提供系统文件的模板 |
| DispVM | 一次性 qube |
| netvm | 这台 qube 通过哪台 qube 上网 |
| sys-net | 管物理网卡的 qube |
| sys-firewall | 管防火墙和转发的 qube |
| sys-bwg-mullvad | 本文的出口 qube,只从 wg0 出去 |
WireGuard / wg0 |
VPN 协议 / 它的虚拟网卡 |
| Mullvad | VPN 服务商 |
| magpie | 管理模型供应商和请求转发的程序 |
| 网关密钥 | 别的电脑访问远程 magpie 用的密码 |
| DNAT / SNAT | 改目的地址 / 改来源地址 |
| qrexec | Qubes 里 qube 之间通信的机制 |
Salt / qubesctl |
自动配置 Qubes 的工具 / 在 dom0 执行 Salt 的命令 |
版本信息(可以先跳过)
这一节是参考信息,第一次读可以先跳过,出问题时再回来对。
- 机器是 Qubes OS R4.3。Debian 用
debian-13-minimal,Fedora 用 43。 slchris-project是 AppVM,模板tpl-agents。这个模板从debian-minimal克隆,实际是debian-13-minimal。模板自己没有 netvm。sys-bwg-mullvad的模板是tpl-project-net,也是debian-13-minimal。里面装了wireguard-tools、nftables、openresolv。wireguard-tools没有单独固定版本,跟着这个模板的 apt 走。Mullvad 的wg0.conf放在这台 qube 自己的盘上,路径在/rw,不在模板里。sys-firewall是一次性 qube,模板是default-dvm。sys-net是fedora-43-xfce,家里局域网从它进来。- 登录 qube 上的 magpie 用官方 Linux amd64 终端版 v0.1.2344,文件名
magpie-cli-linux-amd64。GTK 那个图形包不用。文件放在/rw/config/magpie/bin/magpie,权限0755,属主user。/rw是这台 qube 自己的盘,换模板不会丢。下载地址和 sha256 写在 salt/magpie/README.md,对的是这个 tag 的SHA256SUMS。salt/config.jinja里没有 magpie 的版本号。Salt 不会下载它,也不保存网关钥匙。文件不在的时候,服务退出后停着。/usr/bin/magpie只是找不到文件时的后备。 - Mac 上的 magpie 另外装,可以和 v0.1.2344 不是同一个版本。
- GUI 管理用的 KasmVNC 是 1.5.0,装在
fedora-43-xfce模板里。版本、下载地址和 sha256 在salt/config.jinja的cfg.gui_vnc.kasmvnc。
Claude 风控在看什么
社区里有一份整理得比较全的 Claude-anti-ban,把封号原因归成 6 类。我按自己的情况整理成这张表:
| 风控信号 | 具体在查什么 | 这套方案能帮上吗 |
|---|---|---|
| IP 和地区乱飘 | 登录和使用的 IP 是否一致;是不是数据中心或共享 VPN 出口;有没有跨国家、跨时区跳 | 能。登录和请求固定从同一个 Mullvad 出口出去,不跟本机网络变 |
| 支付 / 虚拟卡风控 | 卡 BIN(卡号前几位)、付款 IP、Stripe(支付服务商)的 fraud score(风险分);虚拟卡被批量拒付或追溯撤销 | 不能。支付是另一条线,得用稳定、真实的支付方式 |
| KYC 触发 | KYC(身份验证):新号高频使用、一次性邮箱、IP 多国跳变、没付款就调 API | 部分能。固定 IP 和时区有帮助;邮箱、用量节奏、付款要自己注意 |
| 拼车 / 多人共用 | 多 IP 短时间登录、多设备、并发会话 | 部分能。一个人多台机器接同一个登录通常没问题;多人共用、多地区同时登录、并发批跑才是高风险 |
| 代充 / 黑卡 | 卡被 chargeback(拒付 / 退单)、账号被关联封禁 | 不能。这是支付来源问题 |
| 自动化行为 | 请求太快、间隔太规律、单次会话太长、system prompt(系统提示词)频繁替换 | 不能。这是使用行为问题,得自己控制节奏 |
所以,这套方案主要管第 1 条,第 3、4 条只能帮上一部分,剩下的几条它没办法。它不是一套完整的防封方案。
社区里另一条常见路线是「自建海外 VPS + 独享 Max」(一个人用一份 Claude Max 订阅),让 Claude Code 直接在海外服务器上跑,本地只走 SSH。我的场景是家里已经有一台 Qubes,所以用登录 qube 来做隔离。思路其实一样:出口固定,一个登录只配一个出口,本机 IP 不暴露给 Claude。
sys-bwg-mullvad 换成住宅 IP 或自己的海外 VPS 出口;这篇的重点是 Qubes 里的隔离和固定出口,出口本身可以换。为什么要把登录固定在一个出口
前面表格里的第 1 条,是这套方案主要解决的。具体做法是把两件事分开:
- Claude 的登录和请求:固定放在 Mullvad 后面,Claude 只看到这一个出口的地址。这台 qube 不能访问家里的内网,也不会跟着你本机的网络变。
- 写代码、跑命令、访问内网:放在另一边。改文件、跑终端这些还在你自己的电脑上做。这边换网络、开别的 VPN、出差,都影响不到 Claude 看到的地址。
出口选哪个国家,尽量和账号长期使用的地区一致,选定后别频繁换。wg0.conf 里连的是哪台 Mullvad 服务器,决定了 Claude 看到的地址。
这台 Qubes 主机现在跑不动大任务,所以干活先放在 Mac 上。
为什么不直接在 Mac 上开全局 VPN?因为我要的是「只有登录和模型请求走固定出口」,干活那边还要照常访问家里内网。把登录单独关进一台「回不了内网、只从 Mullvad 出去」的 qube,登录和干活互不打扰。
有人会想直接在 Mac 上设 HTTPS_PROXY。那只能改 Mac 上的程序;你关了代理或换了网络,Claude 看到的地址就变了。登录 qube 从哪块网卡出去,由它的 netvm 决定,跟 Mac 无关。
请求是怎么走的
一张简图
graph LR CC["Claude Code
(Mac)"] --> LM["本机 magpie
(Mac)"] LM -->|"只转发模型请求"| RQ["登录 qube
slchris-project"] RQ -->|"Mullvad 出口"| CL["Claude"] CC -.->|"改文件 / 跑命令"| LOCAL["Mac 本地"]
Mac 上的 Claude Code 负责改文件和跑命令。它把「问模型」的请求交给本机 magpie,本机 magpie 再通过局域网转到登录 qube 的远程 magpie。登录 qube 从 Mullvad 出去,Claude 看到的是 Mullvad 的地址。
局域网这一段
graph LR Mac["Mac 上的 magpie"] -->|"家里局域网 3425"| Net["sys-net"] Net -->|"转到下一台"| Fw["sys-firewall"] Fw -->|"转到下一台"| Vpn["sys-bwg-mullvad"] Vpn -->|"转到下一台"| App["slchris-project"]
家里的电脑访问 Qubes 主机的 3425,包经过 sys-net、sys-firewall、sys-bwg-mullvad,最后到登录 qube。每一台都把目的地址改成下一台,来源地址改成自己。防火墙里这两条链叫 custom-dnat-magpie 和 custom-snat-magpie。
sys-net 只认从家里网线那一侧进来、源地址属于局域网的包。后面每一台只认上一台转过来的包。旁边别的 qube 连不上这个端口。登录 qube 里看到的来源,是 sys-bwg-mullvad,不是 Mac。
它们的包不是从家里网线进来的,sys-net 不会转。
用 qrexec 转到登录 qube 自己的 127.0.0.1:3425 也不行。magpie 会把这种本机连接当成登录 qube 自己在用,不查钥匙,命令也会在登录 qube 里跑。发起连接的那台 qube 还是访问不了内网。
出去这一段
graph LR App["slchris-project 里的 magpie"] --> Vpn["sys-bwg-mullvad"] Vpn -->|"只从 wg0"| Exit["Mullvad"] Exit --> Claude["Claude"]
sys-bwg-mullvad 上原来的规则还在。登录 qube 新开的连接没有开例外,还是只能从 wg0 出去。Mac 能打开 3425,只说明局域网通了。Claude 看到哪个地址,要看登录 qube 上新连接是不是从 wg0 出去。
一次对话的完整路径
sequenceDiagram participant Code as Claude Code participant Local as Mac 上的 magpie participant Remote as slchris-project 的 magpie participant Claude as Claude Code->>Local: 选 slchris/claude/… Local->>Remote: 连到 3425 Remote->>Claude: 从 wg0 出去 Claude-->>Remote: 回答 Remote-->>Local: 回答 Local-->>Code: 回答 Note over Code: 改文件和跑命令在 Mac 上
Mac 上选的名字是 slchris/claude/...。登录 qube 发出去的模型名还是 claude/...。前面的 slchris 是 Mac 上这个远程连接的名字。
操作位置一览
后面几条命令分散在不同机器上,先看这张表,别在错的地方执行。
| 在哪台机器 | 要做什么 |
|---|---|
| Mac | 把家里局域网设成直连;加远程 magpie;跑 Claude Code |
登录 qube slchris-project |
放 magpie 文件;加网关钥匙;重启服务 |
| dom0 | 跑两条 qubesctl |
sys-net / sys-firewall / sys-bwg-mullvad |
由第二条 Salt 自动改,不用手动登录 |
日常管理还有 Web 方式,见后面「管理与维护:CLI 和 Web」。
开始配置
下面按顺序来。每一步都假设上一步已经成功。
1. 把 magpie 文件放进登录 qube
文件从 README 里的地址下载,sha256 也在那里。把文件放到登录 qube 的 /rw/config/magpie/bin/magpie。服务听这台 qube 的 eth0,不要听 127.0.0.1。跑服务的用户是 user。
2. 加一把给 Mac 用的网关钥匙
在登录 qube 里,用 user 执行:
magpie gateway-key add mac
名字是 mac。这个命令只把钥匙打印一次,丢了就再加一把。不要写进仓库。
以后再加别的客户端,用另一把名字,这样可以单独作废,不影响 Mac。
3. 确认 3425 的放行规则
这一步不用手改防火墙。magpie.serve 会把 3425 写进 custom-input,只允许它的网关连进来,注释是 magpie-serve。写到别的链上没有用,包在那之前已经丢了。
4. 在 dom0 里应用 Salt
dom0 里执行下面两条。不要 top.enable magpie。slchris-project 保持开着。
sudo qubesctl --skip-dom0 --targets=slchris-project state.apply magpie.serve
sudo qubesctl state.apply magpie.netfw
第一条写登录 qube 里的服务和防火墙。第二条改 sys-net、sys-firewall、sys-bwg-mullvad。
跑之前确认三件事:
- 当时的连接必须已经是
sys-net -> sys-firewall -> sys-bwg-mullvad -> slchris-project。 - 这两条不会新建 qube,也不会改 netvm。
slchris-project当时的 netvm 得是sys-bwg-mullvad。 sys-net、sys-firewall、sys-bwg-mullvad这三台要开着。
default-dvm 会起来一下,把防火墙写进一次性 qube 用的模板,写完关掉。同一模板上,名字是 disp 加数字、正暂停的一次性 qube,会被关掉。sys-firewall 和 sys-usb 不停。跑之前看一下有没有还要留的暂停窗口。sys-net、sys-firewall、sys-bwg-mullvad 或登录 qube 重建以后,地址会变,第二条要再跑一次。
两条都跑完,进登录 qube 重启一次 magpie 服务,让它用上第 1 步放好的文件:
sudo systemctl restart qubes-magpie.service
5. 在 Mac 上添加远程 magpie
先把 Mac 上家里这个局域网网段设成直连。这个网段要是被 Mac 自己的 VPN 带走,会连不上,或者请求先出 Mac 再绕回来。
然后加上远程连接,地址用 README 里的:
magpie provider add remote-magpie <key> url=http://<局域网地址>:3425 id=slchris
Claude Code 里不会自动列出 magpie 知道的全部连接。列表里要有 slchris,对话里选 slchris/claude/...。
6. 检查有没有走对
在 Claude Code 里输入 /status。看这几个点:
- Auto mode server 是 Enabled,审查就在 Claude 那边。开 Auto 会额外消耗额度,见「已知问题」。
- 审查请求上有个
safeguards字段,magpie 要原样交过去。 - 这个字段没了的话,Claude Code 会自己再发一次请求做分类,用 Sonnet,不是你这次对话的那个模型,费用记在 magpie 这边。提示里会出现客户端自己的
127.0.0.1:3425。 - 这次分类请求同样进登录 qube。
公网上扫不到 3425。没经过上面三台的机器也不该连上。界面截图里有家里的地址,我没贴。
另一种用法:在登录 qube 里接 Telegram Bot
前面的做法是 Mac 上跑 Claude Code,只把模型请求转进登录 qube。如果这台 Qubes 主机跑得动,也可以反过来:让 Claude Code 直接跑在登录 qube 里,外面用 Telegram Bot 操作。
这条路适合不需要访问家里内网的项目。登录 qube 只从 wg0 出去,回不了内网;要用内网的项目,还是走 Mac + magpie。
做法:
- 在
slchris-project里装好 Claude Code,确认登录和出口都正常。 - 在 qube 里跑一个 Telegram Bot,用 long polling 主动连 Telegram,把它拉进自己的私有群。
- 群里按项目开 topic,一个 topic 对一个项目目录。
- Bot 收到消息后,在对应目录里跑 Claude Code,把结果发回 topic。
这么用有几个好处:
- 不用把 magpie 的
3425暴露给局域网,也不用在 Mac 上再装一套 magpie。Bot 从 qube 里主动往外连,外面不用开端口。 - 人在外面也能用手机操作,不用带着那台 Mac。
- 一个 topic 一个项目,切换项目不用翻聊天记录。
- 少了 Mac 那层客户端和远程转发;如果 Bot 不走 Auto mode,也就少了 classifier 那部分额外消耗。
这条路和前面的 magpie 方案不冲突。可以只用一种,也可以两种都留着:Telegram Bot 适合轻量、随时看结果;magpie 适合在 Mac 上继续用 Claude Code 的完整交互。
升级
版本记在 salt/magpie/lock.yml。GitHub Actions 每天看一次 magpie-releases。上游发了新的 Linux amd64 终端版,就开一个 PR,把 lock.yml 和 README 里的版本、地址、sha256 一起改掉。核对用的是那个 tag 的 SHA256SUMS。GTK 包不会跟。
PR 合进 main 之后,Salt 还是不会把文件下到 qube 里。每台登录 qube 自己换 /rw/config/magpie/bin/magpie,权限 0755,属主 user。漏掉的那台还是旧文件。只重启服务,不要重启 qube。
sudo systemctl restart qubes-magpie.service
Mac 上的 magpie 自己升,不必和登录 qube 同一个版本。想马上看上游有没有新版本,在仓库的 Actions 里手动跑 magpie pin。
模板里的软件是另一件事。tpl-agents 没有 netvm,apt 通过 UpdatesProxy 走到 sys-bwg-net(UpdatesProxy 是 Qubes 让无网络模板也能更新的机制)。模板改完要先关掉模板。已经开着的 qube 要重启,才用得上模板里的新文件。重启 slchris-project 会丢掉 Claude 的登录,所以这种更新挑时间做。
tpl-project-net 里的 wireguard-tools 更新之后,重启 sys-bwg-mullvad,正在跑的出口 qube 才会用到新文件。wg0.conf 在 /rw,重启还在。出口会断一下。登录 qube 不用为这个重启。出口 qube 如果是重建的,地址变了,再跑一次 magpie.netfw。
Qubes 换大版本,或者 Debian、Fedora 换代,是换模板。那个和替换这个 magpie 文件不是同一步。
再加一台(进阶)
有两种加法。一种是再做一个登录。一种是同一个登录再接一个客户端。
再做一个登录,就在配置里再写一条 profile,再写一条 magpie 服务。各自的 qube、端口、网关钥匙、客户端上的名字都分开。Salt 不会去创建 qube,也不会改 netvm。两个登录不能用同一个端口,也不能写到同一台 qube。22、2333、6080、8080、8443、8444、18080 这些端口已经有别的用途。
下面用 example 举例,实际名字换成你自己的项目。它和 slchris 共用 sys-bwg-mullvad,Claude 看到的是同一个 Mullvad 地址。如果要让 example 走另一个出口,就把它的 netvm 指向另一台接在 sys-firewall 后面的出口 qube;那台项目 qube 的 netvm 也要是同一台。实际的 profile 里还有 email、git、gpg、pass。magpie 只用其中的 project 和 netvm。
"profiles": {
"slchris": { "...": "不变" },
"example": {
"netvm": "sys-bwg-mullvad",
"project": "example-project",
},
},
"magpie": {
"enabled": True,
"services": {
"slchris": {"port": 3425},
"example": {"port": 3426},
},
},
新 qube 上也放一份 v0.1.2344,权限 0755,属主 user。然后:
sudo qubesctl --skip-dom0 --targets=example-project state.apply magpie.serve
进那台 qube,用 user 执行:
magpie gateway-key add mac
sudo systemctl restart qubes-magpie.service
这里的 mac 只是这台 qube 上的钥匙名。magpie.serve 每台登录 qube 跑一次。magpie.netfw 还是只跑一次,slchris 和新的会一起写进去。同一台上的防火墙脚本只有一份,一个端口一条转发。sys-net、sys-firewall 和用到的出口 qube 都要开着。客户端再加一个连接:
magpie provider add remote-magpie <key> url=http://<局域网地址>:3426 id=example
客户端上看到的名字是 example/claude/...。
同一个登录再接一个客户端,不要再加一条服务。登录 qube 还是 slchris-project,端口还是 3425。在登录 qube 里另加一把钥匙,客户端上的远程连接指向已有的转发。现在客户端只有 Mac,用的就是名叫 mac 的那把钥匙。
管理与维护:CLI 和 Web
这套东西平时有两种管法:命令行和 Web。
命令行就是前面那些:
- dom0 里跑
qubesctl,改服务、防火墙、netvm; - 登录 qube 里跑
magpie和systemctl,加钥匙、换版本、重启服务。
一次性的操作、写脚本、排错,用命令行更直接。
账号多了以后,我用 Kasm VNC 在浏览器里管整台机器的桌面。配置在 qubes-salt-config 的 salt/mgmt/gui-vnc/,由 salt/config.jinja 里的 cfg.gui_vnc 控制。
它是怎么接的
它不是把某个 qube 的桌面单独开个端口,而是按 Qubes 的 GUI domain 来做:
sys-gui-vnc是 GUI domain,netvm为空,KasmVNC 只监听自己的127.0.0.1:8444;sys-vncweb是前面的转发 qube,netvm是sys-firewall,用qubes.ConnectTCP+8444把浏览器流量转到 GUI domain;- 家里局域网访问
https://<sys-net 的物理 IP>:6080/,DNAT 只认cfg.remote_debug.lan_subnet里的源地址,默认是10.31.0.0/24和10.42.0.0/24。
default_guivm = True,所以所有 qube 的窗口都在浏览器里,物理显示器只剩 dom0。sync_dom0_password = True 会把 dom0 用户的 shadow 哈希同步进 GUI domain,过了 KasmVNC 的密码之后,lightdm 直接要你熟悉的 dom0 密码。
部署
按 mgmt.gui-vnc 的顺序来:
sudo qubesctl state.apply mgmt.gui-vnc.clone
sudo qubesctl --skip-dom0 --targets=fedora-43-xfce state.apply mgmt.gui-vnc.install
qvm-shutdown --wait fedora-43-xfce
sudo qubesctl state.apply mgmt.gui-vnc.create
sudo qubesctl --skip-dom0 --targets=sys-gui-vnc state.apply mgmt.gui-vnc.kasm
sudo qubesctl state.apply mgmt.gui-vnc.web-create
sudo qubesctl --skip-dom0 --targets=tpl-gui-vnc-web state.apply mgmt.gui-vnc.web-install
qvm-shutdown --wait tpl-gui-vnc-web
qvm-start sys-vncweb
sudo qubesctl --skip-dom0 --targets=sys-vncweb state.apply mgmt.gui-vnc.web-configure
sudo qubesctl state.apply mgmt.gui-vnc.netfw
qvm-shutdown --all --wait
sudo qubesctl state.apply mgmt.gui-vnc.prefs
prefs 会把整台机器切到 GUI domain,要求先关掉所有 qube。这一步最好在本机控制台做;在远程 SSH 里临时 qvm-shutdown --all 会把 sys-usb 和网络 qube 一起停掉。不打算用 default_guivm 的话,把 cfg.gui_vnc.default_guivm 设成 False,只用 qvm-prefs <qube> guivm sys-gui-vnc 把选中的 qube 放进去。
global-settings 和 updater-bridge 是可选项,按需再 apply。完整的部署顺序、每步做什么、已知问题,都在 salt/mgmt/gui-vnc/README.md。
访问
先找 sys-net 的物理地址:
qvm-run --pass-io sys-net 'ip -4 addr show | grep -v 127.0.0.1'
然后在同一个局域网里打开 https://<物理地址>:6080/。KasmVNC 的密码在 /rw/config/kasmvnc/credentials.txt,可以在 dom0 里读:
qvm-run --pass-io -u root sys-gui-vnc 'cat /rw/config/kasmvnc/credentials.txt'
KasmVNC 客户端里把 Scaling 设成 Remote Resizing,显示会按浏览器窗口自适应。
Kasm VNC 看到的是整台机器的桌面。谁能连上 6080、过了 KasmVNC 密码和 lightdm,谁就能操作所有 qube。KasmVNC 的密码不是 dom0 密码。断开浏览器前先锁屏或注销,否则下一个连上的人会看到已经登录的桌面。
它是给内网用的:DNAT 只放行 cfg.remote_debug.lan_subnet,证书是自签的,默认不要开到公网。要在外面用,走 VPN 或 SSH 隧道。Claude 的出口仍然只走 sys-bwg-mullvad 的 wg0,别为了 Web 管理把登录 qube 的网络改乱。
命令行和 Web 不冲突:日常看状态、切账号用 Web;批量改配置、跑 Salt 还是用命令行。
已知问题
开 Auto 之后,classifier 会额外消耗额度
远程接入 Claude 时,Claude Code 的 Auto mode 会触发 classifier(分类器)和审查请求。开启 Auto 之后,这个请求会消耗额度,而且不一定用你当前对话的模型,费用记在登录 qube 那边的账号上。
如果 magpie 没有把 safeguards 字段原样交过去,Claude Code 会用 Sonnet 再补发一次分类请求,等于多消耗一次。提示里会出现客户端自己的 127.0.0.1:3425(本地地址,不是公网地址),这次请求同样走登录 qube。
magpie 转发本身没问题,这种远程接入方式本来就会这样。不需要 Auto 的时候,在 Claude Code 里把它关掉;开着的时候留意额度。
常见问题
/rw 还在,登录不在。换文件或改配置时只重启服务,不要重启整台 qube。wg0 出去,再看这个出口的地址是不是你一直用的那个,最后确认账号本身有没有被停。账号被停的话,换地址没有用。sys-net 不会转。用 qrexec 转到登录 qube 的 127.0.0.1:3425 也不行,见上面「局域网这一段」的说明。/rw/config/magpie/bin/magpie,权限 0755,属主 user,然后只重启 qubes-magpie.service。Salt 不会帮你下载文件。sys-net 只认局域网源地址,后面每一台只认上一台转过来的包。公网上扫不到 3425。相关阅读
- Qubes 上使用 VPN 服务:把 VPN 拆成独立 netvm 的思路。
- Qubes 使用 split GPG:把 GPG 私钥留在单独的 qube 里。
链接
配置和套用顺序在 qubes-salt-config 的 salt/magpie/,二进制摘要和局域网地址在 README。
magpie 的仓库是 github.com/yetone/magpie,远程连接的说明在 usemagpie.ai/docs/zh/remote。v0.1.2344 的终端版在 magpie-releases。
Qubes OS R4.3 的文档在 qubes-os.org。出口是 Mullvad 的 WireGuard,qube 叫 sys-bwg-mullvad。
封号原因和防封思路参考了 Claude-anti-ban。它讲的是通用场景,这篇只取其中和「固定出口 IP、隔离登录环境」有关的部分。
One more thing
这台机器不够用的时候,另一个办法是 Qubes Air。它把 Qubes 的隔离放到别的机器上。控制台负责开机器,RemoteVM 和 Relay 把 qrexec 接过去。我想用它在 AWS 或 GCP 上开一台大一点的机器来跑 Claude。
现在能开的是 Proxmox。AWS 和 GCP 还没接上,开不了。Qubes 这边的 Salt 还是 qubes-salt-config。
如果你觉得这篇文章对你有所帮助,欢迎赞赏~
赞赏