NAT とは、IP アドレス空間において、グローバルアドレス空間とプライベー トアドレス空間を接続するための技術である。NAT の機能をもつユニットを 「NAT箱」「NAT box」と呼ぶ。
+-------+
-----------------+ | | +-------------------
+ | | +
Global Address +----------|NAT box|-----------+ Private Address
Space + | | + Space
-----------------+ | | +-------------------
+-------+
プライベート空間からグローバル空間へ投げられるパケットは、始点アド レスとしてプライベートアドレスを持つが、NAT 箱は自らが持つ変換テーブル にしたがってそのパケットの始点アドレスをグローバルアドレスに変換して、 グローバル空間へ中継する。反対に、グローバル空間からプライベート空間へ のパケットでは終点アドレスに対して NAT 箱が変換を施す。
+-------+
{Src=GGG, Dst=XXX}<----| |<----{Src=PPP, Dst=XXX}
| |
-----------------+ | | +-------------------
+ | | +
Global Address +----------|NAT box|-----------+ Private Address
Space + | | + Space
-----------------+ | | +-------------------
| |
+-------+
+-------+
{Src=XXX, Dst=GGG}---->| |---->{Src=XXX, Dst=PPP}
| |
-----------------+ | | +-------------------
+ | | +
Global Address +----------|NAT box|-----------+ Private Address
Space + | | + Space
-----------------+ | | +-------------------
| |
+-------+
NAT 箱は単に IP ヘッダ内の始点/終点アドレスを書き換えていれば良い だけではない。その他にも、
などが必要とされる。ただし、以上のうちチェックサムの再計算は必須だ が、FTP の PORT/PASV コマンドに関しては、FTP を使わないと割り切ってし まえば不要だし、ICMP/SNMP に関しては、RFC1631 ではその必要性を疑問視し ている。ICMP/SNMP に関しては、これからの議論を待ちたい。
DNS に関しては特別の配慮が必要である。おそらく、プライベート空間に 置いた DNS サーバからグローバル空間への DNS サービスを提供するのは良く ない。DNS サーバは、プライベート空間に置いたプライベート空間用と、グロー バル空間に置いて、NAT 箱の変換テーブルをあらかじめ反映させたグローバル 空間用の二つに分け、プライベート空間内への情報の提供と、プライベート空 間からグローバル空間への問い合わせには前者を、グローバル空間からプライ ベート空間への問い合わせには後者を充てるというのが理想的である。
Global Address Space Private Address Space
+--+ | |
Internet--|RT|----+ |
+--+ | +----+ | +----+
+--|DNS1| +-------+ +--|DNS2|
| +----+ | | | +----+
+-----------|NAT box|---------+
| | | | +----+
| +-------+ +--|HOST|
| | +----+
| |
・Internet からの問い合わせは DNS1 で処理
・HOST からの問い合わせは DNS2 で処理