用 Tailscale 從外部安全連回本地 OpenClaw WebUI:手機也能像 App 一樣使用


上個月我有整理過一套 OpenClaw 一條龍(蝦)的本地部署方式,包含 Windows、WSL、Telegram bot、多模型供應商,還有一些基本啟動流程。那篇內容比較偏向是「先把 OpenClaw 在本機啟動起來,並且可以從 Telegram 跟它互動」的基礎建置。

延伸閱讀:從零開始部署龍蝦 OpenClaw:Windows + WSL + Telegram + 多供應商入口

當自己使用了一段時間後,隨著認知邊界的提升,想像力往往就會驅動自己創造出更多元的使用方式。這個情境是這樣的:

如果當我們人不在電腦本機旁邊(其實也就是生活中大部分的實際場景),可不可以直接用手機或另一台電腦,連回家裡那台有 OpenClaw 的主機,並且能打開完整 WebUI 介面來用?而非單純只能靠 Telegram bot 這種單一對話入口來下指令呢?

當然除了傳統使用遠端桌面應用程式(ex. Teamviewer、DeskIn、AnyDesk、HopToDesk....),這種隔了一層砂的模擬人在本地的隔空操作方式之外,是否還有更直觀的方式可以實際打開 WebUI 使用完整的 OpenClaw 功能呢?

簡短的答案是:可以。(不可以的話,我就不用寫這篇文章了🤣)

這篇就來整理這個做法。重點是:並不是直接粗暴地從本地數據機打開 Port Forwarding,而是用 Tailscale 這類的免費虛擬區域網路服務,把 OpenClaw WebUI 放進自己的私人網路裡。這樣從外部遠端裝置可以安全連回來,而不需要把 OpenClaw 的連線大門直接暴露到公開網路上(也就是俗稱讓 AI agent「裸奔」)。


先講結論

如果只是要在外部裝置使用本地 OpenClaw,我目前比較推薦這個架構:

本地 OpenClaw 主機
  -> OpenClaw Gateway 維持 loopback
  -> Tailscale Serve 提供 tailnet 內 HTTPS 入口
  -> iPhone / Android / 外部電腦登入同一個 Tailscale 帳號
  -> 瀏覽器開啟 OpenClaw WebUI

白話來說,就是把外部遠端裝置跟本地 OpenClaw 主機放進同一個 Tailscale 私有網路。只要任何裝置(無論是另一台手機或電腦)有登入 Tailscale,就可以用一個專屬網址打開 OpenClaw WebUI。

這個方式跟直接 Port Forwarding 最大差別是:Port Forwarding 會把服務暴露到公開網路;Tailscale Serve 則只在你的虛擬 tailnet 裡分享服務。前者像是把家門敞開放到大馬路上,後者比較像是只讓有鑰匙並且知道私密入口的人才能進入的專屬私人通道。


為什麼不只用 Telegram bot 就好?

一般在手機上用 OpenClaw,最直覺的方式通常是聊天工具。例如 Telegram、Discord、Slack、WhatsApp、LINE、Matrix、Microsoft Teams 這類 channel。

這些入口很方便。你可以直接丟文字、貼檔案、傳圖片。對「快速問一句」來說,Telegram 這種 chatbot 入口其實很好用。

但它也有幾個限制。

第一,聊天工具本質上是訊息串,不是完整工作台。你要新增、切換、重設多個 session,通常都沒有 WebUI 直覺。

第二,如果長期在同一個 bot 裡一直聊,同一個 direct session 可能會越來越大。上下文累積太多後,模型回應、工具呼叫或 timeout 風險都會上升。

第三,聊天工具的設定比較碎。以 Telegram 為例,你要先透過 BotFather 建立 bot,拿到 token,再設定 OpenClaw channel、配對、allowlist、群組權限、mention 行為等。這些都不是不能做,但每新增一組入口,就會多一組設定要維護。

補充一下,Telegram 確實可以設定不只一組 bot 連到 OpenClaw。OpenClaw 的 channel 設定也支援 multi-account,也就是多個 Telegram bot/account。只是每個 bot 通常都要有自己的 BotFather token,也要分別處理存取權限、預設 account、路由與配對設定。所以如果目標只是「我想同時開幾個不同工作 session」,WebUI 通常會比多開幾個 Telegram bot 更自然。


WebUI 的價值在哪裡?

OpenClaw WebUI 比 Telegram bot 更像完整工作台。

它比較適合做這些事情:

  • 開新 session,讓不同任務不要混在一起。
  • 重新開始某個對話,避免舊上下文一直拖著走。
  • 切換 agent、模型或 provider。
  • 看工具執行進度,而不是只能等聊天訊息最後回來。
  • 管理比較長的工作,例如寫文章、整理資料、改設定、跑診斷。
  • 在需要時檢查 gateway、channel、session、工具權限等狀態。
  • 可依需要隨時調整思考強度與回應模式。

我後來實際測試的效果:用手機也可以打開完整 WebUI ,即使人在外面也能回到同一個 OpenClaw 工作台,使用範圍就從本機桌面延伸到外部遠端行動裝置。


為什麼不建議直接 Port Forwarding?

我一開始也測過 Port Forwarding。技術上可行,外部網路確實可以連回來。

但測通之後,我很快就把 port 關掉了。

原因很簡單:OpenClaw Gateway 不是普通的靜態網站。它背後連到 agent、模型、工具、檔案、通訊 channel,甚至可能有本機操作能力。如果只是把 18789 這類 gateway port 直接轉到外網,又沒有很完整的驗證、防火牆、HTTPS、反向代理、token、IP 限制,那風險太高。

這不是「能不能連」的技術問題。這是「該不該長期這樣連」的風險問題。

這裡用一張簡表來把 OpenClaw WebUI 的外部連線方案分成三個等級:

方案 適合情境 建議程度
Tailscale Serve 自己的手機、平板、筆電要連回本地 OpenClaw 最推薦
SSH Tunnel 外部電腦可用 SSH,想維持最高封閉性 推薦,但設定比較麻煩
Port Forwarding 需要公開入口,且願意完整處理資安設定 不建議當作一般使用方案


Tailscale Serve 的概念

Tailscale 的核心概念是 tailnet,也就是你自己的私人網路。你把手機、筆電、桌機、家裡伺服器放進同一個 tailnet,這些裝置就可以用 Tailscale 的加密連線互相存取。

Tailscale Serve 則是把某台裝置上的本機服務,分享給同一個 tailnet 裡的其他裝置。例如 OpenClaw WebUI 原本只在本機的 127.0.0.1:18789,透過 Serve 之後,手機就可以用類似下面的網址開啟:

https://<你的裝置名稱>.<你的 tailnet 名稱>.ts.net/

對 OpenClaw 來說,Serve 還有另一個好處。Tailscale Serve 可以把已驗證的 Tailscale 身分資訊帶到 Gateway,讓 OpenClaw 在合適設定下辨識「這是 tailnet 裡的可信裝置」,不用每次都走手動 token 或配對流程。

這裡要分清楚兩個名詞:

  • Tailscale Serve:只給 tailnet 內的裝置使用。
  • Tailscale Funnel:公開到網際網路。

本文講的是 Serve,不是 Funnel。對個人使用 OpenClaw WebUI 來說,Serve 比較符合需求。


部署前先檢查

開始前,先確認幾件事。

第一,本機 OpenClaw Gateway 要能正常啟動。你應該先能在主機本機開啟:

http://127.0.0.1:18789/

第二,你要決定 OpenClaw Gateway 在哪裡啟動常駐。

如果 OpenClaw Gateway 跑在 Linux 或 WSL 裡,Tailscale 也要在那個環境裡部屬,OpenClaw 才能自動設定 Tailscale Serve。如果 OpenClaw Gateway 是原生跑在 Windows,就用 Windows 版 Tailscale。

這個地方可不要搞混,尤其是 Windows + WSL2 的環境,如果 Windows 主機跟 WSL 裡都各自登入 Tailscale,可能會出現重複裝置名稱、路由或 MTU 相關問題。建議確認好路線,讓 Gateway 跟 Tailscale Serve 的管理位置一致。

第三,所有想從外部連回 OpenClaw 的裝置,都要安裝 Tailscale,並登入同一個帳號或同一個 tailnet。這個外部遠端裝置可以是 iPhone、Android 手機、iPad、另一台筆電或桌機。本文用 iPhone 當代表性範例說明,但概念對其他裝置也相同。手機上只裝瀏覽器不夠,因為 Serve 是 tailnet 內入口,外部裝置必須先用 Tailscale 進入你的 tailnet。


步驟一:先準備 OpenClaw Gateway 設定

我實際設定時,第一步不是先從行動裝置端開始,而是先確認 OpenClaw Gateway 的設定方式。

核心目標有三個:

  • Gateway 繼續維持 loopback,不要直接對外 listen。
  • 讓 OpenClaw 啟動時使用 Tailscale Serve,把 WebUI 分享到 tailnet。
  • 允許 Tailscale Serve 的 WebUI 來源,避免瀏覽器被 origin not allowed 擋掉。

可以先用 OpenClaw CLI 設定前兩項:

openclaw config set gateway.bind '"loopback"' --json
openclaw config set gateway.tailscale.mode '"serve"' --json
openclaw config set gateway.auth.allowTailscale true --json

這幾個設定代表:

  • gateway.bind = loopback:OpenClaw Gateway 仍然只聽本機,不直接開給 LAN 或公網。
  • gateway.tailscale.mode = serve:讓 OpenClaw 管理 Tailscale Serve,把本機 Gateway 轉成 tailnet 內 HTTPS 入口。
  • gateway.auth.allowTailscale = true:允許 OpenClaw 接受 Tailscale Serve 帶進來的身分資訊。

如果你習慣直接改 openclaw.json,概念上可以檢查是否有類似下面的設定。實際檔案內請改成自己電腦環境真正的設定。

{
  "gateway": {
    "bind": "loopback",
    "controlUi": {
      "allowedOrigins": [
        "http://localhost:18789",
        "http://127.0.0.1:18789",
        "https://<device-name>.<tailnet-name>.ts.net"
      ]
    },
    "auth": {
      "allowTailscale": true
    },
    "tailscale": {
      "mode": "serve"
    }
  }
}

如果你原本已經有設定 gateway.auth.tokengateway.auth.password 或 SecretRef,就保留自己的既有 auth 設定,不需要特別把它刪掉。上面只是在示意 Tailscale Serve 需要注意的幾個關鍵欄位。

這裡有一個很容易踩到的坑:gateway.controlUi.allowedOrigins 不是來源 IP 白名單,而是瀏覽器 Origin 白名單。當你用 https://<device-name>.<tailnet-name>.ts.net/ 開 OpenClaw WebUI 時,瀏覽器的頁面來源就會變成這個 HTTPS 網址。如果這個網址沒有被加入 allowed origins,OpenClaw 可能會直接拒絕連線,畫面上就會看到類似 origin not allowed 的錯誤。

如果這時還不知道自己的 tailnet URL,可以先把其他設定完成。等 Tailscale 登入後拿到正式的 <device-name>.<tailnet-name>.ts.net,再回來把它加入 allowedOrigins,然後重啟 Gateway。


步驟二:在 OpenClaw 主機環境安裝並登入 Tailscale

接著才是在 OpenClaw Gateway 所在的環境裡安裝 Tailscale

如果 OpenClaw Gateway 跑在 Linux 或 WSL,可以在同一個 Linux/WSL shell 裡執行:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

sudo tailscale up 執行後,終端機通常會顯示一個登入網址。流程大致是:

  1. 複製終端機顯示的登入網址。
  2. 用瀏覽器打開該網址。
  3. 登入 Tailscale 帳號。
  4. 確認授權後,這台 OpenClaw 主機就會加入你的 tailnet。


如果 OpenClaw Gateway 是原生跑在 Windows,就安裝 Windows 版 Tailscale,並從系統匣的 Tailscale 圖示登入。重點仍然一樣:OpenClaw Gateway 在哪個環境跑,Tailscale Serve 最好也由同一個環境管理。

登入完成後,可以檢查這台主機是否已在 tailnet 中:

tailscale status

這時你也可以在 Tailscale 管理介面或 CLI 中確認這台裝置的 MagicDNS 名稱。之後 WebUI 會用類似下面的網址開啟:

https://<device-name>.<tailnet-name>.ts.net/

拿到這個網址後,記得回到前一步,把它加入 OpenClaw 的 gateway.controlUi.allowedOrigins。這個步驟很重要,因為它直接影響 Safari 或 Chrome 能不能被 OpenClaw 接受。


步驟三:重啟 Gateway,讓 OpenClaw 透過 Tailscale Serve 分享 WebUI

完成 Gateway 設定、Tailscale 登入、allowed origins 更新後,就可以重啟 OpenClaw Gateway:

openclaw gateway stop
openclaw gateway

如果你的 Gateway 是用 systemd、schtasks、Windows launcher 或其他方式長期啟動,就用原本的方式重啟服務。你要確認的是:Gateway 重啟後有載入新的 gateway.bindgateway.tailscale.modegateway.auth.allowTailscalegateway.controlUi.allowedOrigins 設定。

OpenClaw 啟動後,會依照 gateway.tailscale.mode = serve 去設定 Tailscale Serve。換句話說,這一步才是把 OpenClaw WebUI 透過 Tailscale Serve 分享到 tailnet。

如果你想明確確認或手動執行這個分享動作,可以在 OpenClaw Gateway 所在的環境執行:

sudo tailscale serve --bg 18789

這個指令的意思是:把本機 127.0.0.1:18789 上的 OpenClaw WebUI/Gateway,透過 Tailscale Serve 以 HTTPS 分享給同一個 tailnet 內的裝置。某些環境可能不需要 sudo,可改成:

tailscale serve --bg 18789

如果你已經讓 OpenClaw 用 gateway.tailscale.mode = serve 自動管理 Serve,通常不需要重複手動設定;但使用這個指令,會比較容易理解「OpenClaw WebUI 是在哪一步被分享到 tailnet」。



可以用下面指令檢查 Serve 狀態:

tailscale serve status

如果 Serve 已經套上,外部裝置就應該可以透過這個 tailnet HTTPS 網址連回 OpenClaw:

https://<device-name>.<tailnet-name>.ts.net/

這裡也要注意:本文講的是 Tailscale Serve,不是 Tailscale Funnel。Serve 只在 tailnet 內可用;Funnel 則是公開到網際網路,安全模型不同。


步驟四:在 iPhone 安裝 Tailscale 並連線

接著設定外部裝置。這裡用 iPhone 當例子。

流程大致如下:

  1. App Store 安裝 Tailscale
  2. 打開 Tailscale app。
  3. 使用跟 OpenClaw 主機相同的 Tailscale 帳號登入。
  4. iOS 如果跳出 VPN 設定授權,依照提示允許加入 VPN 設定。
  5. 回到 Tailscale app,確認連線狀態是已連線。
  6. 確認 OpenClaw 主機在 Tailscale 裝置清單中是在線狀態。


完成後,iPhone 就已經進入同一個 tailnet。這時再打開 Safari,輸入 OpenClaw 的 tailnet HTTPS 網址:

https://<device-name>.<tailnet-name>.ts.net/

如果前面的 Serve、allowed origins、Tailscale identity auth 都設定正確,這時應該可以直接看到 OpenClaw WebUI。

我自己實測時,iPhone 在外部網路下可以成功連回本地 OpenClaw WebUI。這對使用體驗整體提升很多,因為手機上不再只是丟訊息給 bot,而是可以直接進完整介面。

這裡還有一個實用差異。一般外部 WebUI 連線可能會要求 Gateway token,或遇到裝置配對流程。但如果你是透過 Tailscale Serve 進來,且 OpenClaw 設定了 gateway.auth.allowTailscale = true,OpenClaw 可以使用 Tailscale Serve 帶入的 identity headers 做驗證。對一般 Control UI 使用來說,外部遠端裝置就不需要再手動輸入 Gateway token,也不需要額外走一次 token 配對流程。

這不代表所有安全機制都消失。前提仍然是:這台 iPhone 必須已經登入你的 Tailscale tailnet,而且 Gateway 主機本身是你信任的環境。OpenClaw 的 HTTP API 端點也仍會依照 Gateway 原本的 auth 模式處理,不是全部都變成無密碼公開。


把 OpenClaw WebUI 做成手機桌面入口

這一步不是把 OpenClaw 變成真正的 App Store app。比較精準地說,是把這個 tailnet 專屬網址加到手機主畫面,讓它看起來像一個專屬 App 入口。

iPhone 上可以用 Safari 的加入主畫面功能建立入口:

  1. 先確認 Tailscale 已連線。
  2. 用 Safari 打開 OpenClaw 的 tailnet HTTPS 網址。
  3. 點 Safari 的分享按鈕。
  4. 選擇「加入主畫面」。
  5. 命名成例如 OpenClaw
  6. 之後就可以從主畫面直接打開。

這樣的好處是,你不用每次去翻網址。只要先打開 Tailscale,再點桌面上的 OpenClaw icon,就能進入自己的本地 WebUI。

Android 也可以用類似概念,在 Chrome 裡把網站加入主畫面。不同手機品牌選單文字可能不完全一樣,但概念相同。


安全設定提醒

我的原則很簡單:

  • 不把 OpenClaw Gateway 直接 Port Forward 到公開網路。
  • 優先用 Tailscale Serve,而不是 Funnel。
  • Gateway 維持 loopback
  • 把 tailnet HTTPS 網址明確加入 gateway.controlUi.allowedOrigins
  • 使用 gateway.auth.allowTailscale = true,讓 Control UI 走 Tailscale identity auth。
  • 不再使用的手機、平板、電腦,就從 Tailscale admin console 移除。
  • 如果是在共用或不完全信任的主機上,應該額外設定 OpenClaw token 或 password,不要只依賴同機器上的信任假設。

這些設定看起來有點保守,但 OpenClaw 是 AI agent 自動化代理工具,不是普通的網頁服務。保守一點是合理的。


常見問題

1. 手機打不開網址

先看手機 Tailscale 是否真的連線。再確認手機和 OpenClaw 主機是否在同一個 tailnet。接著檢查網址是否打錯,特別是 <device-name><tailnet-name>

如果用 MagicDNS 名稱不通,可以先在 Tailscale app 裡確認主機是否在線,也可以改用 Tailscale IP 加 port 測試。

2. 本機可以開,手機不能開

這通常代表 OpenClaw 本身沒問題,問題在 Tailscale 或 Serve 設定。

可以檢查:

tailscale status
tailscale serve status
openclaw gateway status

如果 tailscale serve status 沒有看到對應的 proxy 設定,代表 Serve 可能沒有套上。

3. 看到 origin not allowed 怎麼辦?

這通常不是 Tailscale VPN 沒連上,而是 OpenClaw 擋掉了瀏覽器來源。

檢查 openclaw.json 或 OpenClaw config 裡的 gateway.controlUi.allowedOrigins,確認裡面有你的 tailnet HTTPS 網址:

https://<device-name>.<tailnet-name>.ts.net

注意這裡填的是瀏覽器 Origin,不是 IP 白名單。改完之後要重啟 OpenClaw Gateway。

4. 為什麼不用再輸入 Gateway token?

前提是你走的是 Tailscale Serve,而且 OpenClaw 已設定 gateway.auth.allowTailscale = true。這時 OpenClaw 可以用 Tailscale Serve 傳進來的身分資訊驗證 Control UI 連線,所以一般 WebUI 使用不需要再手動輸入 Gateway token,也不用另外做 token 配對流程。

如果你關掉 allowTailscale,或改用 Funnel、Cloudflare、ngrok、Port Forwarding 這類非 tailnet Serve 入口,就不能假設有這個免 token 行為。那時就要回到 Gateway 原本的 token、password 或 trusted proxy 設定。

5. WSL 裡裝 Tailscale 會不會很麻煩?

會比原生 Windows 多一點細節,Tailscale 官方也把 WSL2 安裝列為進階情境。不要一開始就同時在 Windows 和 WSL 裡各跑一套 Tailscale。

如果 OpenClaw Gateway 跑在 WSL,並且你要讓 OpenClaw 自動管理 gateway.tailscale.mode = serve,那就讓 WSL 裡的 Tailscale 負責這件事。

6. 可以改用 Tailscale Funnel 嗎?

技術上可以,但不建議把它當成主要方案。

Funnel 是公開網際網路入口。它很方便,但安全模型就跟 Serve 不同。OpenClaw Gateway 牽涉 agent、工具與本地狀態,建議先把它當成私人入口來設計。


小結

Telegram bot 很適合快速互動,尤其是手機上臨時問一句、丟一段文字、看一個短回覆。

但如果你要的是完整 OpenClaw 工作台,WebUI 介面還是比較完整。它可以讓你管理 session、切換上下文、看工具進度,也比較接近一般 AI 平台的使用方式。

這次用 Tailscale Serve 連回本地 OpenClaw WebUI,最有感的地方,就是 OpenClaw 已經不再是被綁死在本地電腦螢幕端,而是可以讓所有自己的裝置,都搖身一變成為一個安全的 OpenClaw 控制入口。

對我來說,這會讓本地 AI agent 更接近日常隨手可用的工具,而不光是個只能卡在桌機前才能偶爾呼叫的助理。


📌 您可能也會有興趣的其他文章:

留言

熱門文章

Notebook LM 語音轉文字完整教學:免費、快速又省力的最佳解法

ChatGPT 專案對話打不開?「Unable to load conversation」教你一招解決!

從靜態簡報到全場互動:講師必備的 4 大即時投票系統推薦與使用技巧

打造數位分身:F5-TTS 本地部署教學與語音克隆應用分享

用AI一鍵生成簡報PPT投影片真的有那麼神?全網最詳細AI簡報工具彙整與實測心得

不是主持人也能做筆記!Otter.ai、Notta.ai 線上會議即時轉錄逐字稿完整教學

用手機接續操作電腦版 Codex:codexUI 與 Windows 快速啟動器實作

G6PD 缺乏者的抗生素選擇指南|社區診所常見處方與藥師建議一次搞懂

GLP-1 減重針安全嗎?瘦瘦針機轉、效果、副作用一次看懂

快速又免費的語音轉文字神器『Faster Whisper』,一鍵解決影音內容爆量時代的痛點!