プライベートアドレスでもインターネットへアクセスしたい

プライベートアドレスのままでは、インターネット宛ての通信はできません。プライベートアドレスでもインターネット宛ての行きは大丈夫ですが、その返事が返ってこられなくなります。

プライベートアドレスでダメだからといって、社内ネットワークや家庭内ネットワークのPCにグローバルアドレスを設定することは現実的ではありません。そこで、プライベートアドレスのままでもインターネットへアクセスできるようにするために、NAT(Network Address Translation)とPAT(Port Address Translation)が必要です。

NATの概要

NATは、さまざまなアドレス変換を行うことができるのですが、最も一般的なプライベートネットワークからインターネット宛ての通信でのNATのアドレス変換の動作は以下のように行います。

  1. プライベートネットワーク(内部ネットワーク)からインターネット(外部ネットワーク)宛てのIPパケットの送信元IPアドレスをプライベートアドレスからグローバルアドレスに変換して、インターネットへ転送する
  2. 変換したアドレス情報をNATテーブルに保存
  3. インターネットからクローズドネットワーク宛てのIPパケットでNATテーブルに一致するグローバルアドレスの宛先IPアドレスをプライベートアドレスに変換してプライベートネットワークに転送する

やはり、通信は双方向であるということをしっかりと意識してください。上記の1の動作だけではなく、戻ってくるIPパケットの宛先を変換するという3.の動作も行ってはじめて、プライベートアドレスのホストからのインターネットの通信ができるようになります。

図 NATの動作
NATはプライベートアドレスとグローバルアドレスの変換だけのためのものではありません。プライベートアドレスからプライベートアドレスへの変換も、グローバルアドレスからグローバルアドレスの変換も可能です。
プライベートネットワークはCisco機器のNATの設定においては「内部ネットワーク」と呼びます。また、インターネットは「外部ネットワーク」と呼びます。Cisco機器のNATの設定では、NATテーブルの変換前のアドレスを「内部ローカルアドレス」、変換後のアドレスを「内部グローバルアドレス」と呼びます。
変換後のアドレスは、図のようなルータのIPアドレスだけではなく、特定のアドレス範囲を利用することもできます。NAT変換用のアドレスをNATプールと呼びます。

PATの概要

単純なNATのアドレス変換は、変換前のアドレス(たいていプライベートアドレス)と変換後のアドレス(たいていグローバルアドレス)が1対1の対応となります。グローバルアドレスは枯渇の心配がされていて、あまりたくさん利用できないことがほとんどです。プライベートアドレスのホストがたくさん存在すれば、その数分だけグローバルアドレスが必要になってしまいます。

そこで、変換前のアドレスと変換後のアドレスを1対1に対応させる単純なNATではなく、複数の変換前のアドレスを1つのアドレスに変換するPAT(Port Address Translation)の変換を行います。変換前のアドレスはたいていプライベートアドレスで、変換後のアドレスはたいていグローバルアドレスです。PATは1つのグローバルアドレスを複数のプライベーアドレスを持つホストで共用するためのアドレス変換と言い換えることができます。

1つのグローバルアドレスを複数のプライベートアドレスに対応づけなければいけないので、NATテーブルに保持するアドレス変換の情報にTCP/UDPのポート番号も追加します。ポート番号を見て、複数のプライベートアドレスの区別をつけるようにしています。

図 PATの動作の概要

図では戻りの部分は省略していますが、通常のNATの動作と同様に戻りの変換を行います。「通信は双方向」ということを忘れないでください。

PATはNAPT(Network Address Port Translation)やIPマスカレードなどとも呼びます。

TCP/UDPを利用していない通信の場合は、他の情報をNATテーブルに保持して複数のプライベートアドレスの区別をつけます。たとえば、PingはICMPでTCP/UDPは利用していません。Pingの場合は、ICMPエコー要求/エコー応答のシーケンス番号をNATテーブルに保持します。

NATという言葉でPATの動作まで含んでいることもよくあります。