NATでは同時に複数が利用できない

 NATを使ってIPアドレスを書き換えることで,IPアドレス体系の違うネットワーク同士でも通信できるようになった。しかし,NATには限界がある。LAN側にある複数のパソコンから同時にインターネットへアクセスできないのである。例えば,パソコンAがNATを使ってインターネットにアクセスしている最中は,ほかのパソコン(例えばB)がインターネットへ出て行けない。

図2 NATはグローバルIPアドレスを独り占め,IPマスカレードは共有する
ルーターにグローバルIPアドレスが1個しか割り当てられないと,NATでは同時に1台しかインターネットにアクセスできない。この問題を解決するのがIPマスカレードである。
 これは,ルーターがNATを処理するときに記憶する対応表がAとXの1対1の表であるためで,1個のグローバルIPアドレスをLAN側の1台のパソコンが占有してしまうからである図2[拡大表示])。

 NATを使って複数のパソコンからインターネットへアクセスさせるには,LAN側にあるパソコンの数だけグローバルIPアドレスが必要になる。しかし,ダイヤルアップ接続や低価格なADSL接続サービスでは,プロバイダからグローバルIPアドレスが1個しか割り当ててもらえない。

IPアドレス以外の情報を使う

 この制限をなくし,「一つのグローバルIPアドレスを複数のパソコンで共有できるようにしよう」という考えのもとで考案されたのが,「IPマスカレード」というしくみである。キモはIPアドレスだけでなく,ポート番号という別の情報も書き換えて,書き換え前後の情報を記録することにある。

 ポート番号とは,IPの上位レイヤーに当たるTCP/UDPのヘッダーに記述される情報で,コンピュータ上で動作するアプリケーションやサーバー・ソフトを特定するための番号である。

 もう少し具体的に言うと,送受信されるIPパケットのデータ部分には,TCP/UDPパケットがすっぽりと収まっている。ポート番号は,このTCP/UDPパケットのヘッダー中に書かれ,通信に使用するアプリケーションが起動するたびに,ほかのアプリケーションと重複しない番号が割り振られる。例えば,1台のパソコン上でWebブラウザのウインドウを何個も開くと,それぞれのウインドウに対して別々のポート番号が割り振られる。

 なお,TCP/UDPヘッダー中に書かれるポート番号もIPアドレスと同じように,送信元とあて先ポート番号がある。Webアクセスの場合,あて先ポート番号は80番に固定されるが,送信元のポート番号は1024~65535の任意の数値が割り当てられる。

ポート番号も書き換わる

図3 ポート番号も書き換えるIPマスカレード
IPアドレスだけでなく,ポート番号も書き換えて,その対応をルーターが記録する
 ポート番号も見て変換するという点を除けば,IPマスカレードのしくみもNATとそれほど違わない(図3[拡大表示])。

 まずは,送受信パケットの内容がどのように書き換わっていくかを追いかけよう。パソコンAから送信されたIPパケットは,送信元IPアドレスはLAN側パソコンのA,あて先IPアドレスはインターネットのサーバーXで,ポート番号はあて先が100で,送信元が4000である。

 このパケットがルーターに届くと,ルーターがこれらの情報を書き換える。変わるのは,送信元IPアドレスと送信元ポート番号だ。具体的には,送信元IPアドレスはLAN側パソコンのAからルーターのGに,送信元ポート番号は4000から5000に変わる

 そして,この書き換えられたパケットがインターネットに出て行き,あて先のサーバーXに届く。サーバーXはブルーターGのポート番号5000から受信したと思うので,そこに向けて返信パケットを送ることになる。つまり返信パケットのあて先IPアドレスはG,送信元IPアドレスはX,あて先ポート番号は5000,送信元ポート番号は100になる。

 すると,この返信パケットはインターネットを介してブロードバンド・ルーターに届くので,ルーターがあて先IPアドレスとあて先ポート番号を元に戻す。つまりIPアドレスがAでポート番号が4000のあて先になり,これがLAN側に転送される。

ルーターはポート番号で区別

 IPマスカレードによるパケットの流れは以上のようになるが,アドレス変換の主役であるルーター内部ではどのように処理しているのだろうか。先ほどの流れを今度はルーター内部の処理から見てみよう(図3[拡大表示]参照)。

 ルーターはパソコンAからやってきたパケットのあて先IPアドレスをAからGに書き換え,その前後の関係を自身のメモリーに記録する。続いてポート番号も変換するが,この変換記録も先のIPアドレスの変換記録に追加して書き込む(1),(2)。これで図3[拡大表示]の中央部にある対応表ができあがる。

 そして,サーバーXから返ってきたパケットを受信したルーターは,あて先ポート番号を参照する(3)。すると,あて先ポート番号5000番は,LAN側のIPアドレスがAでポート番号が4000あてに転送すればよいことがわかる。そこで,ルーターはあて先IPアドレスとポート番号をこれに従って書き換えて(4),LAN側に転送する。

 つまり,IPマスカレードでルーターが記録する対応表は,IPアドレスだけでなくポート番号も組み合わさったものになる。

 こうすれば,グローバルIPアドレスが1個しか割り当てられなくても,6万個以上のポート番号を使ってLAN側のパソコンを区別できる。そして同時に多数のパソコンがインターネットへアクセスできる。

IPマスカレードは安全か?

 IPマスカレードをセキュリティ関係の機能と考えている人も多い。しかし,IPマスカレード自体はセキュリティのための機能ではなく,ネットワーク同士をつなぐ機能だ。だがセキュリティの向上にも効果を発揮する。

 ルーターは返信パケットのあて先ポート番号と記録している変換テーブルを照合して,転送すべきパソコンを特定する。逆に考えれば,ルーターが記録しているテーブル中にポート番号が書かれていなければ,転送先のパソコンがわからない。こうした場合,ルーターはインターネットからの受信パケットを破棄する。

 このため,IPマスカレードが動いているルーターは,外部からの不正なパケットをLAN側に通さない。つまり,外部からのポート・スキャンや不正アクセスを遮断することになる。

 また,LAN側のパソコンのIPアドレスを外部に漏らさないので,クラッカはLAN内部のパソコンを特定した攻撃ができない。

 ただ,正規の返信パケットを装った不正なパケットをルーターが見分けることはできないので,決して万全なセキュリティ対策にはならないのも事実。これ以上にセキュリティを強化するには,ファイアウォールなどの機能が必要である。