• 検索結果がありません。

DTUN ノードを用いた NAT の検出

ドキュメント内 JAIST Repository https://dspace.jaist.ac.jp/ (ページ 58-61)

第 4 章 Kademlia のルーティングテーブルとデータ構造 23

5.3 Distributed Traversal of UDP through NATs の設計

5.3.2 DTUN ノードを用いた NAT の検出

新規ノードがサービスネットワークへ参加する際,まず始めにDTUNノードへとアク セスし,自ノードがNAT下にあるかそうでないかを判別する.判別する際に用いるプロ トコルは図 5.7のようになる.

まず始めに,新規ノードはDTUNノードへechoメッセージをnonce1と共に送信し,

送信した先の DTUN ノードが生存しているか確認を行う.もしも,送信先の DTUN ノードが生存していた場合,DTUNノードは,echoメッセージ中にあったnonce1と,

recvfrom関数で得られたIPアドレスとポート番号を含めたecho replyメッセージを新

NAT Node DTUN Node 1 echo, nonce1

echo reply, IP(NAT Node),

DTUN Node 2

Port(NAT Node), nonce1

echo, nonce2

echo reply, IP(NAT Node), Port(NAT Node), nonce2

5.8 NATタイプ判定プロトコル

規参加ノードへと返信する.

echo replyメッセージを受け取った新規ノードは,新たに別なポートP2 を開いた後,

echo メッセージを送信したポートと同じポートから,P2 のポート番号と,nonce2を含 んだecho redirectメッセージをDTUNノードへ送信する.echo redirectメッセージを 受け取ったDTUNノードは,ポートP2 へ向けて,同様に,recvfrom関数で得られたIP アドレスとポート番号を含めたecho redirect replyメッセージを返信する.ただし,こ の時に返信する宛先ポートは,echo redirectメッセージ中にあるポートP2 となる.

ここで,もしも新規ノードがNAT 下にあった場合,新たに開いたポートP2 は何もパ ケットを送信していないため,echo redirect replyメッセージを受信できないはずであ る.従って,一定時間内にecho redirect replyメッセージを受信しなかった場合は,新規 参加ノードはNAT下にあると言える.逆に,ポートP2 でecho redirect replyメッセー ジを受信できた場合は,新規参加ノードはグローバルアドレスを持っていると言える.

図5.7のプロトコルを用いてノードがNAT下にあると判定された場合,次に図 5.8の プロトコルを用いて,そのNATがSymmetric NATであるかCone NATであるかを判 別する.

echo wait

NAT

global

echo wait 2

NAT symmetric NAT

cone

New Node: Socket 1, Socket 2 DTUN Node 1

DTUN Node 2

echo wait 1 send echo to DTUN Node 1

by Socket 1

unknown

timed out

redirect

timed out send echo redirect to DTUN Node 1

by Socket 1

recv echo redirect reply by Socket 2

timed out

timed out send echo to DTUN Node 1 and 2

by Socket 1

replied port numbers are same

not same

actors:

start

5.9 ノードタイプの状態遷移

5.1節で述べたように,グローバルアドレス側で利用するポートが違う場合が

Symmet-ric NAT であり,同じ場合がCone NAT である.従って,グローバルアドレスを持つ

2つのノードと通信を行えば,Symmetric NATかCone NATかが判別出来ることにな る.図 5.8は,2つのDTUNノードにアクセスしてNAT種別の判別を行うプロトコル である.

図5.8のプロトコルでは,NAT下にあるノードはDTUNノード1と2に対して,echo メッセージを送信する.echo メッセージを受け取った DTUNノード 1 と2は,NAT ノードに対して echo replyメッセージを返信する.このecho reply メッセージ中には,

recvfrom関数から得られたNAT ノード側のグローバルアドレスとポート番号が含まれ

ている.

このとき,DTUNノード1と2が返信したポート番号が同じであればCone NAT,違 えばSymmetric NATと判別することが出来る.なお,各echoecho replyメッセージ 中にはnonceが含まれており,NATノード側でこのnonceを確認し,正しいecho reply メッセージのみ受信する.

図5.9は,図5.7と図 5.8のプロトコルを用いたときの状態遷移を表している.一番は じめの状態はunknownとなり,最終的に,global,cone NAT,symmetric NATのいず れかの状態となる.

このように,NATの検出には異なるグローバルアドレスを持つ2つのノードを利用し て行う.そのため,本論文で述べるNAT越え手法が正しく働くためには,グローバルア ドレスを持つノードが2つ以上存在し,それらノードがDTUNネットワークに参加して いることが必須となる.

ドキュメント内 JAIST Repository https://dspace.jaist.ac.jp/ (ページ 58-61)