NAT-f
を利用したSIP
のNAT
越え通信の提案三浦 健吉† 鈴木 秀和‡ 渡邊 晃† 名城大学理工学部† 名城大学理工学部研究科‡
1. はじめに
いつでもどこからでもネットワークにアクセスで きるユビキタスネットワークの需要が広まっている.
しかし,ホームネットワークは一般的にプライベー トアドレスで構築されるため,インターネット側の 外部ノードからホームネットワーク内の内部ノード に対して通信を開始できないという
NAT
越え問題 がある.我々は,外部ノードと
NAT
ルータが連携するこ とにより,NAT 越え問題解決するNAT-f(NAT- free protocol)を提案している[1].しかし,現在の NAT-f
はSIP(Session Initiation Protocol)に対
応できないという課題があった.そこで本稿では,NAT-f を利用した
SIP
のNAT
越え手法について提案する.2. NAT-f
図
1
にNAT-f
の概要を示す.外部ノードEN
(External Node)と
NAT ルータには NAT-f 機能
が 実 装 さ れ て お り , 内 部 ノ ー ドIN
(Internal Node)及び DDNS(Dynamic DNS)サーバは既
存のものを利用する.DDNS サーバには,IN の名 前とそれに対応するNAT
ルータのアドレスを登録 しておく.なお,プライベートIP
アドレスをPn,
グローバル
IP
アドレスをGn
と表記する.EN
はIN
へ通信を開始する際,DDNSサーバへ 名前解決を依頼する.DDNSサーバはNAT
ルータ のIP
アドレスG2
を返答する.ENはIP
層におい て取得したNAT
ルータのIP
アドレスを仮想アド レスV1
へ書き換えてアプリケーションに渡す.こ のとき,NATルータのIP
アドレス,仮想IP
アド レス,及びIN
の名前の関係をNRT(Name Relation Table)に保存する.この処理により,EN
は通信相手のIP
アドレスをV1
として認識する.EN
は宛先IP
アドレスがV1
である最初のTCP/UDP
パケットを送信する際,一時的にこのパ ケットをカーネル内に待避させ,NATルータとの 間でNAT-f
ネゴシエーションを実行する.NATル ータは, EN とIN
間の通信に必要なNAT
テーブ ルを生成し,自身のIP
アドレスG2
とマッピングされたポート番号
m
をEN
に返答する.以後,ENはネゴシエーションの結果に従い,送 信するパケットの宛先
IP
アドレスをV1
からG2
へ,宛先ポート番号をマッピングされたポート番号m
に変換する.NATに届けられたパケットの宛先IP
アドレス・ポート番号はNAT
テーブルに従って 変換され,INに届けられる.以上の動作によりNAT
外部からの通信開始が可能となる.3. SIP
図
2
にSIP
のシーケンスを示す.両端のUA
(User Agent)が
2
台のSIP Proxy
を経由してシ グナリングを行う場合について述べる.事前準備として,UA2は
SIP Proxy 2
に対してREGISTER
に よ り 自 身 のURI
(Uniform Resource Identifier)である URI2
とINVITE
を受 け取る際に使用するトランスポートアドレスG2:d1
の登録を要求する.SIP Proxy 2 は受信したURI
とトランスポートアドレスをDB(Data Base)に
登録し,UA2
に対して200 OK
を返答する.通信開始時,UA1 は
INVITE
によりUA2
との セッションの確立を要求する.INVITEには,UA2 とのセッションを確立する際にUA1
が使用するト ランスポートアドレスG1:s2
が記載されており,SIP Proxy 1
を中継し,SIP Proxy 2に転送される."Proposal of NAT traversal for SIP utilizing NAT-f"
† Kenkichi Miura and Akira Watanabe
Faculty of Science and Technology, Meijo University
‡ Hidekazu Suzuki
Graduate School of Science and Technology,Meijo University
SIP Proxy 2
は ,URI2
の 名 前 解 決 を 行 い ,INVITE
をUA2
へ転送する.INVITE
を受信したUA2
は,200 OK を返答す る.200 OKには,UA2が使用するトランスポート アドレスG2:d2
が記載されており,2
台のSIP Proxy
を経由してUA1
まで転送される.UA1
はACK
を返答した後,交換したトランスポ ートアドレスを用いて,UA2 と直接メディアセッ ションを確立する.ここで,SIP において NAT-f を利用することを 考える.SIPでは両端の
UA
が自身のIP
アドレス をTCP/UDP
パケットのIP
ペイロード部分に記載 し,お互いに交換することで,通信相手のIP
アド レスを認識する.そのため,NAT-f のように,IP 層でDNS
応答を書き換え,アプリケーションに仮 想アドレスを認識させる手法が適用できない.4. 提案技術
EN
はSIP
機能を持つ一般端末とする.SIPProxy 2
側に拡張したNAT-f
を実装する.そし て,SIP Proxy 2がNAT
ルータに対してNAT-f
ネゴシエーションを実行することによりEN
とIN
間の通信に必要なNAT
テーブルを生成する.図
3
にNAT-f
を利用したSIP
のNAT
越え通信 のシーケンスを示す.NATルータにはNAT-f
機能 が実装されているものとする.SIP Proxy 2
はREGISTER
受信時に,記載され ているIP
アドレスをP1
から仮想アドレスV1
へ書 き換えてからDB
に対して登録を実行する.また,SIP Proxy 2
はV1,P1,G3
の関係をNRT
に保存 し, 200 OKを返答する.UA1
からの通信開始時,SIP Proxy 2はEN
から のINVITE
を 受 信 す る とDB
の 内 容 に よ り ,INVITE
の転送先となるV1:d1
を取得する.ここ で,宛先IP
アドレスV1
が仮想アドレスであるため,SIP Proxy 2と
NAT
ルータ間でNAT-f
ネゴシ エーションを実行する.SIP Proxy 2はINVITE
の 送信元トランスポートアドレスG2:s1,宛先ポート
番号d1,及び NRT
に保存したIN
のアドレスP1
の情報をNAT
ルータに送信する.NAT
ルータは これらの情報を用いて,SIP Proxy 2とIN
のSIP
ネゴシエーションに必要なNAT
テーブルを生成後,マッピングされた
G3:m1
を返答する.SIP Proxy 2 はこのマッピングされたポートに向けてINVITE
を送信する.また,SIP Proxy 2は一連のシーケン スで共通するCall-ID
とEN
が使用するトランスポ ートアドレスG1:s2
を対応付けてキャッシュする.SIP Proxy 2
は,INVITEに対する200 OK
受信 すると,先ほど作成したキャッシュの情報をCall- ID1
で検索し,NATルータに対して再度NAT-f
ネ ゴシエーションを実行する.SIP Proxy 2
はEN
の トランスポートアドレスG1:s2
とIN
のトランスポ ートアドレスP1:d2
を通知してEN
とIN
間の通信 で必要なNAT
テーブルを生成する.すなわち,SIP Proxy 2
の指示により,NAT ルータ内にEN
とIN
間の通信に必要となるNAT
テーブルが生成 される.SIP Proxy 2は200 OK
に記載されている トランスポートアドレスをP1:d2
からG3:m2
へ書 き換え,転送する.200 OK
を受け取ったEN
は,ACK
返答した後,交換したトランスポートアドレスに従い,メディア セッションを確立することができる.
5. まとめ
NAT-f
を利用したSIP
のNAT
越えに手法ついて 検討した.今後は,実装と動作検証を行う.参考文献
[1] 鈴木 秀和,宇佐見 庄五,渡邊 晃,“外部動的マッピ
ングにより NAT 越え通信を実現する NAT-f の提案 と 実 装”, 情 報 処 理 学 会 論 文 誌 ,Vol.48,No.12, pp.3949-3961,Dec.2007