IPマスカレードって?
前回でNATを使って、プライベートアドレス-グローバルアドレス変換の様子について見てみました。ただ、NATはルータが確保しているグローバルアドレス1つに対して、同時に1台のPCしかインターネットに接続することができないという欠点があります。そこで、1つのグローバルアドレスで同時に複数のPCがインターネットに接続するためにIPマスカレードという方法があります。(NAT+とかNAPTともいうけど、個人的にマスカレードって言う方がかっこよくて好き(^o^)丿)
1対多の対応付けは難しいので、対応付ける要素を増やせばいいわけですね。そこでIPマスカレードではIPヘッダのIPアドレスだけでなく、TCPやUDPヘッダに含まれるポート番号も変換しています。ポート番号については、まだこのメールマガジン上で説明したことはないのですが、また機会を改めて説明していきます。
変換の仕組み
NATのときとほとんど同じネットワーク構成でIPマスカレードの動きをみていきます。ネットワーク環境として次の図を考えます。
ここではルータが利用可能なグローバルアドレスはG1だけとなっています。このネットワークでコンピュータAがインターネット上のWEBサーバに接続するときにどのような変換が行われるかみていきましょう。
まず、コンピュータAはインターネットは自分が存在するネットワークではないので、ルータ(デフォルトゲートウェイ)にデータを送ります。このときのデータの様子が下の図になります。(ルータに向かう青い矢印)
NATと違って、TCPまたはUDPヘッダまで考えます。
まずIPヘッダには送信先IPアドレスにG100、送信元IPアドレスにP1です。続いて、TCP(UDP)ヘッダのポート番号です。ポート番号は簡単にいうと、各コンピュータ上で動作しているプログラムを識別するためのものです。サーバプログラムに対する番号はあらかじめ決められています。WEBサーバの場合だと、80という番号になります。これが送信先ポート番号です。送信元ポート番号には、1024以上のランダムな番号が割り振られます。このときの例では2000としています。
このデータがルータに届くと、ルータでは送信元IPアドレス、ポート番号を変換します。すると、次の図のようになります。この変換したデータがインターネット上のWEBサーバに届きます。(WEBサーバに向かう赤い矢印)
変換すると変換した内容をテーブルに登録しておきます。
IPアドレス:P1
ポート番号:2000
↓
IPアドレス:G1
ポート番号:5000
と変換しましたよ~ということを覚えておくわけですね。これで、データが返ってきたときにもとの送信元にただしく送り返せるようにします。
そして、WEBサーバから返事が返ってきます。このときのデータはさっきと送信先と送信元が入れ替わっているわけですね。つまり、送信先IPアドレスはG1、ポート番号は5000、送信元IPアドレスはG100、 ポート番号は80となっています。(WEBサーバからの赤い矢印)
これがルータに届くとさきほど登録しておいたテーブルを見て、もとの正しい送信元に到達するようにIPアドレス、ポート番号を書き換えます。書き換えると、次のようなデータになります。そうして、ルータから元のコンピュータAにWEBサーバからの返事が届けられて無事にホームページをみることができるようになります。(ルータからの青い矢印)
同時に接続するときは
このようにIPアドレスと一緒にポート番号も変換しているのが、NATとIPマスカレードの大きな違いです。すると、何がうれしくなるかというと、Aがインターネットに接続している間でも同時に他のコンピュータもインターネットに接続することができます。
たとえば、コンピュータBもインターネットに接続するとき、ルータで送信元IPアドレスをP2からG1と書き換えます。ここはコンピュータAの場合と同じです。それに加えて、送信元ポート番号を2100(これは1024以上のランダムな番号)から5100に書き換えてテーブルに登録します。テーブルは次にようになります。
すると、コンピュータAの通信であるのかコンピュータBの通信であるのかということを識別できるようになり、めでたし、めでたしです。
ただ、NATとIPマスカレードを明確に区別しない場合もあります。NATといって、ポート番号まで変換しているケースもあります。Windows2000 Server のNAT機能はIPアドレスだけでなくポート番号も同時に変換しています。
狭い意味でのNATはIPアドレスだけ、広い意味でグローバルアドレスの共有と考えると、IPアドレスとポート番号を変換するというようなイメージになります。










