OpenClaw Gateway を VPS や自宅のサーバーで動かしているのに、18789 番をインターネットに晒したくはない。一方で、ノート PC やもう 1 台の Linux、あるいはモバイルのノードから、同じ事業所内のサービスと同じ要領で CLI や WebSocket に届かせたい、という状況を想定します。本文は Tailscale によるプライベートトンネルと、既定のループバック待ち受けのまま、トポロジの区切り、トークンと環境変数、リモート CLI の点検手順を整理し、とくに「トンネルは通るのに、RPC やセッションが揃わない」系を分岐で切り分けます。本文を読めば、Cloudflare Tunnel と systemd の記事とどう棲み分けするか、また重負荷の局面で 専有のリモート Mac へ算力を逃がす導線も把握できます。関連として Linux VPS + systemd + Cloudflare Tunnel、channels のプローブと dmPolicy、全プラットフォームのインストールと初回起動の切り分け も参照します。
OpenClaw Gateway は既定で制御面を 127.0.0.1 にバインドします。意図は、攻撃面を OS が約束する境界の内側に閉じることにあり、WebSocket/HTTP の制御面を直接触れられるのは同一ホスト上のプロセスに限られます。初回デプロイで「遠隔から openclaw したい」からといって、いきなり待ち受けを 0.0.0.0 に変え、手作業の fw で補う、という流れはデモ向きには成り立っても、本番では 無許可のスキャン、トークン漏えい、CORS 誤設定を同時に増幅しがちです。
走査面が桁違いに膨らみます。いったんポートがインターネットに見えると、数時間のうちにボット走査に当たります。仮に強いトークンを置いていても、ログはノイズで埋まり、SOC 側のアラート収束は難しくなります。
「露出面の最小化」と矛盾します。本サイトの Gateway 向け安全強化 では、ループバック、トークン入れ替え、実行承認を前提にしています。bind をインターネット側へ開くのは、第一関門を自分から外す行為です。
切り分けの信号が汚れます。インターネット経路では CDN やキャリアの NAT、社内プロキシが重なります。問題を OpenClaw 本体に帰属させがちですが、実際には half-close や MTU 由来の揺れが入り交じります。
監査向きではありません。「どのグローバル IP からエージェント制御面に入ったか」が、自然人に対応づきにくい形になります。プライベートの tailnet 上の身元(マシンに紐づく主体と ACL)のほうが、手順に書きやすいです。
複数 Gateway 構成のときに衝突しやすいです。同一ホストで二つ目のインスタンスを試す段階で、ポート衝突とトークン混在の確率が上がります。
遠隔 Mac 前提の作業配分と噛み合いません。長期に算力を要するのは Xcode、シミュレータ、大きなキャッシュの類です。Gateway は軽量のままにし、専有ノードへ重い処理を逃がすほうが自然です。
心がけるべき姿勢は、Gateway はループバックのまま、到達性は制御したネットワーク層(Tailscale など)で与えることです。データベースを 127.0.0.1 だけに束ね、SSH トンネル越しに触る、というのと同型の習慣に近いです。Cloudflare Tunnel に慣れている場合は、まず Linux VPS + systemd + Cloudflare Tunnel の「エッジの入口」が本文の「tailnet 内・ループバック中心」とどこが違うかを併せて把握すると、設計図を描きやすくなります。
| 観点 | ループバック+Tailscale | インターネット直 bind | Cloudflare Tunnel |
|---|---|---|---|
| 信頼モデル | tailnet 上の身元+ ACL、既定は閉域 | fw とトークン頼みで露出面が大きい | エッジの身元とトンネル資格、インターネット向け入口 |
| 運用の重さ | 中:ACL とホスト名の保守が要る | 立ち上げは軽いが、後からリスクが積もる | 高め:DNS、証明書、回源方針 |
| OpenClaw 既定設定との相性 | 高:bind を変えなくてよい | 低:bind 変更に誘導されがち | 中:トンネルがループバック上のポートへ戻る |
| 向く利用者 | 個人から小さなチームの閉域オーケストレーション | 本番では推奨しにくい | インターネットからの安全な入口が要る局面 |
「トンネルが解くのは到達性であり、本人確認ではありません。トークンと実行承認は必ず維持します。」
Tailscale の価値は、複数端末を同じ信頼域に乗せ、安定したホスト名で 100.x 帯に届けることにあります。ただし Gateway 側のトークンを自動的に置き換えるわけではありません。ACL を広げすぎ(例 *:*)にすると、tailnet の内側に、インターネット相当の広い到達面をもう一つ生やすのに等しくなります。
2026 年のよくあるトポロジでは、サブネットルーティングと出口ノードに触れます。前者は未インストールの LAN 帯を tailnet から見せる、後者は指定端末の出口を他ホストに任せる、という役割です。Gateway と DB が同一 VPC にあり、ノートは tailnet だけ、という分離では、「どの送信元が DB ポートへ来てよいか」を図示しないと、「Gateway からの curl は通るのに、遠隔 CLI だけ 500」といった齟齬が起こり、ACL やルートの非対称が本当の原因であることが多いです。
もう一つの頻出は MagicDNS と検索サフィックスです。企業ネットでは *.ts.net の解釈が内 DNS に吸われる場合があります。切り分けでは、クライアント上で dig を、パブリック解と tailnet 内解に分けて照らし合わせ、「DNS 混在」を誤って OpenClaw のセッション不調に紐づけないよう手順化しておくと、オンボーディングの再試行が減ります。
Gateway ホストに Tailscale を入れログインしたら、同一 tailnet 上のノートから ping と tailscale ping の RTT を測ります。次に管理コンソールで、当該ノードに想定のタグが付いているか、MagicDNS が有効か、ACL が運用子網から Gateway 役へ TCP 18789(または自前の番号)を明示で許可しているかを照合します。
// ACL 断片の例:tag:ops の端末からだけ Gateway ノードの 18789 を許可
{
"groups": { "group:ops": ["alice@github", "bob@github"] },
"tagOwners": { "tag:gateway": ["group:ops"] },
"acls": [
{
"action": "accept",
"src": ["tag:ops"],
"dst": ["tag:gateway:18789"]
}
]
}
注意:例は形を示すための最低限の断片にすぎません。本番の ACL では出口ノード、サブネットルート、携帯端末まで、最小権限で覆います。変更後は必ずテスト端末を再接続し直してから再検証してください。
受け入れ基準のチェックは変更票に必ず落とし、① Gateway プロセスは依然として 127.0.0.1:18789 である、② 運用端末から、SSH ローカル転送抜きで tailnet IP 越しに同一のヘルス用エンドポイントが応答する(パスはデプロイした版に合わせる)、③ インターネット向けのセキュリティグループで 18789 への着信をすべて止めてある、を満たすこと。「チャンネル経由のメッセージが来ない」系は channels プローブと dmPolicy のゲーティング の記事と突き合わせるのが有効です。
以下は、Gateway 側の openclaw doctor がすでに緑である前提の手順です。初回のセットアップがまだなら、先に 全プラットフォームのインストールと初回起動の切り分け を読んでから戻ると、迷いにくいです。
待ち受けを確認します。サーバ上で lsof -nP -iTCP:18789 -sTCP:LISTEN し、127.0.0.1 であること。*:18789 なら、まず設定を戻してからトンネルの話に進みます。
トークン供給元を一定にします。 OPENCLAW_GATEWAY_TOKEN のような環境変数から注入する形を優先し、永続的な秘密を同期される設定倉庫の平文に置かないようにします。
クライアントに remote を定義します。 ノート上の ~/.openclaw/openclaw.json に、tailnet のホスト名と番号に向く remote ブロックを足します。フィールド名は利用中の CLI のヘルプに従い、WebSocket URL は社内方針に合わせて ws:// か wss:// を選びます。
非既定ポートなら、環境変数で横断的に揃えます。 OPENCLAW_GATEWAY_PORT など、サーバとクライアントのセッションの両方で同じにし、「doctor だけ通り、遠隔 CLI だけ違う番号を見にいく」事故を防ぎます。
TLS の終端位置を確認します。 tailnet の内側でローカル逆プロキシを重ねるなら、WebSocket へのアップグレード用ヘッダが途中で取り除かれていないかを見ます。
成功したセッションのログ紋のひと揃いを残します。 gateway status、doctor、失敗に見えたセッションを同じ工番に揃えておくと、あとで Gateway 版を上げたときの比較に使えます。
// クライアント ~/.openclaw/openclaw.json の例(正式なキー名は公式 CLI へ)
{
"gateway": {
"remote": {
"url": "ws://openclaw-gateway.tailnet-1234.ts.net:18789",
"token": "平文のまま置かず、環境変数か OS のキーストアへ"
}
}
}
補足:小さなメモリの VPS の一台に、Gateway と重いファイル系のビルドを同時に乗せないほうが無難です。エージェントが xcodebuild や大きな依存キャッシュを常時要するなら、実行面は専有の遠隔 Mac へ、Gateway はセッションと道具の制御面として残す配分が安定しやすいです。料金帯の目安は Mac Mini レンタルの料金説明 でディスクとリージョンを合わせてください。
| 目にする症状 | 先に疑う所 | 次に取るアクション |
|---|---|---|
| tailscale ping は通るのに、CLI だけがタイムアウト | 番号が ACL に入っていない、本機の fw でループバック越えの連鎖が足りない | まず同じホスト上のループバックを確認し、外側へ一歩ずつ |
| HTTP 401 や本人確認失敗 | トークン食い違い、systemd ユニットに環境変数が乗っていない | unit の Environment= と、いまのシェル上の export を揃えます |
| WebSocket がすぐ切れる/gateway closed(1000) | 版上げのあと、スコープやセッション形式が不整合 | gateway closed(1000) 記事に沿って、トークンとスコープを揃えます |
| チャンネルは生きているのに本文が来ない | ペア未成立や dmPolicy による制限 | channels のサブコマンドを走らせ、方針表に照合します |
小さな版の上げ直しの直後にだけ、「同じ ACL、同じトークンで、遠隔 CLI にだけ不具合が出る」形になったなら、まずリリースノート上の破壊的変更と既定の番号表を突き合わせ、一つ前の安定版に戻して二分割します。待ち受けの行列を確認する前に ACL を幾度も差し替えない方が、工番に偽陽性が積もりにくいです。
18789 を前提にしていることが多いです(正式な数は当該リリースの説明に従います)。番号を動かすなら、systemd、Docker Compose、クライアントの remote の三箇所で一斉に揃えないと「どこか一つが古い番号を見ている」状態に陥りがちです。tag:gateway など、役割用のラベルを付けておくと、ACL 行数はチームの人数に近いペースで伸びます。手順に「退職と同時に端末失効+ tailnet から外す」を固定の一行で書くと、あとで詰まりにくいです。インターネットへ生の bindを当てにするか、ACL を広すぎる tailnet のどちらかに寄せると、2026 年のエージェント制御面を監査可能な形に保つことは難しくなります。一方、重い演算をすべて Gateway と同居する小さな一台の VPS に乗せると、メモリとディスクの両方で早く踏み抜けます。前者はネットワーク上の層の厚みが足りず、後者はクラウドホストのように横展開しにくい実行面が足りない、という整理になります。
目指す積み方は、Gateway は軽量の常駐、到達面は閉域のトンネルで畳み、重い作業負荷は専有の macOS ノードへです。Xcode ツールチェーンを安定的に使い、長期セッションを前提に、ディスク水準まで契約に書ける必要があるなら、NodeMini の Mac Mini クラウドレンタルは、多くの局面で理にかなう選択です。
パケットは tailnet を経由して目的ホストのプロトコルスタックに入り、同じマシン上のプロセスが 127.0.0.1:18789 へ手渡しします。Gateway 側をインターネット向けに 0.0.0.0 へ開く必要はありません。肝は ACL、本機の fw、トークンです。Mac の算力帯を併せて比較するなら、レンタル料金の説明 もあわせて参照してください。
トンネル記事は、インターネットから閉域のサービスへ、安全に入る「エッジの道筋」を扱います。本文は、tailnet の内側だけに閉じ、ループバック上の待ち受けのまま届けるモデルを扱います。使い分け、あるいは層の重ね方は、まず本人確認の流れ(どの層で何を保証するか)を理解してからにしてください。
テーマで絞るなら、ブログの OpenClaw 分類 を開いてください。接続まわりとアカウントに関する一般的な手順は、クラウド Mac のヘルプセンター 内の SSH や遠隔算力に触れた章を参照します。