NATトラバーサル

NAT(Network Address Translation)の背後にいるデバイス同士がP2P接続を確立するための技術群。ほとんどのデバイスはNATの背後にいるため、VPNや通話アプリなどP2P通信を必要とするシステムの根幹技術。

NATが引き起こす問題

NATは外部からの接続を遮断するため、本来はP2P通信が不可能。

[デバイスA: 192.168.1.10] → [NAT A: 203.0.113.1:12345] → インターネット
[デバイスB: 192.168.2.20] → [NAT B: 198.51.100.1:54321] → インターネット

AとBはお互いのプライベートIPを知っていても直接通信できない。

主要技術

STUN(Session Traversal Utilities for NAT)

STUNサーバーに接続することで、自分のNATが外部に公開している(NATによって変換された後の)アドレスとポートを知ることができる。

UDPホールパンチング

NATは「内側から外側への通信」を許可し、その応答を通すルールを自動的に作成する。この特性を利用し、AとBが同時に相手のアドレスへパケットを送ることで、互いのNATに「穴(hole)」を開ける手法。

時刻T: A→B(Bに届かないが、NAT Aに穴が開く)
時刻T: B→A(Aに届かないが、NAT Bに穴が開く)
時刻T+1: 互いのパケットが穴を通って到達!

ICE(Interactive Connectivity Establishment)

複数の接続方法を同時に試し、最も良いものを選ぶアルゴリズム。

優先順位:

  1. 直接接続(同一LAN内)
  2. IPv6直接接続
  3. UDPホールパンチング
  4. リレーサーバー経由(TURN/DERP)

Symmetric NAT

企業ファイアウォールなどで使われる厳格なNAT方式。接続先ごとに異なるポートを割り当てるため、UDPホールパンチングが機能しない。この場合、リレーサーバー経由にフォールバックする。

フォールバック:リレーサーバー

ホールパンチングが成功しない場合のフォールバックとして、リレーサーバーを使う。Tailscaleの場合はDERP(Designated Encrypted Relay for Packets)サーバー。リレーでも通信内容はE2E暗号化されており、中継サーバーは復号できない。

成功率

Tailscaleの公開データでは:

関連