クライアント同士が直接通信するP2P(peer to peer)タイプのアプリケーションにとって,最もやっかいなのが「NAT(network address translation)越え」の問題だ。とくに両側でNATが動くブロードバンド・ルーターを使っていると,既存の技術ではどうやってもP2Pで通信できないケースがある。

 ネットワークの負荷を分散できるという特徴を持つP2Pは今後,ゲーム機やネットワーク家電などでも使われる可能性が高い。しかし,NATを越えられないとP2Pの利用範囲は大きく制限されてしまい,使い物にならない。

 そこで,この問題を解決するネットワーク機器向けソフトウエア開発キットが登場した。フラクタリストが販売する「NAT Traversal SDK」だ。この開発キットは,「拡張STUN」と呼ぶ画期的なNAT越えの新技術を含んでいる。どんな状況でもNATを越えてP2P通信を実現できるという。

 NATは一般的に,LAN内で使われるプライベート・アドレスとインターネットで使われるグローバル・アドレスを変換する技術を指す。現状のNATでは,送信元のプライベート・アドレスと送信元ポート番号のペアを,インターネットで使うグローバル・アドレスと送信元ポート番号のペアに変換し,対応付けておく。

 NATは,外側の送信元ポート番号の割り当て規則の違いによって大きく二つのタイプに分けられる。それは,(1)あて先が変わっても外側に割り当てられるポート番号が変化しないCone NATと,(2)あて先が変わるとポート番号も必ず変わるSymmetric NAT――である。

 Cone NATの場合は,既存の技術でも越えられる。インターネット上に専用のサーバーを置き,実際のP2P通信に先立って両側のパソコンが,P2P通信で使うのと同じポート番号を使ってこのサーバーと通信する。サーバーは,このとき受信したパケットの送信元ポート番号をそれぞれのパソコンに教え,パソコンは教えてもらったポート番号をあて先ポート番号に指定することで,P2Pによる通信が可能になる。このNAT越えの技術をSTUN(simple traversal of UDP through NATs)と呼ぶ。

 ただし,Symmetric NATではSTUNは使えない。インターネット上のサーバーと通信するときのポート番号がわかっても,P2P通信にはまた別のポート番号が使われるからだ。P2Pを使うインターネット電話「Skype」では,通信するパソコンが両方ともSymmetric NAT経由でインターネットに接続している場合は,別の「リレー・ノード」というパソコンを経由して通信するしくみになっている。

 ところが,拡張STUNを使うとSymmetric NATを越えてパソコン同士が直接P2Pで通信できるようになるという。実は,Symmetric NATを採用しているブロードバンド・ルーターの多くは,外側の送信元ポート番号をランダムではなく規則的に割り当てる。そこで,拡張STUNは,「通信のたびにポート番号の値は1ずつ増える」といったような規則性を徹底的に調べる。こうした規則性を把握することで,P2Pで使われるポート番号を高い精度で予測できるようにしたのである。

 実際,「国内で販売されているほぼすべてのブロードバンド・ルーターを購入して試したが,今のところ越えられなかった製品はない」(フラクタリスト)という。

斉藤 栄太郎