Tailscale(Gateway ダッシュボード)
OpenClaw は Gateway ダッシュボードと WebSocket ポートに対して、Tailscale の Serve(Tailnet 内)や Funnel(パブリック)を自動設定できます。Gateway はループバックにバインドしたまま、Tailscale が HTTPS、ルーティング、さらに Serve の場合はアイデンティティヘッダーを提供します。
モード
serve:tailscale serveによる Tailnet 限定の Serve。Gateway は127.0.0.1で動作。funnel:tailscale funnelによるパブリック HTTPS。OpenClaw は共有パスワードを要求します。off:デフォルト(Tailscale 自動化なし)。
認証
gateway.auth.mode でハンドシェイクを制御します:
token(OPENCLAW_GATEWAY_TOKEN設定時のデフォルト)password(OPENCLAW_GATEWAY_PASSWORDまたは設定による共有シークレット)
tailscale.mode = "serve" かつ gateway.auth.allowTailscale が true の場合、コントロール UI/WebSocket 認証は Tailscale のアイデンティティヘッダー(tailscale-user-login)を使用でき、トークン/パスワードの提供が不要になります。OpenClaw はローカル Tailscale デーモン(tailscale whois)経由で x-forwarded-for アドレスを解決し、ヘッダーと照合してアイデンティティを検証します。OpenClaw は、ループバックから到着し Tailscale の x-forwarded-for、x-forwarded-proto、x-forwarded-host ヘッダーを含むリクエストのみを Serve として扱います。
HTTP API エンドポイント(例:/v1/*、/tools/invoke、/api/channels/*)では引き続きトークン/パスワード認証が必要です。
このトークンレスフローは Gateway ホストが信頼できることを前提とします。信頼できないローカルコードが同一ホスト上で実行される可能性がある場合は、gateway.auth.allowTailscale を無効にしてトークン/パスワード認証を要求してください。
明示的な認証情報を要求するには、gateway.auth.allowTailscale: false に設定するか、gateway.auth.mode: "password" を強制してください。
設定例
Tailnet 限定(Serve)
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}
アクセス先:https://<magicdns>/(または設定済みの gateway.controlUi.basePath)
Tailnet 限定(Tailnet IP に直接バインド)
Serve/Funnel を使わず、Gateway を Tailnet IP で直接リッスンさせたい場合に使用します。
{
gateway: {
bind: "tailnet",
auth: { mode: "token", token: "your-token" },
},
}
別の Tailnet デバイスからの接続:
- コントロール UI:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
注意:このモードではループバック(http://127.0.0.1:18789)は動作しません。
パブリックインターネット(Funnel + 共有パスワード)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password", password: "replace-me" },
},
}
パスワードをディスクにコミットするよりも OPENCLAW_GATEWAY_PASSWORD の使用を推奨します。
CLI の例
openclaw gateway --tailscale serve
openclaw gateway --tailscale funnel --auth password
注意事項
- Tailscale Serve/Funnel には
tailscaleCLI がインストール済みかつログイン済みであることが必要です。 tailscale.mode: "funnel"はパブリック公開を避けるため、認証モードがpasswordでなければ起動を拒否します。gateway.tailscale.resetOnExitを設定すると、シャットダウン時に OpenClaw がtailscale serveやtailscale funnelの設定を元に戻します。gateway.bind: "tailnet"は直接 Tailnet バインドです(HTTPS なし、Serve/Funnel なし)。gateway.bind: "auto"はループバックを優先します。Tailnet 限定が必要な場合はtailnetを使用してください。- Serve/Funnel は Gateway コントロール UI + WS のみを公開します。ノードは同じ Gateway WS エンドポイント経由で接続するため、Serve でノードアクセスも動作します。
ブラウザ制御(リモート Gateway + ローカルブラウザ)
Gateway を1台のマシンで実行し、別のマシンのブラウザを操作したい場合は、ブラウザマシンでノードホストを実行し、両方を同じ Tailnet に接続してください。Gateway がブラウザアクションをノードにプロキシするため、別の制御サーバーや Serve URL は不要です。
ブラウザ制御に Funnel を使用しないでください。ノードペアリングはオペレーターアクセスと同等に扱ってください。
Tailscale の前提条件と制限事項
- Serve には Tailnet で HTTPS が有効であることが必要です。未設定の場合 CLI がプロンプトを表示します。
- Serve は Tailscale アイデンティティヘッダーを注入します。Funnel は注入しません。
- Funnel には Tailscale v1.38.3 以上、MagicDNS、HTTPS 有効化、Funnel ノード属性が必要です。
- Funnel はポート
443、8443、10000のみを TLS 経由でサポートします。 - macOS での Funnel にはオープンソース版の Tailscale アプリが必要です。
詳細情報
- Tailscale Serve の概要:https://tailscale.com/kb/1312/serve
tailscale serveコマンド:https://tailscale.com/kb/1242/tailscale-serve- Tailscale Funnel の概要:https://tailscale.com/kb/1223/tailscale-funnel
tailscale funnelコマンド:https://tailscale.com/kb/1311/tailscale-funnel