攻略編に入る前に,アドレス変換の基本であるNATとIPマスカレードのしくみをじっくりと確認しておこう。NATとIPマスカレードを同一視して語られることもあるが,技術的に見ると少し違う。この準備編では,アドレス変換のカラクリを解き明かし,NATとIPマスカレードの違いを確認していこう。

 アドレス変換は,IPアドレスの体系が違うネットワーク同士をつなぐ。そのカラクリは実は単純で,アドレス変換を処理するルーターが送受信パケットのIPアドレスなどを機械的に書き換えるだけである。パケット中でIPアドレスの情報があるのはヘッダー部分だから,ネットワークの境目にあるルーターが,この部分を書き換える。

 ただ,ルーターが単にアドレスを書き換えているだけだと,返信されてくるパケットを正しい送信元に転送できない。そこで,ルーターは書き換えた前後のアドレスの対応関係を記録する。この記録する内容の違いが,NATとIPマスカレードの違いであり,それによって使い勝手も異なってくる。

IPアドレスを書き換えて,覚える

 LAN側にプライベートIPアドレスAを持つパソコンがあり,ここからインターネット上のグローバルIPアドレスXを持つサーバーと通信する場合を考えてみよう(図1)。インターネットにアクセスするには,パソコンAにも全世界でユニークなグローバルIPアドレスが必要だが,グローバルIPアドレスはルーター(アドレスはG)にしか割り振られていない。

図1●アドレス変換の基本動作<br>LAN側パソコンから送出されたパケットのIPヘッダーにあるプライベートIPアドレスを,ルーターが持つグローバルIPアドレスに書き換える。これがNATだ。
図1●アドレス変換の基本動作
LAN側パソコンから送出されたパケットのIPヘッダーにあるプライベートIPアドレスを,ルーターが持つグローバルIPアドレスに書き換える。これがNATだ。
[画像のクリックで拡大表示]

 このとき,パソコンAからXに向けた送信パケットのIPへッダーには,送信元がA,あて先がXと記される。ルーターは,このパケットが通過する際に,ヘッダーから送信元IPアドレス(A)を読み出し,これを自分自身に割り振られているグローバルIPアドレス(G)に書き換える((1))。さらに,ルーターは送信元アドレスをAからGに書き換えたことを記録しておく((2))。

 これでIPヘッダーの書き換えは完了し,パケットはインターネット側に転送される。インターネットへ出て行くパケットからは,Aのアドレスはなくなり,あたかもブロードバンド・ルーターがXに向けて送信したかのように見える。

 これを受信したサーバーXは送信元はルーターGだと思うので,返信パケットをGあてに返す。

 このままでは,ブロードバンド・ルーターで通信が終わる。そこでブロードバンド・ルーターは,内部に覚えているアドレス書き換えの対応表を参照して,受信パケットのあて先IPアドレスを自分あてからAあてに書き換えて((3)),LAN側に転送する。これで,送信パケットはインターネット上の正しい相手に届き,返信パケットはLAN側の正しい送信元に戻ってくる。

 Part1のイントロ編で「アドレス変換を処理するルーターはクロークのようなものだ」と例えたが,そのココロがここまで読み進むと実感できるだろう。LAN側のIPアドレス(衣服)を脱がせて,インターネット向けのIPアドレスに着替えさせ,脱いだ服を預かっておく。そして戻ってきた(返信パケット)ときに,LAN向けのアドレスに再度着替えさせるのだ。

 実は,この一連のIPアドレス変換のしくみがNATである。

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

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

 これは,ルーターがNATを処理するときに記憶する対応表がAとXの1対1の表であるためで,1個のグローバルIPアドレスをLAN側の1台のパソコンが占有してしまうからである図2)。

図2●NATはグローバルIPアドレスを独り占め,IPマスカレードは共有する<br>ルーターにグローバルIPアドレスが1個しか割り当てられないと,NATでは同時に1台しかインターネットにアクセスできない。この問題を解決するのがIPマスカレードである。
図2●NATはグローバルIPアドレスを独り占め,IPマスカレードは共有する
ルーターにグローバルIPアドレスが1個しか割り当てられないと,NATでは同時に1台しかインターネットにアクセスできない。この問題を解決するのがIPマスカレードである。
[画像のクリックで拡大表示]

 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の任意の数値が割り当てられる。