若团队已托管域名在 Cloudflare,又不想维护自建中继上的 SSH 反向隧道,可以用 cloudflared 把各 vpshalo 区域 远程 Mac 上的 OpenClaw 接到固定公网 hostnameingress 规则写死谁进谁、回源永远 127.0.0.1。值班侧再把各区探针结果合并成一条摘要,避免「五区同时闪断」刷爆 on-call。本文与 MagicDNSSSH -R 两篇并列,择一为主 Runbook,勿混用凭证目录。

全球入口与 DNS 策略可先读 《全球入口决策矩阵》;若你已用 Worker 做就近与健康检查,可对照 《Cloudflare Worker 与 SSH p95 验收》。纯 overlay 组网请改读 《OpenClaw + MagicDNS 多区域网关》;跳板机 SSH 路线见 《loopback + SSH 反向隧道》。规格与下单用 首页套餐价格购买页 等站内公开页即可。

安全边界(先签字再动键盘)

  • 分区状态:每区域独立 OPENCLAW_HOME独立隧道(或至少独立 hostname / 凭证文件),禁止把多区 credentials.json 软链到同一仓库路径。
  • 回源只认 loopback:OpenClaw HTTP/网关监听 127.0.0.1:PORTingress 里写 http://127.0.0.1:PORT,勿写成内网其它机器的 IP,以免把「隧道出口」变成横向移动跳板。
  • 公网侧须鉴权:浏览器看到的是 Cloudflare 边缘证书;到达源站前流量已在隧道内加密,但应用层仍应对外身份与权限做 API Key / Access 策略 / OAuth 等至少一种约束,避免「有了隧道就裸奔管理面」。
  • 令牌即秘密:TUNNEL_TOKEN 等同长期机房口令:只进密钥管理或 systemd 环境文件,不进 Git、不进截图、不进 Slack。

最小可复现步骤(每区一遍)

下列步骤按「东京 / 首尔 / 香港 …」各复制一份;把隧道名、hostname、PORT 换成工单真实值。cloudflared 版本以 Cloudflare 文档为准。

  • 1. 环境:登录该区域 远程 Mac,安装官方渠道 cloudflared,导出独立 OPENCLAW_HOME,确认磁盘与 CPU 够跑网关与隧道。
  • 2. 启 OpenClaw(loopback):按发行版文档启动网关,监听 127.0.0.1:PORT;用本机 curl 先验 /health 或等价路径。
  • 3. Zero Trust 里建隧道:在 Cloudflare 控制台创建 Tunnel,记下 tunnel id;安装方式选「token」时复制 TUNNEL_TOKEN(仅展示一次的那串),写入本机 root 不可读以外的受控路径或 systemd EnvironmentFile
  • 4. 固定 ingress:在隧道绑定的 config.yml(或 Dashboard 等价配置)写清 hostname 与路径规则,例如 hostname: claw-jp.example.comservice: http://127.0.0.1:PORT;最后一条用 service: http_status:404 收口未知 Host,避免误配漏网。
  • 5. 常驻 cloudflared:cloudflared tunnel run 配合 systemd(或 launchd)Restart=always;升级前先 cloudflared --version 与变更窗口对齐。
  • 6. 合并输出:每区内脚本高频打 127.0.0.1:PORT 与可选的「隧道进程存活」检查;跨区域编排只消费「区号 + 状态摘要」。告警合并为一条(如「Tunnel JP/KR down」)并设退避,区分「OpenClaw 进程挂」与「cloudflared 断连」。
# ~/.cloudflared/config.yml 示例(勿提交真实 token)
tunnel: <TUNNEL_ID>
credentials-file: /path/to/<TUNNEL_ID>.json

ingress:
  - hostname: claw-jp.example.com
    service: http://127.0.0.1:18789
  - service: http_status:404

# systemd 环境文件(权限 600)
# TUNNEL_TOKEN=eyJhIjo...

# 本机探针(在 Mac 上跑)
curl -fsS --max-time 3 http://127.0.0.1:18789/health && echo OK
若 Dashboard 与本地 config.yml 双写 ingress,以最后一次下发到连接器的为准;生产建议单一事实来源(要么全本地文件 + CI 下发,要么全 Dashboard),避免「线上以为 A、机器上仍是 B」。

FAQ:隧道证书、端口、令牌

用户浏览器里看到的是哪张证书? 终端用户看到的是 Cloudflare 边缘签发的 HTTPS 证书(或你上传的自定义证书)。隧道连接器与 Cloudflare 之间另有通道认证,不等同于「给源站装一张公网 DV 证书」;不要在混淆概念的情况下关掉 Access 策略。

要开哪些端口? OpenClaw 只占用你选的 127.0.0.1:PORT(示例里 18789 仅为占位)。cloudflared 默认出站连 Cloudflare,一般无需对公网入站放行;若启用本地 metrics(常见如 --metrics 绑定 127.0.0.1:20241),同样建议只绑 loopback,由本机采集器拉取。

TUNNEL_TOKEN 和 credentials JSON 什么关系? 安装向导给的 TUNNEL_TOKEN 适合「一条命令 / systemd 拉起」;等价能力也可落到 credentials-file 指向的 JSON。二者不要混进同一台机的两个服务重复跑同一隧道 id;轮换时在 Zero Trust 侧作废旧凭证并滚动重启。

和 SSH -R、MagicDNS 怎么选? 已有 Cloudflare 域名与 Zero Trust 流程、希望固定公网 DNS 名与边缘策略,用本文;只有跳板 SSH、审计要看明文 SSH 路径,用 loopback + -R 篇;全员 Tailscale 用 MagicDNS 篇

多区域要几条隧道? 推荐每活跃 PoP 一条隧道或至少独立 hostname,故障域清晰;合并的是告警与状态摘要,不是把多条隧道绑成同一个 ingress 目标盲转发。

延伸阅读:Split-horizon 与制品回源延迟仍影响「你到 Mac」的体感,见 《Split-horizon 与 GeoDNS 矩阵》。OpenClaw 子命令以锁定版本为准,本文只固定编排与入口形状。

config ingress令牌路径探针合并规则写进同一页 Runbook 后,再在目标区域开通 vpshalo 远程 Mac 做灰度;评审附件附上本文 URL:…/2026-openclaw-cloudflare-tunnel-vpshalo.html 便于与 Cloudflare 工单对账。

在 vpshalo 的下一步

按区域开 Mac,把隧道钉在已验收 PoP

先打开 首页套餐价格,再进 购买页 选择东京、首尔、香港、新加坡或美西节点;需要操作说明时查 帮助中心,更多自动化主题见 技术博客

前往购买远程 Mac 查看套餐 对照 SSH 隧道篇 更多文章

若希望 OpenClaw、cloudflared 与健康探针构建/制品落在同一低延迟 PoP,建议直接在对应区域租用 vpshalo 远程 Mac:打开 套餐价格 核对 CPU/内存/磁盘档位后,从 购买页 下单即可按月使用;开通与远程桌面细节以 帮助中心 为准,减少「隧道通了但机器规格不够」的返工。