Tailscale(Gateway ダッシュボード)

OpenClaw は Gateway ダッシュボードと WebSocket ポートに対して、Tailscale の Serve(Tailnet 内)や Funnel(パブリック)を自動設定できます。Gateway はループバックにバインドしたまま、Tailscale が HTTPS、ルーティング、さらに Serve の場合はアイデンティティヘッダーを提供します。

モード

  • servetailscale serve による Tailnet 限定の Serve。Gateway は 127.0.0.1 で動作。
  • funneltailscale funnel によるパブリック HTTPS。OpenClaw は共有パスワードを要求します。
  • off:デフォルト(Tailscale 自動化なし)。

認証

gateway.auth.mode でハンドシェイクを制御します:

  • tokenOPENCLAW_GATEWAY_TOKEN 設定時のデフォルト)
  • passwordOPENCLAW_GATEWAY_PASSWORD または設定による共有シークレット)

tailscale.mode = "serve" かつ gateway.auth.allowTailscaletrue の場合、コントロール UI/WebSocket 認証は Tailscale のアイデンティティヘッダー(tailscale-user-login)を使用でき、トークン/パスワードの提供が不要になります。OpenClaw はローカル Tailscale デーモン(tailscale whois)経由で x-forwarded-for アドレスを解決し、ヘッダーと照合してアイデンティティを検証します。OpenClaw は、ループバックから到着し Tailscale の x-forwarded-forx-forwarded-protox-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 には tailscale CLI がインストール済みかつログイン済みであることが必要です。
  • tailscale.mode: "funnel" はパブリック公開を避けるため、認証モードが password でなければ起動を拒否します。
  • gateway.tailscale.resetOnExit を設定すると、シャットダウン時に OpenClaw が tailscale servetailscale 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 はポート 443844310000 のみを TLS 経由でサポートします。
  • macOS での Funnel にはオープンソース版の Tailscale アプリが必要です。

詳細情報