IPマスカレードとNATの違いを教えてください。
NATとは,特定のアドレスをほかのアドレスに動的に割り振るための機能です。これによって,一つのグローバルアドレスを,複数のマシンのローカルアドレスから使うことができるようになります。
ここでいうグローバルアドレスとは,InterNICによって管理されている,インターネット上で一意に存在するIPアドレスのことです。これに対してローカルアドレスは,RFCで定義されている,閉じたネットワークで自由に利用していいIPアドレスで,各ネットワークで同時に存在していてもいいものです。
ただし,ローカルアドレスをそのままインターネット上に流しても,当然重複するためきちんと動作しません。しかし,グローバルアドレスはすべてのコンピュータに割り振れるほど存在するわけではありません。そこで,ローカルアドレスをグローバルアドレスに変換するための機能が必要になったのです。
従来は,外部のネットワークにつながるグローバルアドレスを使いたい場合には,各マシンに固定的にグローバルアドレスを割り振る必要があり,そのためマシンの台数分のグローバルアドレスが必要になっていました。しかしNATを使うことで,例えばGというグローバルアドレスを,Xというマシンが使い,その後でYというマシンが使うなどという,いわばアドレスの使い回しのようなことができるようになるのです。ただし,これはアドレス対アドレスで変換するため,グローバルアドレスを有効に利用することは可能ですが,一つのアドレスを同時に二つのマシンが使うことはできません。
それに対してIPマスカレードは,一つのグローバルアドレスを,アドレスとポートの組で変換するものです。これにより,複数のマシンから一つのアドレスをポートレベルで使い分けることができるわけです。
マシンXのアドレスAポートa1から出たデータを,IPマスカレードによってグローバルアドレスGポートg1というデータに変換して送り出し,グローバルアドレスGポートg1宛のデータが戻ってきたら,再び変換してマシンXのアドレスAポートa1に返すといった動作が行えます。これによって複数のマシンから,一つのグローバルアドレスを同時に利用することができるようになったわけです。
IPマスカレードの問題点は,自分のアドレスから出たパケットの返事が外から返ってくる場合にはそれを返すローカルアドレスが分かりますが,外から直接発信されてきたパケットはどのマシンに渡していいのか分からないということです。また,ポートで変換するため,ポートの概念がないICMPなどは利用できません。つまり,pingやtracerouteが使えないということです。なお,最近のルーターでは,特別な処理を加えることで,ICMPでもpingやtracerouteだけは使えるようにしているものもあります
(恣岡 悄)
図 NATとIPマスカレード