- オペレーター (あなた自身 / macOS アプリ): SSH トンネルが万能なフォールバック手段となります。
- ノード (iOS/Android および将来のデバイス): ゲートウェイの WebSocket に接続します(ネットワーク環境に応じて LAN、Tailnet、または SSH トンネルを使用)。
基本的な考え方
- ゲートウェイの WebSocket は、構成されたポート(デフォルト 18789)の ループバック (127.0.0.1) インターフェースで待機します。
- リモートで使用する場合は、そのループバックポートを SSH で転送するか、あるいは Tailnet/VPN を使用してトンネルを介さずに接続します。
一般的な VPN / Tailnet 構成(エージェントの所在)
ゲートウェイホスト を「エージェントが住んでいる場所」と考えてください。そこがセッション、認証プロファイル、チャネル、および状態データを所有します。手元のノート PC やモバイルノードは、そのホストへ接続しに行きます。1) Tailnet 内の常時稼働ゲートウェイ (VPS または自宅サーバー)
永続的に稼働するホストでゲートウェイを実行し、Tailscale または SSH 経由でアクセスします。- 最高の操作感 (UX):
gateway.bind: "loopback"を維持しつつ、コントロール UI には Tailscale Serve を使用します。 - フォールバック: アクセスが必要なマシンからループバックへの SSH トンネルを併用します。
- 構築例: exe.dev (手軽な VM) や Hetzner (本格的な VPS)。
2) 自宅のデスクトップで実行し、外出先のノート PC から操作する
ノート PC 側ではエージェントを実行せず、リモートで接続します:- macOS アプリの Remote over SSH モードを使用します(Settings → General → “OpenClaw runs”)。
- アプリがトンネルの開設と管理を自動で行うため、WebChat やヘルスチェックがそのまま機能します。
3) ノート PC で実行し、他のマシンからリモートアクセスする
ゲートウェイはローカルで動かしつつ、安全に外部へ公開します:- 他のマシンからノート PC への SSH トンネルを張る。
- あるいは Tailscale Serve でコントロール UI を公開し、ゲートウェイ本体はループバックのみに留める。
コマンドのフロー (どこで何が動くか)
単一のゲートウェイサービスが状態とチャネルを所有し、各ノードは周辺機器(ペリフェラル)として動作します。 フローの例 (Telegram → ノード):- Telegram のメッセージが ゲートウェイ に到着。
- ゲートウェイが エージェント を実行し、ノードツールの呼び出しが必要か判断。
- ゲートウェイが WebSocket を介して ノード を呼び出し(
node.*RPC)。 - ノードが結果を返し、ゲートウェイが Telegram へ返信。
- ノードはゲートウェイサービスを実行しません。 意図的に分離されたプロファイルを使用する場合を除き、1つのホストで実行するゲートウェイは1つだけにする必要があります(詳細は マルチゲートウェイ を参照)。
- macOS アプリの「ノードモード」は、ゲートウェイ WebSocket を利用する単なるノードクライアントとして動作します。
SSH トンネル (CLI とツール)
リモートのゲートウェイ WebSocket へのローカルトンネルを作成します:openclaw healthやopenclaw status --deepは、ws://127.0.0.1:18789を通じてリモートゲートウェイへ到達できるようになります。openclaw gateway {status,health,send,agent,call}等のコマンドで--urlフラグを使用して、転送された URL を明示的に指定することも可能です。
18789 は、自身で構成した gateway.port(または --port や環境変数)に置き換えてください。
注意: --url を指定した場合、CLI は構成ファイルや環境変数の認証情報を自動では使用しません。必ず --token または --password を明示的に含めてください。認証情報がない場合はエラーとなります。
CLI のリモート既定値設定
リモートの接続先を保存し、CLI コマンドがデフォルトでそれを使用するように設定できます:ws://127.0.0.1:18789 のままにしておき、あらかじめ SSH トンネルを開いておいてください。
認証情報の優先順位 (Contract)
ゲートウェイの認証情報(トークン/パスワード)の解決ルールは、API 呼び出し、Discord の実行承認監視、およびノード接続のすべてで共通です:- 明示的な指定:
--token,--passwordフラグや、ツール設定のgatewayTokenが常に最優先されます。 - URL 上書き時の安全性:
- CLI で
--urlを指定した場合、暗黙的な(構成ファイルや環境変数の)認証情報は再利用されません。 - 環境変数
OPENCLAW_GATEWAY_URLによる上書き時は、環境変数経由の認証情報 (OPENCLAW_GATEWAY_TOKEN/PASSWORD) のみが使用される可能性があります。
- CLI で
- ローカルモード (Local mode) 時の優先順位:
- トークン:
OPENCLAW_GATEWAY_TOKEN→gateway.auth.token→gateway.remote.token - パスワード:
OPENCLAW_GATEWAY_PASSWORD→gateway.auth.password→gateway.remote.password
- トークン:
- リモートモード (Remote mode) 時の優先順位:
- トークン:
gateway.remote.token→OPENCLAW_GATEWAY_TOKEN→gateway.auth.token - パスワード:
gateway.remote.password→OPENCLAW_GATEWAY_PASSWORD→gateway.auth.password
- トークン:
- リモート環境への probe/status 実行時のトークンチェックはデフォルトで厳格です。リモートモード指定時は
gateway.remote.tokenのみが使用され、ローカルトークンへのフォールバックは行われません。 - レガシーな
CLAWDBOT_GATEWAY_*環境変数は、互換性維持のためのパスでのみ使用されます。新しい認証解決ロジックではOPENCLAW_GATEWAY_*のみが参照されます。
SSH 経由でのチャット UI 利用
WebChat は独立した HTTP ポートを使用しなくなりました。SwiftUI 製のチャット UI は直接ゲートウェイの WebSocket に接続します。- 18789 ポートを SSH で転送し、クライアントから
ws://127.0.0.1:18789に接続してください。 - macOS では、トンネル管理を自動で行うアプリの “Remote over SSH” モードの利用を推奨します。
macOS アプリの “Remote over SSH”
macOS のメニューバーアプリは、このリモート構成(ステータス確認、WebChat、音声ウェイク転送)をエンドツーエンドで制御できます。 手順: macOS リモートアクセス。セキュリティルール (リモート / VPN)
簡潔に言えば、必要性が確実でない限り、ゲートウェイはループバック(127.0.0.1)のみで待機させるのが最も安全です。- ループバック + SSH / Tailscale Serve が最も推奨される構成です(外部に直接ポートを晒さないため)。
- 平文の
ws://接続は、デフォルトでループバックに限定されています。信頼できるプライベートネットワーク内で平文接続を許可したい場合は、クライアントプロセスの環境変数にOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1を設定してください。 - ループバック以外へのバインド (
lan,tailnet,custom, またはループバック不可時のauto) を行う場合は、必ずトークンまたはパスワード認証を有効にする必要があります。 gateway.remote.token/passwordはクライアント側の認証情報ソースです。これらを設定するだけでは、サーバー側の認証は有効になりません。gateway.auth.*が未設定の場合、ローカルからの呼び出し時にgateway.remote.*がフォールバックとして使用されることがあります。wss://を使用する際、gateway.remote.tlsFingerprintでリモートの TLS 証明書のフィンガープリントを固定(ピン留め)できます。- Tailscale Serve を使用する場合、
gateway.auth.allowTailscale: trueを設定することで、認証ヘッダーによる Tailscale の身元確認を有効にできます(コントロール UI および WebSocket トラフィックが対象。HTTP API エンドポイントは引き続きトークン/パスワードが必要です)。このトークンレスフローは、ゲートウェイホストが信頼されていることを前提としています。 - ブラウザ制御機能はオペレーター権限と同等に扱ってください。Tailnet 限定の運用と、明示的なノードペアリングを推奨します。