目录

怎么让 Claude 账号不容易被 ban:固定出口 IP、隔离登录环境

系列 - Qubes

这篇文章记录我怎么尽量让 Claude 账号不容易被 ban。

Claude 的风控会看登录和请求从哪来。如果同一个账号今天从 A 国登录,明天从 B 国请求;或者 IP 今天在家里,明天在酒店,后天又换成某个代理,就容易触发风控,严重的会被 ban。账号注册在别的国家/地区、人却在另一个地方用,或者经常换网络,都会碰到这个问题。

我的做法是:把 Claude 的登录和模型请求都交给同一台 qube,出口固定走 Mullvad 的 WireGuard。 Claude 看到的地址始终是这一个,不跟着你本机的网络变。写代码、跑命令还在你自己的电脑上,那边怎么换网络都不会影响 Claude。

先说清楚边界
这只能降低因为登录环境变化被风控、被 ban 的概率,不能保证一定不封。它主要管 IP 和登录环境这一块;支付、KYC、使用行为是另外几条线。账号本身的支付、行为、内容违规,该封还是会封。账号已经被停掉的话,换地址也救不回来。
TL;DR
  1. 登录 qube slchris-project 的 netvm 是 sys-bwg-mullvad,新连接只从 WireGuard 的 wg0 出去。出口是固定的,不跟着 Mac 的网络变。
  2. 登录 qube 上跑 magpie,监听 eth0:3425,只接受带网关密钥的局域网请求。Claude 的登录状态只留在这台 qube。
  3. 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-anti-ban,把封号原因归成 6 类。我按自己的情况整理成这张表:

风控信号 具体在查什么 这套方案能帮上吗
IP 和地区乱飘 登录和使用的 IP 是否一致;是不是数据中心或共享 VPN 出口;有没有跨国家、跨时区跳 能。登录和请求固定从同一个 Mullvad 出口出去,不跟本机网络变
支付 / 虚拟卡风控 卡 BIN(卡号前几位)、付款 IP、Stripe(支付服务商)的 fraud score(风险分);虚拟卡被批量拒付或追溯撤销 不能。支付是另一条线,得用稳定、真实的支付方式
KYC 触发 KYC(身份验证):新号高频使用、一次性邮箱、IP 多国跳变、没付款就调 API 部分能。固定 IP 和时区有帮助;邮箱、用量节奏、付款要自己注意
拼车 / 多人共用 多 IP 短时间登录、多设备、并发会话 部分能。一个人多台机器接同一个登录通常没问题;多人共用、多地区同时登录、并发批跑才是高风险
代充 / 黑卡 卡被 chargeback(拒付 / 退单)、账号被关联封禁 不能。这是支付来源问题
自动化行为 请求太快、间隔太规律、单次会话太长、system prompt(系统提示词)频繁替换 不能。这是使用行为问题,得自己控制节奏

所以,这套方案主要管第 1 条,第 3、4 条只能帮上一部分,剩下的几条它没办法。它不是一套完整的防封方案。

新号或刚充值的头 24-72 小时
社区里的说法是,刚注册或刚充值的头 24-72 小时风控会更敏感。那几天少量用、别批跑、别切 IP。稳定用一段时间再上重度任务。

社区里另一条常见路线是「自建海外 VPS + 独享 Max」(一个人用一份 Claude Max 订阅),让 Claude Code 直接在海外服务器上跑,本地只走 SSH。我的场景是家里已经有一台 Qubes,所以用登录 qube 来做隔离。思路其实一样:出口固定,一个登录只配一个出口,本机 IP 不暴露给 Claude。

Mullvad 不是住宅 IP
Mullvad 也是共享 VPN 出口,不是住宅 IP。它能固定出口,也不会把家里的 IP 暴露出去,但它不是最稳的出口。要更稳,可以把 sys-bwg-mullvad 换成住宅 IP 或自己的海外 VPS 出口;这篇的重点是 Qubes 里的隔离和固定出口,出口本身可以换。

前面表格里的第 1 条,是这套方案主要解决的。具体做法是把两件事分开:

  1. Claude 的登录和请求:固定放在 Mullvad 后面,Claude 只看到这一个出口的地址。这台 qube 不能访问家里的内网,也不会跟着你本机的网络变。
  2. 写代码、跑命令、访问内网:放在另一边。改文件、跑终端这些还在你自己的电脑上做。这边换网络、开别的 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。

Qubes 里的其他 qube 走不通这条路

它们的包不是从家里网线进来的,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」。

下面按顺序来。每一步都假设上一步已经成功。

文件从 README 里的地址下载,sha256 也在那里。把文件放到登录 qube 的 /rw/config/magpie/bin/magpie。服务听这台 qube 的 eth0,不要听 127.0.0.1。跑服务的用户是 user。

不要重启整台 qube
换文件、改配置,都只重启 magpie 服务。重启整台 qube 会把 Claude 的登录弄掉——文件还在,登录不在。

在登录 qube 里,用 user 执行:

magpie gateway-key add mac

名字是 mac。这个命令只把钥匙打印一次,丢了就再加一把。不要写进仓库。

以后再加别的客户端,用另一把名字,这样可以单独作废,不影响 Mac。

这一步不用手改防火墙。magpie.serve 会把 3425 写进 custom-input,只允许它的网关连进来,注释是 magpie-serve。写到别的链上没有用,包在那之前已经丢了。

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。

跑之前确认三件事:

  1. 当时的连接必须已经是 sys-net -> sys-firewall -> sys-bwg-mullvad -> slchris-project。
  2. 这两条不会新建 qube,也不会改 netvm。slchris-project 当时的 netvm 得是 sys-bwg-mullvad。
  3. sys-net、sys-firewall、sys-bwg-mullvad 这三台要开着。
跑 magpie.netfw 会动一次性 qube
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

先把 Mac 上家里这个局域网网段设成直连。这个网段要是被 Mac 自己的 VPN 带走,会连不上,或者请求先出 Mac 再绕回来。

然后加上远程连接,地址用 README 里的:

magpie provider add remote-magpie <key> url=http://<局域网地址>:3425 id=slchris

Claude Code 里不会自动列出 magpie 知道的全部连接。列表里要有 slchris,对话里选 slchris/claude/...。

在 Claude Code 里输入 /status。看这几个点:

  • Auto mode server 是 Enabled,审查就在 Claude 那边。开 Auto 会额外消耗额度,见「已知问题」。
  • 审查请求上有个 safeguards 字段,magpie 要原样交过去。
  • 这个字段没了的话,Claude Code 会自己再发一次请求做分类,用 Sonnet,不是你这次对话的那个模型,费用记在 magpie 这边。提示里会出现客户端自己的 127.0.0.1:3425。
  • 这次分类请求同样进登录 qube。

公网上扫不到 3425。没经过上面三台的机器也不该连上。界面截图里有家里的地址,我没贴。

前面的做法是 Mac 上跑 Claude Code,只把模型请求转进登录 qube。如果这台 Qubes 主机跑得动,也可以反过来:让 Claude Code 直接跑在登录 qube 里,外面用 Telegram Bot 操作。

这条路适合不需要访问家里内网的项目。登录 qube 只从 wg0 出去,回不了内网;要用内网的项目,还是走 Mac + magpie。

做法:

  1. 在 slchris-project 里装好 Claude Code,确认登录和出口都正常。
  2. 在 qube 里跑一个 Telegram Bot,用 long polling 主动连 Telegram,把它拉进自己的私有群。
  3. 群里按项目开 topic,一个 topic 对一个项目目录。
  4. Bot 收到消息后,在对应目录里跑 Claude Code,把结果发回 topic。

这么用有几个好处:

  • 不用把 magpie 的 3425 暴露给局域网,也不用在 Mac 上再装一套 magpie。Bot 从 qube 里主动往外连,外面不用开端口。
  • 人在外面也能用手机操作,不用带着那台 Mac。
  • 一个 topic 一个项目,切换项目不用翻聊天记录。
  • 少了 Mac 那层客户端和远程转发;如果 Bot 不走 Auto mode,也就少了 classifier 那部分额外消耗。
注意
Bot 的 token 要保管好,群组设成私有。Bot 能跑命令,等于把登录 qube 的操作权交给了这个群。别把它拉进公开群,也别把 Bot token 写进仓库。

这条路和前面的 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 的那把钥匙。

一个登录接多台机器,不等于可以多人拼车
这是一个人自己多台机器接同一个登录。别拉别人一起用,也别在多台机器上同时跑并发任务。多人共用、多地区同时登录、并发批跑,正是风控里「拼车 / 自动化」的信号。

这套东西平时有两种管法:命令行和 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,显示会按浏览器窗口自适应。

Web 入口的控制面很大

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 还是用命令行。

注意

远程接入 Claude 时,Claude Code 的 Auto mode 会触发 classifier(分类器)和审查请求。开启 Auto 之后,这个请求会消耗额度,而且不一定用你当前对话的模型,费用记在登录 qube 那边的账号上。

如果 magpie 没有把 safeguards 字段原样交过去,Claude Code 会用 Sonnet 再补发一次分类请求,等于多消耗一次。提示里会出现客户端自己的 127.0.0.1:3425(本地地址,不是公网地址),这次请求同样走登录 qube。

magpie 转发本身没问题,这种远程接入方式本来就会这样。不需要 Auto 的时候,在 Claude Code 里把它关掉;开着的时候留意额度。

这样能保证不被 ban 吗?
不能。它只是让同一个登录始终从同一个出口出去,减少「IP 乱飘、地区跳来跳去」带来的风控。账号的支付、行为、内容违规,还是会封。
多个国家/地区的账号怎么放?
一个登录固定一个出口,不要今天用这个国家的出口、明天换另一个。要放多个账号,就按「再加一台」里那样,各自建登录 qube、各自用不同的端口和网关密钥,每个登录配一个固定的出口 qube。
一个登录接多台机器,会被当成拼车吗?
一个人自己用、不同时并发跑,通常没问题。多人共用、多个地区同时登录、并发批跑,才是高风险。别把同一个登录发给别人一起用。
支付、KYC、使用节奏它管吗?
不管。这套只固定出口 IP 和登录环境。支付方式、账号资料、请求频率、单次会话时长,要按各自的规则另外注意。
重启登录 qube 后 Claude 登录没了?
会。magpie 文件在 /rw 还在,登录不在。换文件或改配置时只重启服务,不要重启整台 qube。
Mac 能连上 3425,但 Claude 还是提示地区或风控?
端口通只说明局域网通了。先看登录 qube 的新连接是不是从 wg0 出去,再看这个出口的地址是不是你一直用的那个,最后确认账号本身有没有被停。账号被停的话,换地址没有用。
Qubes 里的其他 qube 能直接用这个端口吗?
不能。它们的包不是从家里网线进来的,sys-net 不会转。用 qrexec 转到登录 qube 的 127.0.0.1:3425 也不行,见上面「局域网这一段」的说明。
升级 magpie 后要做什么?
把新文件换到每台登录 qube 的 /rw/config/magpie/bin/magpie,权限 0755,属主 user,然后只重启 qubes-magpie.service。Salt 不会帮你下载文件。
3425 暴露在公网上安全吗?
不要把端口开到公网。这条转发只从家里网线那一侧进来,sys-net 只认局域网源地址,后面每一台只认上一台转过来的包。公网上扫不到 3425。

配置和套用顺序在 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、隔离登录环境」有关的部分。

这台机器不够用的时候,另一个办法是 Qubes Air。它把 Qubes 的隔离放到别的机器上。控制台负责开机器,RemoteVM 和 Relay 把 qrexec 接过去。我想用它在 AWS 或 GCP 上开一台大一点的机器来跑 Claude。

现在能开的是 Proxmox。AWS 和 GCP 还没接上,开不了。Qubes 这边的 Salt 还是 qubes-salt-config。