NAT とは、IP アドレス空間において、グローバルアドレス空間とプライベー トアドレス空間を接続するための技術である。NAT の機能をもつユニットを 「NAT箱」「NAT box」と呼ぶ。
+-------+ -----------------+ | | +------------------- + | | + Global Address +----------|NAT box|-----------+ Private Address Space + | | + Space -----------------+ | | +------------------- +-------+
プライベート空間からグローバル空間へ投げられるパケットは、始点アド レスとしてプライベートアドレスを持つが、NAT 箱は自らが持つ変換テーブル にしたがってそのパケットの始点アドレスをグローバルアドレスに変換して、 グローバル空間へ中継する。反対に、グローバル空間からプライベート空間へ のパケットでは終点アドレスに対して 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 で処理