2026-04-24 OpenClaw エグレス経路:ヘッドレス・レンタル・クラウド Mac 上の DNS、TLS SNI、アップストリーム耐性
レンタルの Apple Silicon Mac mini 相当で OpenClaw を動かす多くのランブックは、nginx が 受信ウェブフックの TLS を終端するところで終わっています。しかしそれはシステムの半分にすぎません。ゲートウェイ・ツール呼び出し・LLM プロバイダの HTTP クライアントはすべて エグレスし、別の anycast フロント群へ向かい、それぞれ新しい DNS の A/AAAA、TLS 1.2+ の SNI、HTTP/2 の挙動を要求します。本稿(2026-04-24)は リバースプロキシの深掘りの繰り返しではなく、外向き契約—DNS の鮮度、証明書検証、時刻運用、そして HK / JP / KR / SG / US のいずれかで API に届かなくなったのに同じプロダクトの Web UI はノート PC から見える、といったときに 構造化ログで 相関する方法を述べます。launchd に置いた API キーと併読し、秘密が死んだのと、OAuth トークンを発行するホストへの経路が死んだのを取り違えないでください。
エグレスはインバウンドの鏡像ではない
成功した 受信ウェブフックは、(a) リスナーが bind されている、(b) 証明書が クライアント側で信頼されている、(c) プロバイダ → あなたのエッジまでの TCP が通る、ことを示します。外向き呼び出しが示す事実は別です。ゲートウェイプロセスが使う Node(または他ランタイム)の トラストストア、同一ホスト上の DNS 解決(ノート PC のリゾルバではない)、プロバイダの DNS が両方を返したときにデフォルトルートが IPv4 と IPv6 のどちらを優先するか、です。レディネスが 127.0.0.1:18789 だけを試して緑でも、外向きスタックは検証されていません—既知の静的エンドポイントへの合成 GET や、マルチテナント OAuth なら RFC 8705 系のメタデータ確認などでプローブを拡張し、RTT p95 を他の JSON ログと同じ行形式で残せば、ダッシュボード用に新しいパーサを増やす必要はありません。
DNS 解決、TTL、macOS で「固まった」リゾルバ
大規模 API / 推論ネットワークは短い TTL でエッジ IP を入れ替えます。長寿命の SSH のみ本番ホストでは次に注意してください。(1) メンテから復帰した直後、scutil --dns がテスト週の古い スプリットホライズン名を指したまま ENOTFOUND が爆発する;(2) 地域 GeoDNS で シンガポールの箱と 米国東部カナリーが別 anycast に送られ、パケットロスなしに非対称遅延だけが出る。デプロイ後チェックに dscacheutil -q host -a name api.target.example と host -a をスクリプト化し、各リゾルバホップの 往復をチケットテンプレに書く—「ブラウザでは DNS は問題ない」(別キーチェーンや VPN を使っている)で深夜のブリッジが潰れないようにします。
企業 VPN やメッシュの分岐経路
ゲートウェイを Tailscale で内部 API にメッシュしつつ、公開チャット通知は直出し、というチームもあります。どのホスト名が 100.x のみでどれが公開かを文書化してください。OpenClaw の一つのプロファイルに混在させてポリシーブロックがないと、403/タイムアウトが断続し、汎用ゲートウェイトリアージだけでは切り分けできません。失敗の原因はキュー深さではなくルーティングだからです。疑わしいときは、対話的な ssh -t シェル(別のプロキシ変数を拾う)ではなく、デーモンが継承する launchd の EnvironmentVariables と同じ環境から単一の curl -v を取ってください。
TLS、SNI、証明書チェーン検証
ツールスタックの各 HTTPS クライアントは SNI で 正しいホスト名を送れなければなりません。生 IP を叩くレガシースクリプトは CDN 手前で失敗します。macOS 上の Node の トラストストアは、VNC 中にブラウザが使うシステムキーチェーンとは別です。ラボで社内 CA を ピンするなら、デーモンが読むバンドルか環境に入れ、開発シェルへの一回きりの export ではなく launchd の環境と秘密のランブックに従ってください。数分以上の 時刻ずれは TLS 1.3 と署名付き JWT のウィンドウを壊します—sntp -sS time.apple.com はオンボックス不変条件のままで、受信 HMAC 時間バケットと同じ NTP 方針と揃えます。
IPv4 と IPv6、Happy Eyeballs、明示プロキシ
プロバイダの DNS が AAAA と A の両方を返すと、クライアントライブラリの 接続戦略(通称「Happy Eyeballs」)が、データセンター ファイアウォールやプロバイダ側許可リストがまだ追従していない経路を選ぶことがあります。HK / JP / KR / SG / US フリートでは実用的な分け方として、エッジで IPv6 を止めているリージョンを文書化し、トリアージに curl -4 と -6 を入れ、企業 HTTP プロキシが必須なら API キー環境と同じ LaunchAgent に HTTPS_PROXY を置き、ブリッジ機能が WebSocket アップグレードに依存するならプロキシが許可するか確認してください。Docker とネイティブ npm でもプロキシ変数の伝播は変わります。ブリッジモードのコンテナは、compose レベルで本番 plist を反映した env ブロックを通さない限り、ホストの launchd を無視します。
症状 / レイヤ別トリアージ(外向き)
| 症状 | レイヤ | 安定化 |
|---|---|---|
| TLS alert unknown CA、終了コード 60 | チェーン / 信頼 / MITM | システム信頼を揃え、IP 直叩き TLS を避け、443 のプロキシ MITM を確認 |
| getaddrinfo ENOTFOUND(断続) | DNS / 検索ドメイン | scutil の検索ドメイン、キャッシュ flush、ノート PC と再比較 |
| プロバイダ縁で HTTP 403 が SG ノードだけ | Geo / WAF + エグレス IP | レンタルエグレスを許可リストにマップし、リージョン別の第 2 ホストを検討 |
構造化ゲートウェイログとの突合
OpenClaw ログに単一の リクエストまたはトレース ID を採用し、プロバイダ API が冪等キーやトレースヘッダを受け付けるなら外向き HTTP ヘッダにも載せます。ヘッダを注入できないなら、date・duration_ms・err.code を 1 行の JSON にまとめ、ログ転送で「謎の 500」を DNS スパイクまで辿れるようにします—スクリプト化したくない Certificate Assistant や対話的トラスト修復には、VNC を最終手段として残せます。npm アップグレードとゲートウェイ二重启動のあとは、アップグレード前ランブックと同じリストに対して最小限の外向き curl -sS -o /dev/null -w "%{time_connect}\n" スイートを再実行し、Node OpenSSL バインディングの退行を数値で見える化してください。
関連ランブック
時間ベースの合成エグレス確認は launchd + cron、ネットワークではないチャネル問題は サブエージェント、サービスアカウント下で curl を壊すのが PATH か不明なら オンボード + デーモン と比較してください。
FAQ:本番の外向き接続
| 質問 | 実務的な答え |
|---|---|
| ping で足りる? | ICMP が通っても同じ anycast への TCP 443 はブロックされていることがある。TLS レイヤのチェックを優先する。 |
| 外向き FW ルールのダンプが要る? | レンタル DC Mac では稀だが、チケットテンプレに ポート許可リストの文書を置いておく。 |
| 第 2 ノードはいつ? | GeoDNS とエグレス IP 方針で一リージョンのリスクが偏るとき。料金からスケールアウトを検討。 |
エグレス負荷の高い OpenClaw に Mac mini M4 が合う理由
外向き中心の自動化は 低ジッタの時計、予測可能な TCP スタック、フォレンジクス用に冗長な JSON を残せる NVMe に報いられます。同じ Mac mini M4 フリートが CI ホストにもなり、SSH ファーストの HK · JP · KR · SG · US ゲートウェイ 24/7 と 1〜2 TB の構造化ログ保持を、NIC とカーネルの間にハイパーバイザを挟まずに運べます。リージョンごとに エグレス評判を分けたいなら、MacXCode のプランで専用ノードを同居させ、ダッシュボードで遅延チャートを リースラベル別に分割してください—2026 のマルチプロバイダ構成に安いガードレールになります。