• プライベートIPアドレスを使うコンピュータがインターネットと通信するために使う
  • パケットのIPアドレスをプライベートからグローバルへ変換・逆変換する
  • 変換する方式は大きく,Basic NATとNAPT(IPマスカレード)の2種類がある
写真3●アドレス変換機能はブロードバンド・ルーターやルーター型ADSLモデムの必須機能に

 アドレス変換はその名の通り,IPパケットのアドレス情報を変換する技術である。身近なところではブロードバンド・ルーターやルーター・タイプのADSLモデム(写真3[拡大表示])が備えている。

 こうした機能が必要なのは,家庭内ネットをはじめ多くのLANでは,インターネットでは使えないプライベートIPアドレス注7)で通信しているケースが多いから。インターネットで使うグローバルIPアドレスは数に限りがあり,LANにつながるパソコンすべてに割り当ててもらえない。ADSLで常時接続する場合でも,割り当てられるグローバルIPアドレスは一つだけだ。そうなると,LANではしかたなくプライベートIPアドレスを使うことになる。

注7)プライベートIPアドレス 閉じたネットワーク内で使われるために用意されたIPアドレス。10.0.0.0~10.255. 255.255,172.16.0.0~172.31.255.255,192.168.0.0~192.168.255.255の三つの範囲がプライベートIPアドレスとして使うように予約されている。

 プライベートIPアドレスのままではインターネットと通信できない。そこで,LAN内のパソコンから発信されたパケットの送信元IPアドレスをグローバルIPに書き換えてから送り出すアドレス変換機能が必要になる。逆に,インターネットから受け取ったパケットのあて先IPアドレスも受信側のパソコンのプライベートIPに書き換えてLAN内に送る。アドレス変換を経ることで,通信が成立するのである。

IPアドレス変換は2種類

図3●アドレス変換にはBasic NATとIPマスカレード(NAPT)の2種類がある
アドレス変換は主にインターネット側の通信用に割り当てられた少数のグローバルIPアドレスをLAN側の複数のコンピュータで共有して使うために,IPパケットのアドレス情報を書き換える技術。変換方法は大きく分けて「Basic NAT」と「IPマスカレード」(NAPT)の2種類がある。

 アドレス変換には大きく2種類の技術がある(図3[拡大表示])。それぞれBasic NAT(ベーシック・ナット)とNAPT(ナプト)と呼ばれており,RFC2663ではこの二つを総称してNAT(ナット)注8)と呼んでいる。ただNAPTはIPマスカレードという通称の方が通りがよい注9)

注8)総称してNAT NATはnetwork address translationの略。NAPTはnetwork address port translationの略。IPマスカレードはもともと,RFCの提案より前にNAPTを実装したLinux向けアドレス変換ソフトの名前で,事実上NAPTの代名詞になっている。
注9)通りがよい NAPTはIPマスカレードのほか,エンハンスドNAT,NAT+,NATeといった名前で呼ばれることがある。

 Basic NATはプライベートIPアドレスとグローバルIPアドレスを1対1で変換する。ルーターはLANから送り出されたパケットのIPヘッダーの送信元アドレスをルーターが蓄えてあるグローバルIPアドレスと付け替え,変換テーブルに書き込んでおく。返信パケットが戻ってきたら変換テーブルに従ってあて先IPアドレスをプライベートに戻す。

 Basic NATはもともと数十個のグローバルIPアドレスを数十台のコンピュータで共用する目的で作られた技術。すべてのコンピュータが常にインターネットを利用しているわけではないので,こうしたしくみでも問題なかった。しかし,グローバルIPアドレスが一つしか割り当てられないADSLでBasic NATを使っても,LAN内のパソコンは一度に1台しか通信できなくなる。これは不便だ。

ポート番号を変換に使うのがミソ

 この点を改良したのがIPマスカレードである。IPマスカレードは,LAN内の複数のパソコンで一つのグローバルIPアドレスを共用する機能である。

 IPマスカレードの技術的なポイントは,インターネット側から受信したパケットのあて先をどうやって識別するかにある。Basic NATと異なり,グローバルとプライベートのIPアドレスが1対1の関係にならないからIPアドレスを単純に変換できない。そこでIPマスカレードでは,アプリケーションを識別するのに使うポート番号を流用する。

 TCP/IP通信では,IPアドレスと同様,ポート番号も送信元とあて先を指定する。このあて先ポート番号で通信相手のコンピュータ内で動くアプリケーションを特定するのである。受信側から見ると,受け取ったパケットのあて先ポート番号を見て,どのアプリケーションにデータを渡すのかを識別し,その返信は,送信元に書かれたポート番号に当てて送る。つまり一つのセッション中はIPアドレスとポート番号は1対1の対応関係にある。

 IPマスカレードはこの関係を利用して変換を行う。パケット送出時に送信元ポート番号とプライベートIPアドレスの対応を記録しておき,返信パケットのあて先ポート番号から元のIPアドレスを復元するのである。

NAT越えの技術がいろいろ

 しかし,アドレス変換には一部のアプリケーションがそのままでは動作しないという問題がある。

 まずインターネット側から始まる通信に対処できない。NAT,IPマスカレードのどちらもアドレスを変換するテーブルをLAN側のコンピュータが通信を始めるときに作る。いきなりインターネットからのパケットを受け取るとアドレスを変換できないのだ。

 パケットのデータ領域に書き込まれた送信元のIPアドレスを利用するアプリケーションにも使えない。こうしたアプリケーションをNAT環境で使うと,データ領域に本来使われるはずがないプライベートIPアドレスが書き込まれてしまうからだ。

 前者の問題に対応するのが静的NATや静的IPマスカレードと呼ばれる技術である。これらはいずれも変換テーブルをあらかじめ作っておき,インターネットから受け取ったパケットをどこに渡すか決めておく。一方,最近のブロードバンド・ルーターが採用し始めたUPnP,GapNAT(ギャップナット)注10)は後者の問題に対応するために作られた技術である。

注10)UPnP,GapNAT UPnPはUniversal Plug and Playの略でアプリケーション側からブロードバンド・ルーターを制御する技術。GapNATはGlobal Adress Proxy with NATの略で
住友電気工業やNTT-MEのルーター型ADSLモデムが搭載している。