← 返回開發日記

2026 年 OpenClaw 閘道只跑在加拿大遠端 Mac M4:macOS 用戶端以 SSH/Tailnet 遠端連線、Dashboard 與 18789 怎麼打通?跨洋團隊 token、loopback 與 LaunchAgent 持久化(教程+對照表+FAQ)

OpenClaw · 2026.05.15 · 約 12 分鐘閱讀

網路設備與線材象徵 SSH、Tailscale tailnet 與加拿大 Mac M4 上的 OpenClaw 遠端閘道

2026 年有些團隊刻意把 OpenClaw Gateway 收斂成單一地理區:租在加拿大機房的 Mac mini M4 當「北美控制面」,東京、新加坡或台北的工程師只在 macOS 筆電上操作。聽起來單純,實務上會卡在三件事:Dashboard 要從哪個 URL 開、TCP 18789 在迴路與 tailnet 位址之間怎麼對齊、以及財務/資安為何反對把 gateway.remote.token 貼在 Slack。本文以繁體中文整理一條龍教程:先用 SSH LocalForward 做斷線可復原的除錯路徑,再用 Tailscale tailnet 做多人常駐;兩條路都盡量維持 loopback 優先 的暴露面,最後用使用者層級的 LaunchAgent 讓閘道在重開機後自動回來。若你仍在挑 onboard 與資源規劃,可先讀 OpenClaw 2026 在遠端 Mac 上跑穩:安裝指令稿與 onboard、Gateway 18789/Token/LaunchDaemon、日誌對照與加拿大 M4 的 7×24 場景;這裡假設加拿大主機上的閘道已能本機 curl 通過健康檢查,專注在客戶端怎麼接上去。跨區選節點與擴容決策可對照 2026 年新加坡·日本·韓國·香港·加拿大遠端 Mac 怎麼選:加拿大北美補充與中高配 M4 儲存擴容、開發測試決策指南

1
加拿大 M4 上的正式閘道實例
18789
預設閘道控制埠(請驗證實際綁定)
2
本文主線:SSH 轉發 vs tailnet

「只跑加拿大」如何改寫網路心智模型

當產品與資安同意亞太不再跑第二個閘道,每位工程師都變成「跨時區遠端操作員」。閘道行程仍需要穩定的對外 DNS(channels)、可預期的磁碟(workspace/日誌),以及審計可列印的監聽位址矩陣:機房配發的可路由 IPv4(SSH、大量檔案同步)、主機在 tailnet 內的 100.x/MagicDNS 名稱,以及主機本機的 127.0.0.1。若沒有把三種位址寫進 wiki,就會出現「我 SSH 轉發明明通,但新加坡同事 Dashboard 仍 502」——多半是瀏覽器還指到昨天轉發埠或公司 HTTP 代理攔了 WebSocket。若你要從舊節點割接,建議沿用 OpenClaw 從本機或舊節點遷移到加拿大遠端 Mac M4 裡的階段門檻,避免 token 與 plist label 脫鉤。

跨太平洋延遲也會重塑流量分類:互動式 shell、閘道控制訊息通常可忍受;反覆拖曳數 GB 產物則應導向靠近加拿大的物件儲存或 rsync。閘道控制頻寬小,因此多數團隊讓 18789 維持在迴路,再用 SSH 或 tailnet 內的小型反向代理轉進去,把大檔與閘道控制解耦。出站 Webhook 若要求固定來源 IP,請一併閱讀 物理原生 IP:為什麼 Mac 雲端也要「一機一址」,避免控制面走 mesh、出站卻換了 NAT 畫像。

路徑甲:SSH LocalForward 與筆電生命週期

SSH 本地埠轉發把筆電上的某個 TCP 埠,透過加密通道對到遠端主機的埠。最典型寫法仍是 ssh -N -L 18789:127.0.0.1:18789 user@canada-host;若 Dashboard 在升級期間另開本機埠,可再加一組 -L。筆電上瀏覽器或 OpenClaw macOS 用戶端改指 http://127.0.0.1:18789,封包會在加拿大主機的迴路介面落地,前提是閘道只綁 127.0.0.1,公網便看不到 18789。優點是免額外 VPN SKU、飯店 Wi‑Fi 也常放行 22;缺點是隧道跟著筆電睡眠,需要 ServerAliveInterval 文化,也較難「一條隧道餵五個人」除非走跳板/共用工作站。

讓跨洋 SSH 不容易半開連線

請把 ~/.ssh/config 寫死:Host 別名、HostnameUserIdentityFileServerAliveInterval 30ServerAliveCountMax 6ExitOnForwardFailure yes。僅在團隊真的理解多路徑重用時才開 ControlMaster。另請注意:企業 HTTP 代理仍可能破壞 Dashboard 的 WebSocket,即使 22 埠放行亦然。長租與接力 QA 的預算權衡可延伸 2026 年遠端 Mac 租期與總持有成本怎麼算?跨太平洋團隊用加拿大節點接力 QA 時……,把「連線工時」算進營運成本。

SSH 本地轉發(筆電 18789 對到加拿大主機迴路)
ssh -N -L 18789:127.0.0.1:18789 user@hashvps-canada-gateway.example

路徑乙:Tailscale tailnet 與多人常駐

Tailscale 會為每個節點發放 tailnet 內可路由位址(常見 100.x),並可搭配 MagicDNS。加拿大 Mac 與所有工程筆電登入後,新加坡同事可直接 ping 通該主機的 tailnet IP,而不必把 SSH 暴露到公網。對 OpenClaw 而言,常見做法仍是閘道綁 loopback,再在 tailnet 上透過「tailnet 內的 SSH」或本機反向代理把 100.x 轉進 127.0.0.1:18789;若直接把閘道綁到 tailnet IP,威脅模型會從「持有 SSH 金鑰的人」擴大到「任何被入侵的 tailnet 端點」,務必搭配嚴格 ACL 與標籤。為何願意多付一個 mesh 供應商?因為它能顯著減少 NAT 打洞與「誰能解析哪個主機名」的工單;裝置遺失時也可秒級撤銷,而不必改機房 root 密碼。

Dashboard 與 18789 不一定是同一個「網站」
實務上 Dashboard UI閘道 RPC/WebSocket(常見 18789) 可能是同一行程服務、也可能是反向代理拆開。請在 runbook 寫清楚「誰該書籤哪個 URL」,不要假設根路徑 / 就是產品行銷頁。

Dashboard 與 18789 端到端串接

順序永遠是:先在加拿大主機本機127.0.0.1:18789 跑健康檢查(依你安裝版本文件的路徑),不通就不要動防火牆或 Tailscale ACL。loopback 綠燈後,再疊客戶端路徑:SSH 模式下在筆電跑 nc -vz 127.0.0.1 18789;tailnet 模式下改對 100.x 或代理埠。最後才用 Safari/Chrome 開 Dashboard。變更後請截圖閘道版本字串與 build hash 貼進變更紀錄,跨洋除錯時可少來回十則訊息。若升級 Node 或 Homebrew 後出現 EADDRINUSE,多半是忘在 tmux 裡的手動 openclaw gateway start 與 LaunchAgent 搶同一標籤族;請 lsof -nP -iTCP:18789 -sTCP:LISTEN 清場後只留一條 plist 樹。

對照表:SSH 轉發、tailnet 直連/代理、純 loopback

模式 最適場景 18789 可見性 維運注意
SSH LocalForward 值班除錯、未發 tailnet 席位的約聘 只在筆電迴路(經隧道) 睡眠斷線、需教育 ServerAliveInterval
Tailnet IP + 代理回 loopback 多地常駐、CI 同在 tailnet 100.x 或 MagicDNS 名稱上的代理埠 每次 hire/離職都要檢視 ACL 標籤
純 loopback + 實體/VNC 除錯 升級窗口、最高封閉 僅加拿大主機 127.0.0.1 需供應商 out‑of‑band 桌面或 IPMI 等級支援
公網綁定(預設不建議) 無 VPN 路徑的遺留整合 全球可掃描(除非防火牆收窄) 強制 token 輪替、WAF/來源白名單、稽核紀錄

跨洋 gateway.remote.token 治理

共享秘密在跨國團隊腐化得更快:筆電過海關、簡報截圖、約聘週替。請把 gateway.remote.token 當生產資料庫密碼:只存在公司 vault,部署時才注入 plist 的 EnvironmentVariables 或 OpenClaw 設定檔,聊天室禁止貼上。輪替時採雙 token 重疊窗口:閘道短暫同時接受新舊值,按洲別更新客戶端,最後一刻才移除舊值,並在文件寫下 UTC 時間戳,避免亞太同事以為被靜默回滾。LaunchAgent 跑在使用者 GUI domain,匯出檔請維持 uid 可讀、他人不可讀;不要用 world‑readable 的 /tmp 丟檔。若合規要求一人一憑證而你的建置尚不支援,至少用 tailnet tag 把能碰到 18789 的 L3 範圍縮到 role:gateway-client,讓網路層先擋一批誤觸。

LaunchAgent 持久化(使用者 launchd 網域)

LaunchAgent 適合「租用的加拿大 Mac 主要使用者登入後就要有閘道」,不必一開始就上 root 層級 LaunchDaemon。重點是:ProgramArguments 用絕對路徑、EnvironmentVariables 明寫 PATH(含 Homebrew 前綴)與 token 檔路徑、日誌導到 ~/Library/Logs/ 方便遠端 tail。修改 plist 後在 Ventura 以後用 launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/…bootstrap;驗證用 launchctl print gui/$(id -u)/你的.Label。互動式 shell 看到的環境常會誤導,請以 launchd 繼承環境為準。

LaunchAgent plist 骨架(請替換 Label、路徑與參數)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.openclaw.gateway</string>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/Users/your-lease-user</string>
  <key>EnvironmentVariables</key>
  <dict>
    <key>PATH</key>
    <string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
  </dict>
  <key>ProgramArguments</key>
  <array>
    <string>/opt/homebrew/bin/openclaw</string>
    <string>gateway</string>
    <string>start</string>
  </array>
  <key>StandardOutPath</key>
  <string>/Users/your-lease-user/Library/Logs/openclaw-gateway.log</string>
  <key>StandardErrorPath</key>
  <string>/Users/your-lease-user/Library/Logs/openclaw-gateway.err.log</string>
</dict>
</plist>

上線前驗收矩陣(第二張表)

把下表貼進 Confluence/Notion,與 openclaw doctor 關鍵字、閘道標準輸出互相連結。每個地理區至少留一個「當地同事」在割接夜可聯絡。

檢查項 指令或動作 通過標準
加拿大主機 loopback 在主機上 curl 健康路徑 HTTP 200/JSON 欄位符合版本矩陣
SSH 轉發鏈 筆電 nc -vz 127.0.0.1 18789 隧道建立時即時成功;斷線後快速失敗
Tailnet 路徑 異地筆電對 100.x 或代理埠 nc 與 ACL 預期一致;MagicDNS 解析正確
Dashboard WebSocket 瀏覽器開發者工具 Network 握手成功,無公司代理插入 502
Token 輪替 vault 稽核+閘道雙值窗口紀錄 各洲客戶端切換完成後舊 token 已失效
重開機還原 強制重開後只看 launchd 無人登入 GUI 時若需要閘道,改評估 Daemon 或自動登入策略
小結
單一加拿大閘道=把「位址與秘密」寫清楚比堆功能更重要:loopback 綁定+SSH 或 tailnet 進場,Dashboard/18789 分層驗收,token 用 vault 生命週期管理,LaunchAgent 把重開機變成可預期事件而非驚喜。

FAQ(繁體八則)

為什麼同事看得到 SSH 轉發,但 Dashboard 仍空白?

常見是公司 HTTP 代理只放行瀏覽器流量,WebSocket 被攔;或前端資產仍指到舊的絕對 URL。請比對 Network 面板與 curl -I 回應標頭。

Tailscale 連得上主機,但 18789 仍拒連?

閘道若只聽 127.0.0.1,tailnet 來源不能直接打 100.x:18789,需要本機代理或 SSH 在 tailnet 內轉發。先用主機上的 lsof 確認實際 LISTEN 位址。

可以把閘道改成聽 0.0.0.0 省事嗎?

可以但不該當預設:暴露面從 SSH/tailnet 控管變成「全球 TCP 掃描+單層 bearer」。若別無選擇,至少防火牆收窄來源並啟用完整稽核。

gateway.remote.token 旋轉時需要重裝整台 Mac 嗎?

不需要。更新 vault 匯出、plist 或設定檔後 bootoutbootstrap LaunchAgent,並讓客戶端重新載入秘密即可;重點是雙值窗口與 UTC 紀錄。

LaunchAgent 與 LaunchDaemon 我該選哪個?

需要「使用者登入後跟著 GUI session」→ LaunchAgent;要開機即起、與登入無關→ LaunchDaemon(通常需更高權限與更嚴格稽核)。雲端租戶常從 Agent 開始。

為什麼 plist 裡的 openclaw 找不到?

launchd 的 PATH 與互動式 zsh 不同。請在 plist 補完整 PATH,或直接把 ProgramArguments 第一個參數改成 which openclaw 得到的絕對路徑。

M4 記憶體要留多少給閘道與 Dashboard?

視 workspace 快照與同機並行服務而定;若同機還跑模擬器或大型建置,請把閘道與重負載分時或分帳號,並監控記憶體壓力與 swap。硬體階決策可回到區域選型與擴容文章交叉閱讀。

跨洋團隊最常被忽略的「非技術」風險是什麼?

變更窗口落在單一時區的半夜,另一洲沒人值班;或合約允許機房維護重啟卻沒人測 LaunchAgent 冷啟動。把「誰在 UTC 幾點按同意」寫進同一張驗收表即可大幅降低機率。

在雲端 Mac mini 上,閘道鏈路更單純

要把 OpenClaw 閘道當基礎設施節點長跑,硬體畫像愈單純愈省事:Apple Silicon M4 統一記憶體讓 Node 閘道與本機工具並行時尾延遲較穩;macOS 上 Homebrew、SSH、launchd 一條龍,少掉跨系統權限坑;待機功耗低、機體小,適合放在加拿大區做 7×24。搭配 Gatekeeper、SIP、FileVault,整體惡意軟體風險也低於拼裝 Windows 工作站。

若你正要把閘道從筆電遷到可託管、頻寬與路由更可預期的環境, Hashvps 雲端 Mac mini M4 是目前性價比很高的起點—— 立即了解套餐方案 ,讓 SSH 轉發或 tailnet 策略都建立在穩定硬體之上。

Hashvps · Mac 雲端服務

加拿大 M4 上串好 SSH、tailnet 與 18789

Dedicated 算力與清楚網路邊界,支撐 OpenClaw 單區閘道與跨洋 macOS 用戶端。前往首頁查看套餐與定價。

前往首頁
限時優惠