NATトラバーサルの動作原理(2020)
(tailscale.com)NATトラバーサルの動作原理
-
基本的な問題: 2台のマシン間でピアツーピア接続を確立する問題を扱う。TailscaleではWireGuard®トンネルを確立しようとしている。この技術はWebRTC、VoIP通話、ビデオゲームなどのさまざまな用途で使われる。
-
UDPベースのプロトコル: NATトラバーサルにはUDPベースのプロトコルが必要。TCPを使用することもできるが、複雑さが増大し、カーネルのカスタマイズが必要になる可能性がある。
-
ネットワークソケットの直接制御: ネットワークパケットを送受信するソケットを直接制御する必要がある。既存のネットワークリブライリを使ってNATを通過することはできない。
-
ローカルプロキシの利用: ソケットへの直接アクセスが難しい場合、ローカルプロキシを使用してNATトラバーサルとパケットリレーを実行できる。
ファイアウォールを理解する
-
ステートフルファイアウォール: ほとんどのNATデバイスはステートフルファイアウォールを含み、これは過去に見たパケットを記憶して新しいパケット処理に活用する。
-
UDPトラフィックルール: ファイアウォールは、以前観測したアウトバウンドパケットと一致するインバウンドUDPパケットを許可する。
-
ファイアウォール対策: 全てのファイアウォールが同じ方向を向いている場合、クライアント/サーバー通信を再設計するのと同じことになる。しかし、2つのクライアントが直接通信しようとすると問題が発生する。
ファイアウォール回避
-
ファイアウォールを再構成せずに解決: ファイアウォールを再構成しなくても問題を解決する方法が必要。UDPパケットが正しい送信元と宛先を持っていれば、応答として見なされるパケットは許可される。
-
情報共有: ピアは相手の ip:port 情報を事前に把握している必要がある。これを行うために、コーディネータサーバを使ってip:port情報を同期する。
NATの本質
-
NATデバイス: NATデバイスはパケットを変更し、特にソースNAT(SNAT)が問題を引き起こす。これは複数のデバイスをインターネットに接続するために使用される。
-
NAT探索: NATデバイスがパケットを変更するため、2つのピアは相手のip:portを知らない。STUNプロトコルを使ってNAT探索をサポートする。
STUNとNAT探索
-
STUNプロトコル: NAT化されたクライアントがインターネットのサーバと通信する場合、サーバはNATデバイスが生成したグローバルip:portを見ることができる。STUNサーバはクライアントにこの情報を提供する。
-
制限事項: STUNは一部の場合にしか機能せず、特にセキュリティ装置として掲示されるNATゲートウェイでは失敗の可能性が高い。
追加の解決策
-
リレーの使用: 直接接続が失敗した場合、双方が妨害されずに通信できるよう、リレーを用いてパケットを中継する。
-
DERPプロトコル: TailscaleはDERP(Detoured Encrypted Routing Protocol)を使用してデータをリレーし、NAT探索をサポートする。
-
ポートマッピングプロトコル: UPnP IGD、NAT-PMP、PCPなどのポートマッピングプロトコルを使用して、NATデバイスにより協力的に動作するよう要求できる。
まだコメントはありません。