当 OpenClaw Gateway 只跑在加拿大远程 Mac M4,而你的 iPhone、iPad 或 Android 需要作为 Node(role: node) 接入时,真正要回答的问题不是「手机能不能装 App」,而是:手机上的 WebSocket 能否以合规的 wss:// 终点连到那台始终在线的 Gateway,并在运维侧用 gateway.mode: "remote" 把 CLI、排障与审批动作对齐到同一真相源。本文专注 iOS/Android 节点配对 Runbook;若你关心 macOS 菜单栏客户端如何打通 Dashboard 与 18789,请阅读 2026年 OpenClaw 网关只跑在加拿大远程 Mac M4:macOS 客户端 Remote over SSH/Tailnet、Dashboard 与 18789 怎么打通?——两篇互补,不可互换。网关尚未安装时,可先对照 2026 OpenClaw远程Mac安装路径实战:install.sh、Homebrew与npm对照教程,加拿大M4节点Gateway 18789资源规划与常见报错排障 完成加拿大节点上的 CLI 与守护进程落地。
架构定位:一台加拿大 Gateway,多部手机 Node
OpenClaw 的远程模型里,每台主机只应有一个 Gateway 进程(除非你刻意跑多 profile)。Gateway 持有会话、Channels、鉴权与 agent 状态;iOS/Android 应用不托管 Gateway,只作为外围 Node 通过 Gateway WebSocket 收发 node.* RPC。加拿大 M4 适合当「永远在线」的 Gateway 宿主:笔记本休眠不会拖垮 Telegram/Slack 通道,手机只负责相机、传感器或现场操作类能力。
跨洋团队常见误区是把「亚太同事的笔记本」也装成 Gateway,导致双真相源、token 分裂与配对码过期。正确姿势是:加东/加西 M4 单点 Gateway + 全员 Node/CLI 指向 remote;亚太运维通过 SSH 或 Tailnet 管理该机,而不是在本地再起第二个 Gateway。
gateway.mode remote:CLI 与手机共用同一远程终点
在网关机本机上,Gateway 通常监听 127.0.0.1:18789(默认端口,团队文档请统一,避免 18879 笔误)。在亚太运维笔记本上,应把 OpenClaw CLI 设为 gateway.mode: "remote",让 openclaw health、openclaw devices approve 等命令穿过 SSH 隧道或 Tailnet 命中加拿大那台机器,而不是误连本机空端口。
官方约定:当 Gateway 仅 loopback 暴露时,remote URL 保持 ws://127.0.0.1:18789,先建立 SSH 本地转发再执行 CLI;若 Gateway 已在受信 LAN/Tailnet 上可达,可改用 transport: "direct" 指向私有 ws:// 或 wss://。注意 --url 覆盖时不会隐式继承 config 里的 token,必须显式传 --token 或 --password。
{
gateway: {
mode: "remote",
remote: {
url: "ws://127.0.0.1:18789",
token: "<gateway-token>",
sshTarget: "ca-m4-gateway",
},
},
}
{
gateway: {
mode: "remote",
remote: {
transport: "direct",
url: "wss://ca-m4.your-tailnet.ts.net",
token: "<gateway-token>",
},
},
}
配对 Runbook:从 loopback 绿灯到扫码批准
下列顺序面向「Gateway 已在加拿大 M4 由 launchd 拉起」的前提;任一步失败都不要先让手机扫公网明文 ws://。
步骤 1:网关机 loopback 验收
SSH 登录加拿大 M4,确认进程监听与 health:
curl -fsS "http://127.0.0.1:18789/health" && echo OK lsof -nP -iTCP:18789 -sTCP:LISTEN
步骤 2:为手机准备安全 WebSocket 入口
2026 年起,iOS/Android 在跨网远程配对时对明文 ws:// 会 fail-closed;须在 Tailscale Serve/Funnel 或反向代理上提供真实 TLS 的 wss://<magicdns>,或让手机本身处于同一 Tailnet 且终点满足文档允许的主机类(如 .ts.net)。局域网调试仍可用 ws://,但不适用于亚太手机直连加拿大公网 IP。
步骤 3:生成配对 QR / setup code
在网关机或已隧道化的运维机上执行:
openclaw qr openclaw qr --remote
手机 OpenClaw App 扫码后,设备会进入待批准队列;在网关机执行 openclaw devices list 核对指纹,再 openclaw devices approve <device-id>。跨洋协作时,把 approve 动作与工单号绑定,避免深夜误批陌生设备。
步骤 4:Node 能力抽测
批准后,从 Gateway 侧触发一条最小 node.* 调用(或经 Channels 走一条需要 Node 的工具链),确认 WebSocket 长连在太平洋 RTT 下不频繁断线。若仅延迟高但不断连,优先查 Tailscale 路径与 MTU,而非重装 App。
wss 与 Tailscale Serve:手机侧安全入口对照
手机没有 SSH 隧道时,Tailscale Serve 把 loopback Gateway 以 HTTPS/WSS 暴露到 MagicDNS 是最省心的组合:Gateway 仍 bind: loopback,公网不直接裸露 18789。若企业策略禁止 Funnel,可仅在 tailnet 内分发 wss:// 主机名,并要求手机登录同一 tailnet。
| 入口类型 | 手机可用协议 | 典型场景 | 风险点 |
|---|---|---|---|
局域网 ws://192.168.x.x:18789 |
明文 ws(仅私网) | 办公室 Wi‑Fi 联调 | 不能用于跨洋公网 |
Tailscale Serve wss://*.ts.net |
wss + 身份头(可 tokenless) | 亚太手机 + 加拿大 Gateway | 需统一 ACL;主机须可信 |
| 自签/私有 CA 反代 wss | wss + token | 必须走企业证书链 | iOS 需指纹 pin 或受信 CA |
公网 IP 直连 ws:// |
远程配对拒绝 | — | 应 fail-closed,勿强行暴露 |
-L、Tailnet 书签)在 网关 SSH/Tailnet 教程 中展开;本篇只解决手机 Node 的 wss 配对与 devices approve,避免两文混用同一套「先开 Dashboard」验收顺序。
跨洋 SSH 隧道:亚太运维批准 Node 的通用兜底
当手机暂时无法加入 Tailnet(例如外包机、测试机),仍可由亚太运维笔记本建立 SSH 隧道,在本地 loopback 上完成 openclaw qr 展示与 devices approve,手机则扫描内含 wss:// 或 tailnet 地址的码(由你在 Serve 侧预生成)。隧道本身不替代手机需要的加密终点,但能保证「批准动作」发生在隧道建立之后,避免误连。
ssh -N -L 18789:127.0.0.1:18789 user@ca-m4-host # 另开终端,确认 remote 配置指向 ws://127.0.0.1:18789 openclaw health --token "<gateway-token>" openclaw devices approve <pending-id>
需要 7×24 隧道时,可在运维 Mac 上用 LaunchAgent 托管 ssh -N remote-gateway(与官方 remote 文档一致),并把 gateway.remote.token 写入 config 而非 shell profile。加拿大网关机侧仍只监听 loopback,不把 SSH 与 Gateway 混绑到同一端口。
| 角色 | 推荐路径 | 配对相关命令 | 失败时先看 |
|---|---|---|---|
| 加拿大 M4(Gateway) | loopback + launchd | openclaw qr、devices list |
lsof -i :18789、Gateway 日志 |
| 亚太运维 Mac | SSH -L + remote mode |
devices approve、doctor |
隧道是否存活、token 是否显式传递 |
| iOS/Android | wss:// tailnet 或 Serve |
App 扫码、Node 在线状态 | 是否误用公网 ws、证书是否受信 |
openclaw doctor 工单排障:从症状到闭环
把 openclaw doctor 当作跨洋工单里的单一快照命令:在「网关机 SSH 会话」与「隧道化 remote CLI」各跑一次,对比差异。doctor 全绿但手机仍 pending,多半是未 approve 或手机连错 URL;doctor 报 auth 失败,则查 token 面是否混用 local/remote fallback。
工单字段建议
每条配对故障工单至少附:UTC 时间戳、openclaw --version、Gateway health curl 输出、openclaw devices list 脱敏截图、手机端错误码(是否提示 require secure endpoint)、当前使用的是 Serve / 直连 / 仅 SSH。亚太 on-call 不必 VNC 进桌面,除非涉及 macOS TCC 与相机权限。
决策树(简版)
A. 手机报「需要安全端点」 → 为 Gateway 配置 wss://(Tailscale Serve 优先),禁止公网明文 ws。B. 待批准列表为空但手机转圈 → 核对 QR 是否过期、是否扫到旧环境。C. CLI 报 connection refused → 先验加拿大机 loopback,再验 SSH 隧道 lsof -i :18789 在笔记本上是否 LISTEN。D. 批准后立刻掉线 → 查 tailnet ACL、手机省电断网、Gateway OOM;滚动重启前冻结版本号。
openclaw doctor openclaw gateway status openclaw devices list curl -fsS "http://127.0.0.1:18789/health" || true
FAQ
iOS 和 Android 能当 Gateway 吗?
不能。Node 应用只连接既有 Gateway;加拿大 M4 应作为唯一 Gateway 宿主,除非你刻意隔离多 profile。
为什么远程配对必须用 wss?
官方对跨网移动配对 fail-closed 明文 ws,防止凭证与设备指纹在公网暴露;LAN、.local、模拟器特例见平台文档。
gateway.mode remote 会影响网关机本地模式吗?
remote 是客户端配置;网关机本身仍以 local Gateway 运行。不要在 M4 上把 mode 设成 remote 指回自己。
只用 SSH 隧道、不用 Tailscale,手机怎么连?
手机仍需可达的 wss:// 终点(通常靠 Tailscale Serve 或企业反代)。SSH 隧道主要服务运维 CLI 与 approve,不替代手机 TLS 入口。
openclaw qr 和 openclaw qr --remote 区别?
--remote 生成面向远程 Gateway 的 setup 信息;在已隧道化或 tailnet 可达的运维机上使用,避免码内 host 指向笔记本 loopback。
多台手机 Node 会抢 Gateway 吗?
不会「抢进程」,但会共享 Gateway 会话与配额;生产上按设备打标签,审批记录进工单。
配对成功但 node 工具超时?
先区分 WebSocket 活着与 RPC 慢:太平洋 RTT 高不等于失败。查 Gateway CPU、磁盘与 channel 队列,而非反复删装手机 App。
doctor 在 SSH 里绿、手机仍失败?
典型是手机 URL 与 doctor 检查的不是同一路径(例如 doctor 走隧道 wss 未配、手机扫了过期 QR)。对齐「手机连接的 wss 主机名」与 Serve 配置。