2026:IPv6、AAAA、Happy Eyeballs——ProxyMac Mac mini への SSH が遅く感じるとき
エンジニアは ssh mini.jp.example がバナー表示まで数息かかるとき、「東京リージョン」のせいにしがちですが、ssh -4 では爆速なのに、というケースは別問題です。現代のリゾルバは A と AAAA の両方を返し、スタックは Happy Eyeballs 型の競争(RFC 8305 の一般アルゴリズムにライブラリが収束)を実装するため、IPv6 試行が「パケット損失」のように感じるほど長く止まることがあります——ProxyMac Mac mini(香港、日本、韓国、シンガポール、米国)自体は健康なのに。本文は IPv6 推進ではなく意思決定ワークシートです:4 行の症状マトリクス、macOS のクライアント設定(ssh -4、ssh -6、AddressFamily)、リテラル v6 の角括弧構文、7 ステップの手順。VPN で答えが変わるなら DNS とスプリットホライズン、大きな TCP セグメントが消えるなら PMTUD、アドレスファミリが確定したら keepalive 調整。ゼロトラストで先に hairpin するポリシーなら、AAAA を追う前に VPN ルーティングを読んでください。
mini は正常だが初回 SSH が一瞬ためらう
症状は三つに分類できます:(1) 毎分の最初の TCP だけ数秒固定の一時停止、(2) DNS TTL 期限切れと相関する間欠停止、(3) 接続確立よりペイロードサイズ(SCP)で悪化。ファミリー 1 はアドレスファミリ競争を示唆;3 は多くの場合 IPv6 ではありません——MTU に飛んで、このページを二度読まないでください。
- 必ず記録:
ssh -vvvでConnectingからConnection establishedまでのタイムスタンプ。 - 比較: 同一ホスト名でデフォルトと
ssh -4——デフォルトだけ遅いなら v6 仮説を検証する価値あり。 - リテラル IPv6 には角括弧が必要:
ssh user@[2001:db8::1]。コロンをポート区切りと誤解しないためです。
A と AAAA の症状マトリクス(トリアージの第一ホップ)
| 体感 | ありそうな層 | 最初のコマンド | 詳細リンク |
|---|---|---|---|
2–5 秒停止のあと高速セッション;ssh -4 で停止が消える | 壊れたまたは hairpin された IPv6 | dig AAAA hostname +time=2 | 本文 + DNS ガイド |
| 数値 IP では動くが名前では失敗 | リゾルバ順序 / スプリット DNS | scutil --dns | head -n 80 | DNS ガイド |
| 対話は OK、SCP が転送途中で死ぬ | PMTUD / ミドルボックス | パケットサイズのスイープ | MTU ガイド |
| 数十アイドル後に切断 | NAT タイマー | ServerAlive プローブ | Keepalive ガイド |
dig A と dig AAAA の両方の出力に加え、ssh -4 がバナーまでの実時間を変えたか一行メモを添付——ネットワークチームはその差分なしに長文は無視します。
macOS ラップトップの Happy Eyeballs 型競争(OpenSSH が継承するもの)
デュアルスタック名を解決するアプリは並列接続を開始し、先に完了した方を優先することがあります。IPv6 が ほぼ 正しい——ルータはプレフィックスを宣伝するが上流は ICMPv6 をフィルタ——場合、きれいな「connection refused」ではなく遅延税を払います。VPN のオン/オフ差を文書化してください。多くの ZTNA クライアントがリゾルバ順を並べ替えたり、カフェの Wi‑Fi と異なる仮想 IPv6 ルートを注入します。
OpenSSH フラグ、~/.ssh/config、アドレスファミリの責任ある固定
ssh -4 と ssh -6 は診断スイッチとして使い、方針が合意したら Host スタンザに AddressFamily inet または inet6 を書き込みます。「v6 がきれいなキャンパス」と「レガシー v4 のみのホテル」を行き来するラップトップに永久 -4 は避け——Match exec ガードなしだと驚きが増えます。設定を分割してください。
Host proxymac-jp-stable
HostName mini.example.jp
User build
AddressFamily inet
ServerAliveInterval 30
ServerAliveCountMax 4
レンタル mini が公開すべきもの(それでもあなたが検証すべきこと)
ProxyMac は予測可能な SSH エントリポイントを渡しますが、顧客所有ホスト名の権威 DNS は委譲しない限りレジストラに残ることがあります。ゾーンが A のみ、AAAA のみ、両方のどれを公開するか、企業リゾルバがセキュリティ名目で AAAA を黙って落としていないか確認してください。IT が AAAA を落とすならラップトップは IPv6 を捏造しません。逆に AAAA があるがアップリンクが壊れていてもクライアントは先に v6 を試すことがあります。
運用に「mini を動かせ」と頼む前の 7 ステップ
- スナップショット: オフィス、VPN、自宅の文脈で
dig A/dig AAAA。 - 計測: 同一名前で
ssh -vvvとssh -4 -vvv——差が >1s なら疑わしい。 - 確認: VPN 切替時の
scutil --dns順序。誤った検索ドメインは IPv6 問題に見えます。 - MTU を除外: bulk コピーが死にシェルは快適ならリンク先ガイドへ。
- アドレスファミリが安定したらkeepalive を重ねる。
- 最終
Hostスタンザをファイアウォールチケットの横で Git に文書化。 - その後だけ MTR 証拠で リージョンを比較——感覚ではなく。
FAQ
mini で IPv6 を無効にすべき? 壊れた経路の修正を優先。グローバルに v6 を切ると正当なデュアルスタック監視を壊すことがあります。
画面共有も同じ競争を継承? 多くの場合はい——QUIC のない経路では画面共有も TCP。エンコーダのせいにする前に DNS とアドレスファミリを検証してください。
CGNAT は話を変える? CGNAT はポートマッピングのリズムを変え、DNS 競争は変えません——443 だけが出る場合は 企業 CONNECT SSH と組み合わせてください。
DNS とデュアルスタックを理解したあと、なぜ ProxyMac Mac mini が適切なアンカーか
Apple Silicon M4 mini は HK / JP / KR / SG / US にあり、実測に付けられるホスト名を与えます。今日の dig は明日も同じように読めるべきです。リゾルバの真実がルーティング方針と一致したら、自動化エージェント、CI、人間の開発者はすべて財務が承認した同じ金属に当たります。料金ページでリージョンを確保し、ヘルプの SSH スニペットを手順の横に置き、macOS が TCC プロンプトの GUI 証人を要求するなら VNC にフォールバックしてください。