[[ネットワーク用語]] > NATトラバーサル

* NATトラバーサル [#tfdcd2b4]

NATトラバーサル = Network Address Translation traversal

[[「NATトラバーサル」とは:ITpro>http://itpro.nikkeibp.co.jp/word/page/10009153/]]
>NATトラバーサル
NAT traversal
 
[[NAT]]越えの問題を解決する手法の一つ。
NATトラバーサルに対応した[[VPN]](仮想閉域網)ソフトウエアを使うと,&color(red){暗号化したパケットを[[UDP]]でカプセル化する};。
[[NAPT]]に利用するポート番号を暗号化しないため,正常にアドレスを変換できる。
使えるブロードバンド・ルーターに制約がなく,無線LANアクセス・サービスなどでも利用できる。
 
NATトラバーサル対応のVPNクライアント・ソフトは,イスラエルのチェック・ポイント・ソフトウェア・テクノロジーズなどが出荷済み。
ただし,ほとんどのソフトは同一メーカーのVPN機器としか接続を確認できていない。
NATトラバーサルは現時点では標準化されていないため,各社独自で実装している。
 
NAT越えの問題を解決するには,このほかに暗号化パケットのパススルー対応ブロードバンド・ルーターを導入する方法がある。
&color(red){パススルーとは,IPsecなどで暗号化したパケットを,NAPTをかけずに素通りさせる機能};。
ブロードバンド・ルーターは,受信した暗号化パケットを特定のプライベート・アドレスに転送する。
しかし,ブロードバンド・ルーターの配下にある1台のクライアントしかVPNが使えない制約が残る。

[[NAT traversal - Wikipedia>http://ja.wikipedia.org/wiki/NAT_traversal]]
>NAT traversal(NAT通過)は、[[TCP/IP]]ネットワークにおいて[[NAT]]機器を用いた上で、複数ホスト間のネットワーク接続を確立する際に生じる問題を解決するために設計されたアルゴリズムである。
 
例えば、P2PやVoIPなどのホスト間通信を行うアプリケーションが、相手側のNAT機器を用いたプライベートネットワークに属するホストを直接指定できない、すなわち、NATを通過できないといった問題がある。
通常は、IPsecVPNクライアントが[[ESP]]パケットにNATの通過をさせるためにNAT-Tが用いられる。
 
NAT traversal技術には多くの種類がある。
しかし、NATの機能が標準化されていない為に、全ての場合において動作するNAT traversal技術は存在しない。
多くのNAT traversal技術は、グローバルIPアドレスを持つパブリックサーバを必要とする。
TURNなどは、サーバがすべてのデータを中継する方法であり、帯域コストを増やし、遅延を増加させることにより、VoIPアプリケーションに弊害をもたらす。
一方、STUNなどは、コネクションを確立するときにのみ、サーバを使用する方法である。
 
NATの振舞いに基づく多くの技術は、端末間の透過性を損ない、企業におけるセキュリティポリシー(Enterprise Security Policies)を保ち難くする。
企業のセキュリティ管理者は、セキュリティポリシーを守ることができるように、NATでパケットの検閲を行いながらNAT traversalを可能にするような、NATとファイアウォールの両者が共存する技術を選ぶ。
この点から、最も将来性のあるIETFの標準は、Realm-Specific IP (RSIP)とMiddlebox Communications (MIDCOM)だといえる。
Universal Plug and Play (UPnP)は、小型ゲートウェイの製造業者によって幅広くサポートされているので、家庭やSOHOに容易に導入することができる。
その一方で、最も古いNAT制御のためのプロトコルである[[SOCKS]]は、今も有効であり幅広く利用可能である。

>''NAT traversalとIPsec''
[[IPsec]]が、[[NAT]]を通過し正常に機能するためには、以下が[[ファイアウォール]]上で許可される必要がある。
- Internet Key Exchange ([[IKE]]) - User Datagram Protocol ([[UDP]]) port 500
- Encapsulating Security Payload ([[ESP]]) - Internet Protocol ([[IP]]) 50
- IPsec NAT-T - [[UDP]] port 4500
多くの家庭用ルータでは、IPsecパススルーを有効とすることによりこれらが実現される。

[[Part3 演習---使っているとよく出合うトラブル,その原因と対策を明らかにする - IPsecの仕組み:ITpro>http://itpro.nikkeibp.co.jp/article/lecture/20070424/269259/?P=2]]
** 例題2 NAT越え問題 [#f75f63f5]
 会社や自宅のLANとインターネットをつなぐために,その境界にブロードバンド・ルーターを置くことは多い。LAN側のパソコンに割り当てたプライベートIPアドレスと,インターネットで通用するグローバルIPアドレスを相互に変換して,LAN側のパソコンがインターネットへアクセスできるようにするためだ。

 しかし,ブロードバンド・ルーターが備えるアドレス変換機能(NAT)は,IPsecパケットをうまく扱えない。この結果,IPsecパケットがブロードバンド・ルーターのところで止まってしまい,IPsecゲートウエイ同士の通信が途絶えてしまう。

*** パケットにポート番号がない [#vb3ab013]
 ここで問題になるアドレス変換機能とは,IPマスカレードのことである。IPマスカレードが扱う対象は,TCPまたはUDPのパケットである。ところが,IPsecの通信用トンネルを流れるパケットは,TCPでもUDPでもない。ESPというIPsec専用のプロトコルである。ここに問題の原因がある。

 送信側のブロードバンド・ルーターは,LAN側から受け取ったパケットの送信元IPアドレスと同時に,送信元のポート番号を書き換えて,インターネットに転送する。同時に,書き換えた新旧の送信元ポート番号とIPアドレスの対応を覚えておく。インターネットを介して通信している相手の端末からパケットが返ってきたときには,IPアドレスとポート番号を元の値に書き換えて,LANにつながった端末に受信パケットを転送する。

 ところが,IPsecの通信用トンネルを通るパケットはESPを使うので,ポート番号が書かれていない。したがって,ブロードバンド・ルーターがポート番号部分を読み出してLAN側に転送できない。

CENTER:&ref(zu3.jpg);
>●IPsecパケットはブロードバンド・ルーターを越えられない
ブロードバンド・ルーターのIPマスカレード機能はTCPかUDPを使うのが前提。
どちらでもないIPsecパケットは処理できない。

 パケット中でポート番号が書かれた位置だけを頼りに,ブロードバンド・ルーターがIPsecのパケットを読み取って勝手に書き換えて転送しても,受信側のIPsecゲートウエイは,改ざんされたとみなしてパケットを捨ててしまうだけである。

 問題はまだある。制御用トンネルを通るパケットもIPマスカレードを越えられないのだ。制御用トンネルの通信に使うISAKMPは,UDPを使う。しかし,ISAKMPパケットはあて先と送信元の両方を500番ポートにすることが決まっている。IPマスカレードによって,UDPのポート番号が書き換わると,ゲートウエイが正しく認識できなくなってしまうのだ。

*** 対応ルーターを使うのが一案 [#y8a68db2]

 このような問題に対する対策は二つある。ブロードバンド・ルーターにIPsecのパケットを特別扱いさせる方法と,IPsecゲートウエイの機能を拡張してIPマスカレードを越えられるパケットを作ってやりとりする方法だ。

 では,ルーターで対応させる方法から見ていこう。これは,最近のブロードバンド・ルーターのカタログに「VPNパススルー(IPsec)」と書かれている機能である。

 この機能を備えているブロードバンド・ルーターは,中継するパケットにIPsecのパケットがないかを調べる。そして,IPsecパケットを見つけたら,そのパケットを特別に扱うようにする。

 もう少し具体的に確認しておこう。ブロードバンド・ルーターは自身のLAN側インタフェースから流れ込むパケットにIPsecパケットがないかを常に監視している。監視するのは簡単で,IPヘッダーに書かれたプロトコル番号やポート番号を見るだけだ。

 このとき,LAN側からあて先と送信元のUDPポート番号が500になっているパケットを見つけると,それはIPsecの制御用トンネルの確立要求パケットだと判断して,VPNパスルーの処理に入る。

 そして,このパケットの送信元ポート番号を変えずにインターネットに転送するとともに,LAN側の送信元IPアドレスを記憶しておくのである。この送信元IPアドレスがIPsecゲートウエイのIPアドレスになる。

 そのあとは,通信用トンネルを通るIPsecパケットをインターネットから受け取ると,ルーターは覚えていたIPアドレスあてにパケットを転送するようになる(図4a)。通信用トンネルを通るパケットは,IPヘッダーのプロトコル番号で判別できるから問題ない。これで,IPsecのパケットもルーターが中継できるようになる。

CENTER:&ref(zu4.jpg);
>●IPsecのNAT越え対策
ルーターで対応する方法と,IPsec製品で対応する方法の2種類がある。
IPsec製品で対応する方が制限は少ない。

*** UDPヘッダーを付けてだます手も [#i61be676]
 IPsecゲートウエイ側で対応する解決策は,「NATトラバーサル・UDPエンカプセレーション」と呼ばれる。比較的新しい技術だが,最近では多くのIPsec製品が対応している。こちらは,ESPパケットをUDPパケットに見せかけてブロードバンド・ルーターをだますようなやり方だ。

 NATトラバーサルを使うIPsecゲートウエイは,まずNATトラバーサルが必要かどうかを判定することになっている。そのためにIPsecゲートウエイは,最初に制御用トンネルの確立要求を受け取ったときに,そのパケットの送信元UDPポート番号を調べる。500番以外の番号に書き換わっていたら,途中にブロードバンド・ルーターがあり,IPマスカレードによってポート番号が書き換えられたと判断するのだ。

 そして,このことを反対側のIPsecゲートウエイにも伝える。あとは,通信用トンネルでやりとりするパケットのIPヘッダーとESPヘッダーの間にUDPヘッダーを挿入し,IPヘッダーのプロトコル番号を記述する領域にUDPを表す17番を指定する(図4b)。

 こうすれば,ブロードバンド・ルーターにはIPsecのパケットもUDPパケットに見えるので,普通にパケットが転送される。送信側ゲートウエイがUDPヘッダーを付加し,受信側で取り外すだけである。

 このNATトラバーサルは,標準化作業が進行中の規格である。今販売されている対応機器は,標準化を先取りしたものである。しかし,メーカー間の違いは,付加するUDPヘッダーに書き込むポート番号くらいで,設定を少し変えれば,ほとんどの製品の間で相互に通信できる。

CENTER:&ref(zu1.gif);
>http://itpro.nikkeibp.co.jp/members/NIT/ITARTICLE/20020605/1/
●NATやNAPTを利用する環境では用途によって通信できなくなる
インスタント・メッセージやネットワーク・ゲームなど,リアルタイム通信系のアプリケーションではNAT/NAPT(NAPTはいわゆるIPマスカレード)を通過させられない場合がある。
また,IPSecクライアント・ソフトを使ったVPNトラフィックも,NAPTを通れない。NATトラバーサルはこうした問題点の解決策。

** リンク [#s2ac9bab]
[[NAT]]
[[VPNパススルー]]
[[ESP]]
[[SOCKS]]

IPsec - NATの問題
http://www.infraexpert.com/study/ipsec14.html
IPsec - NAT Traversal
http://www.infraexpert.com/study/ipsec15.html

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS