當 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 用戶端以 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。Channels 首通與產線日誌可對照 2026 OpenClaw 遠端 Mac Channels 首通與產線排障。
wss 與 Tailscale Serve:手機側安全入口對照
手機沒有 SSH 隧道時,Tailscale Serve 把 loopback Gateway 以 HTTPS/WSS 暴露到 MagicDNS 是最省心的組合:Gateway 仍 bind: loopback,公網不直接裸露 18789。若企業策略禁止 Funnel,可僅在 tailnet 內分發 wss:// 主機名,並要求手機登入同一 tailnet。
Serve 最小驗收(2026 常見寫法)
在加拿大 M4 上確認 Gateway 已監聽 loopback 後,於 tailnet 主機執行 Serve(具體子命令以你安裝的 Tailscale 版本文件為準),再用筆電或手機瀏覽器打開 https://<magicdns> 看是否轉發到 Dashboard;手機 App 配對時 QR 內的 host 必須與此 wss:// 主機名一致。若 Serve 只開了 HTTPS 而 WebSocket 升級被中間層剝離,會出現「瀏覽器可開、App 連不上」——此時查 Serve 的 WebSocket 轉發選項或改用官方推薦的 Gateway 暴露模板,而不是改回公網 ws://。
| 入口類型 | 手機可用協定 | 典型場景 | 風險點 |
|---|---|---|---|
區域網 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 與相機權限。若你正從本機 Gateway 遷移到加拿大,可先讀 2026 年 OpenClaw 從本機或舊節點遷移到加拿大遠端 Mac M4 對齊 workspace 與 token 輪替。
決策樹(簡版)
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 設定。