ポートとNAT透過
ポートはトランスポート層の「マルチプレクサ」であり、NAT はそれをインターネット最大のハックに変えました。STUN/TURN/ICE という一連のNAT透過ツールの本質は、外部マッピングと内部アドレスの間に予測可能なパスを確立することです。
概要
NAT透過は、現在のインターネットアーキテクチャにおける最大の妥協点です。IPv4アドレスの枯渇により、数十億台のデバイスがパブリックIPを共有せざるを得ず、「直接接続」が例外となりました。NATの背後では、2つのデバイス間は直接通信できません(リレーまたはホールパンチングを使用する場合を除く)。STUNはデバイスがパブリックマッピングを特定するのを助け、TURNは透過できない場合のリレーを提供し、ICEは最適なパス(直接接続 > ホールパンチング > リレー)を自動選択します。Tailscaleはこれらの技術をユーザーが意識しないメッシュVPNとしてパッケージ化しています。
エフェメラルポート
TCP/UDP接続において、クライアント側が自動的に選択するポートは、カーネルによって管理される範囲内にあります:
cat /proc/sys/net/ipv4/ip_local_port_range
枯渇リスク:高同時接続の短い接続(各接続が1つのエフェメラルポートを消費し、TIME_WAIT期間中60秒間保持)→ ポートが枯渇 → connect() が EADDRNOTAVAIL を返す
緩和策:範囲の拡大 + tw_reuse
NAT分類 (RFC 4787)
NATのマッピング動作が、透過の難易度を決定します:
NATフィルタリング動作(ファイアウォール側):マッピングと同様に、エンドポイント非依存が最も緩く、アドレス・ポート依存が最も厳格です。
NATが「エンドポイント非依存マッピング + アドレス依存フィルタリング」(一般的な家庭用ルーターで最も多い)の場合、STUNは有効です。Symmetric NAT(多くのモバイルネットワーク)の場合、TURNまたはポート予測が必要です。
STUN (RFC 8489)
TURN (RFC 8656)
STUNはSymmetric NATでは機能しません — 外部ポートが予測不可能だからです。TURNはリレーとして機能します:
ICE (RFC 8445): 候補の収集と接続チェック
TailscaleのNAT透過戦略
参考
- RFC: 4787, 8489, 8656, 8445, 6887
- tailscale blog: "How NAT traversal works"
Keywords: ephemeral ports, NAT, Full Cone, Symmetric NAT, STUN, TURN, ICE, hole punching, DERP