NATトラバーサルという言葉が目につくようになってきた。IPアドレス数に限りがあるIPv4を使う現状のインターネット接続では,NATは不可欠な技術。ただ,一部のアプリケーションや用途では,NATが介在することで,通信できない状況に陥ることがある。IPSecを使うVPNや,Windows Messengerがそうだ。NATトラバーサルは,この「NAT越え」問題の現実解である。ただ,実現手法は1つではない。用途によってまったく違った技術でNAT越えを実現する。

(河井 保博=kawai@nikkeibp.co.jp)

 「Windows Messengerやネットワーク・ゲームができない」,「VPNを実現できない」――。ADSL(非対称ディジタル加入者線)をはじめとするブロードバンド・ネットワークが広がる一方で,こうした問題点が指摘されている。原因は,ADSLモデムなどに搭載されているNAT(ネットワーク・アドレス変換)。プライベート・アドレスをグローバル・アドレスに変換する機能である。一部のアプリケーションや用途について,NATが邪魔をして通信できない状況に陥ってしまう。

 現行のIPv4では,IPアドレスの数が限られるため,多くのブロードバンド接続サービスでは,ユーザーに対して1個だけグローバル・アドレスを割り当てる。例えば複数のマシンを使う場合は,1つのアドレスを共有しなければならない。ISP自身が少ししかグローバル・アドレスを持っていない場合,ユーザーに対してプライベート・アドレスを割り当てるケースもある。このようにアドレス変換が不可欠な環境では,NATの問題は避けられないのが実情だった。

 ところが,最近,こうしたNATの問題点をクリアする技術が登場してきた。「NATトラバーサル」(以下,NAT-T)である。トラバーサルは「全探索」の意味で,NATの向こうにある端末を見つけ出すことを指す。NAT-Tという言葉自体は,すでに以前から使われ,技術開発も進められてきた。そのNAT-Tが,各種製品に実装され,ユーザーに身近になっている。

 例えばWindows XPは,UPnP(ユニバーサル・プラグ・アンド・プレイ)の一部としてNATトラバーサル機能を持つ。ルーターやADSLモデムなども,UPnP対応としてNAT-Tをサポートした機種が登場している。このほか,VPN製品の中にもNAT-Tに対応した製品がある。

 注意したいのは,NAT-Tはある特定の技術仕様を指すわけではないこと。「NATをうまく通すこと」,あるいは「NAT越え」の概念ととらえる方が妥当である。NAT-Tが必要な場面はいくつかあり,それぞれの場面によってNAT-Tを実現する技術,あるいは実現手法が違っているからだ。現状では,NAT-Tを必要とする場面は大きく3つ。(1)端末接続型のVPN(仮想プライベート・ネットワーク),(2)インスタント・メッセージなどのリアルタイム通信系のアプリケーション,(3)モバイルIP――である。

NATでは識別できない

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

 ここでまず,NATの問題点を整理しておこう(図1[拡大表示])。NATには,厳密には単にIPアドレスを変換するだけのNATと,複数端末で1つのIPアドレスを共用する仕組みを持つNAPT(ネットワーク・アドレス・ポート変換)の2種類がある。NAPTはIPマスカレードとも呼ばれる。

 NAPTの場合,IPアドレスの代わりにポート番号を使うことで端末を識別する。端末ごとに異なるポート番号を割り当て,それぞれの端末に設定されているIPアドレス(プライベート・アドレス)との対応表を作成,管理する。端末からインターネットへのトラフィックを受け取ると,送信元アドレスと送信元ポート番号を対応表に基づいて変換するようになっている。

 ただ,VPNではこのポート変換は無意味である。IPSec(IPセキュリティ・プロトコル)では,データを暗号化する。この際,TCP/UDPヘッダーを含めてデータとして扱うため,NAPT装置はIPSecパケットからはポート番号を読み取れない。

 端末が1台しかない場合,あるいはVPN機器間でVPNトンネルを確立する場合は,1対1のアドレス変換だけで済むため問題は起こらない。NAPT装置でもパス・スルー機能を持つ製品を使えば,IPSecも問題なく利用できる。ただ,これは基本的に端末が1台の場合にしか利用できない。複数のIPSecクライアントで1つのグローバル・アドレスを共用しようとすると,パス・スルーでは対応が難しい。

 リアルタイム通信系のアプリケーションやモバイルIPでは,データ・パケット中のIPヘッダー以外の部分にIPアドレスが埋め込まれてしまうことが問題を引き起こす。

 Windows Messengerを例に見てみよう。Windows XPに搭載されているMessengerは,SIP(セッション・イニシエーション・プロトコル)を使って通信相手に接続する。問題は,SIPの接続要求パケットに,接続元を示す情報として端末のプライベート・アドレスが埋め込まれてしまうこと。IPヘッダーはNAT/NAPTによって書き換えられるため,SIP要求パケットは通信相手までは到達する。ところが,相手側からは,要求パケットに記されているあて先(プライベート・アドレス)は見つからない(図1)。

 モバイルIPも,原因はSIPの場合と似ている。モバイルIPは,ノートPCなど携帯端末で,移動先でも通信し続けられるように開発された技術。もともとのネットワークに,端末の移動先を管理するホーム・エージェントを設置。携帯端末は,移動先で取得したIPアドレスをホーム・エージェントに通知する。通信相手は,常にホーム・エージェントに対してデータを送信。ホーム・エージェントは,そのデータを移動先のマシンに転送する。

 モバイルIPパケットでは,通常のIPヘッダーの後ろに,移動先でのアドレスなどを記述したモバイルIPヘッダーが挿入される。NATを経由すると,IPヘッダー内のアドレスとモバイルIPヘッダー内のアドレスに食い違いが生じ,うまく動作しなくなる。


次回(下)へ続く