2026 OpenClaw × Tailscale tailnet:`gateway.bind` と ACL、「公網に出さない」CLI/チャネル検証 Runbook

約 16 分で読めます · MACCOME

読者像: OpenClaw Gateway は起動済みだが TCP 18789 を公網に晒したくなく、開発者/CI/常駐マシンのみでは同一の小さく信頼できるメッシュで CLI とチャネル完了へ進めたいチーム。要点: upstream のgateway.bindtailnet と揃え、Tailscale ACL の HuJSONで「どの主体が18789に触れられるか」を言語化する。順序は openclaw gateway status のあとtailscale ping と最小チャット。他記事との役割分担:Nginx/Caddy による TLS と WebSocket 逆プロキシ》《Ubuntu の systemd と Cloudflare Tunnel》と三角を描き、それぞれ公網 TLS、外向きトンネル、および公網に一切リッスンさせないメッシュのみを担う。コンテナ側の粒度はさらに《Docker Compose ペアリング》と《零トラスト遠隔 Mac と SSH/Tunnel の切り分け》へ。

tailnet だけにしたのに転ぶ五類型(無防備とは限らないが安全でもない)

WAN を避ければ攻撃モデルから「ポートスキャン」だけが消えるわけではありません。メッシュ側の広すぎる ACL と DNS の分裂は、モデル側のタイムアウトと酷似した症状になります。

  1. ACL の網が広過ぎる:ワイルドカード(*:*)やゆるやかなタグ設計により全ノードが 18789 を探索可能になるのは単に危険面をインナーへ移動しただけです。
  2. バインドと CLI URL の認識ギャップ:`tailnet`/`loopback`/LAN を undocumented に混線させると、Tailscale では通るが古い GATEWAY_URL へだけ握られる現象があります。
  3. MagicDNS と企業 VPN の Split DNSが同居すると、同名のラベルが別プレーンへ解決して断続タイムアウトになります。
  4. MTU と WebSocketが噛むとフラグメント失敗から断続 TLS 停止が起きやすく、鍵問題と取り違えます。
  5. subnet router と exit node の読み間違いで、紙設計とは違う経路にパケットが流れ経路不透明になります。

白板テスト:Tailscale ACL が新しいレイヤでのファイアウォールになります。CVE レスポンス込みのポート集合と鍵ローテーション規律 は tailnet でも健在です。

露出モデル 適合条件 主トレードオフ
公網 TLS 逆プロキシ 外部 SaaS の webhook や、エージェントを常駐させにくいクライアントがいるとき。 証明書/WAF/レートまで含め複雑。TLS チェックリスト参照。
外向きクラウドトンネル ソース IP を隠したいがインバウンド穴あけも避けたい。 POP とベンダ側の運用規律に強く依存。Tunnel Runbook
pure tailnet + gateway.bind=tailnet 全端末 Tailscale が常態化し、ゲートウェイが六国のベアメタルクラウド Mac等で固定されている。 タグ粒度と監査ログが強い。Tailscale 未導入端末へ「届かない」ことは許容機能です。
warning

tailnet メンバー全員管理者ではない:`group:dev` へ丸投げすると「昨夜 18789 を触れたのが誰か」を説明できず、SOC とも整合しません。ルール単位でチケットを紐づけてください。

推奨スケッチ:`G`、`O`、`SR` を三分割

G が常駐ノードで O がオペレータ端末。tailscale status に沿った名前を Runbook と完全に一致させ、TCP 18789 をタグ許可のみへ絞ります。OPENCLAW_GATEWAY_URL には MagicDNS 名か tailnet IP をセットし、`tailnet` モードへの移行後に古い LAN FQDN を残さないでください。

CI が直結するときも tag:citag:gateway:18789 で一本化し、「巨大 dev メッシュ」への混載をやめます。

複数地域の恒久 Mac を載せ換えるときは 《零トラスト遠隔 Mac と SSH/Tunnel の切り分け》 と合わせ、OpenClaw のリッスンポリシーまで含めレビューを完結させます。

六ステップ:メッシュ側で意味のある初回パケットまで

  1. 端末身分をロックtailscale status の名前と IP を Change に貼り付ける。
  2. HuJSON で ACL を先に昇格UDP 41641 と必須 TCP(18789 含む)だけを明示し deny-all を確認。
  3. gateway.bind="tailnet":設定ファイルまたはボリューム同期で反映しgateway.modeを現行 README と突合。階層はリリース毎に揺れるためスクショを添付してください。
  4. 環境変数と JSON の両方へ同じフィンガープリントを残す:`OPENCLAW_GATEWAY_TOKEN` を単一ソース化。
  5. OpenClaw 自動診断openclaw gateway statusopenclaw doctor。失敗時は Tailscale コントロールとホスト両方から同一時刻帯ログを収集。
  6. e2e スモークcurl -v --max-time 5 と最小対話ログを確認し、コンテキスト切れや WS フラグ問題を検知。《doctor 第一段階記事》 で枝分かれ順序が揃っていれば十分です。
json
{
  "gateway": {
    "mode": "local",
    "bind": "tailnet",
    "port": 18789,
    "auth": {
      "mode": "token",
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}
// NOTE: 例示のみ。運用ビルドの schema で各フィールド検証後、コンテナまたはプロセスを再起動。
HuJSON
// ACL 例:`ops` が `gateway` に対してのみ 18789 を開く――タグ命名は運用側で差し替え
{
  "groups": { "group:ops": ["[email protected]"] },
  "tagOwners": { "tag:gateway": ["autogroup:admin"], "tag:ops": ["autogroup:admin"] },
  "acls": [
    {
      "action": "accept",
      "src": ["tag:ops"],
      "dst": ["tag:gateway:18789"],
      "proto": "tcp"
    }
  ]
}

変更票に添える三つの経営/エンジニアリング両面の断言

  • Tailscale ID は自動的に MFA でもない:紛失端末への即時 revocation が遅いと広い ACL は長時間の無防備状態です。
  • WebSocket はフラグ問題に敏感:いきなり bind を拡張する前にICMPとtailscale ping でMTU証拠を揃える。
  • DNS のレースコンディション:`gateway healthy` が緑でも外部 webhook に届かないときはMagicDNS の分割ルールへ遡ってください。

なぜ普段ノート PC の Tailscale exit が本番ゲートウェイになりにくいか

スリープ、蓋、アップデートによる再起動や家庭用回線のアップヒルが時間保証 SLAを壊します。個人SSD とログの混在もインシデント調査では不利です。M4 / M4 Pro の専属ノードに跨る六国スロットがあると SLA と ACL の記載が一致しやすくなります。

Nginx と Tunnel と tailnet という三分割は環境単位ごと RACI が必要になります。MACCOME が提供する恒久 Apple Silicon と柔軟なレンタル条件を使うときは公開の価格表ヘルプセンターを先に読み、Runbook と突合させてください。

まとめ:JSON を広げる前に矢印で描くこと

「誰が誰へ 18789 を開けるのか」を三行で説明できない状態で設定を増やせばMagicDNS伝説だけが増えます。tailnet は復唱可能な接続モデルこそゴール指標です。

次読むべき文書は環境により Compose/TLS checklist/tunnel/ハードニングのどれかです。恒久ノードとの契約を前提に SLA を固めるときにレンジを再確認してください。

よくある質問

Docker は捨てるべきですか?

その必要はありません。ネットワーク名前空間の話のみが変わるため《Docker Compose ペアリング編》を読み続ければ十分です。ホスト tailnet IP と publish が一致することだけを定期的にチェックしてください。

tailnet と SSH の二段構成は許容されますか。

許容されます。運用モデルについては 《零トラスト遠隔 Mac 記事》 が前提を整理します。TCP18789 のACLをSSH 22 と同じ規則に混ぜないでください。