4.1. NATの利用目的と用語解説

簡単に言えば、 NAT は何台かのホストでひとつの IPアドレスの共用を可能にするひとつの手段だ。例えば今ここに、5 〜 10 台のクライアントから成るローカルネットワークがあるとしよう。クライアント全てのデフォルトゲートウェイが 1 台の NAT サーバを指すようにする。普通ならばパケットはゲートウェイマシンによって単純にフォワードされるだけだが、 NAT サーバの場合は少し事情が異なる。

NAT サーバは (前にも軽く触れたことだが) パケットの送信元アドレスと宛先アドレスを別のアドレスへと変換する。 NAT サーバは、パケットを受け取ると送信元と宛先のいずれかまたは両方を書き換え、パケットの持つチェックサムを計算しなおす。 NAT を使う時、たいていの場合は SNAT (送信元ネットワークアドレス変換) であることが多い。前記の例で SNAT を使うのは、大概、クライアントにひとつ残らず正真正銘のパブリック IP を与える予算がなかったり、どうしたらそんなことが実施できるか思いつかない場合だ。そうした時、我々はプライベート IP 域からひとつの範囲 (192.168.1.0/24 だとしよう) を選び出して使い、そのネットワークに SNAT を施す。すると SNAT は 192.168.1.0 内の全アドレスを NAT サーバ自身の持つパブリック IP (例えば 217.115.95.34) へと通訳 (translate) する。このやり方をすれば、 5 〜 10 台あるクライアント (その気になればもっともっと) で 1 個の IP アドレスを共用することができるわけだ。

もうひとつ DNAT と呼ばれるものも存在する。これはサーバを立てる時などに大活躍する。一番の恩恵は IP スペースの節約に大いに役立つこと、次に、サーバと本物のサーバ群との間に、ほぼ侵入不可能なファイヤーウォールが簡単に実現できること、さらに、物理的に独立した複数台のサーバでひとつの IP を共用できることだ。次のようなわりと小規模な企業のサーバ集合体を考えてみよう。 WEB サーバと FTP サーバは 1 台で運用している。その他に、出先や自宅にいる社員が社内にいる社員といつでも話をできるよう、チャットサービスを提供する物理的に別個のサーバが 1 台ある。 DNAT を介すれば、これら全てのサーバサービスをたったひとつの IP で外部に提供できるのだ。

上記の例は、セパレートポートNAT (PNAT と呼ぶことも多い) のことだという見方もできる。当文書ではセパレートポートNAT にはあまり言及しない。というのも、 netfilter においては、その機能は DNATSNAT の中に取り込まれているからだ。

実は Linux ではふたつの違ったタイプの NAT が使えるようになっている。 Fast-NATNetfilter-NAT だ。 Fast-NAT は Linux カーネル内の IP ルーティングコードとして実装されており、 Netfilter-NAT は、 Linux カーネル内ではあるがその netfilter コードの中にある。この文書は IP ルーティングコードに深入りはしないのでこの辺でやめておくが、参考にひとつふたつ話をしておこう。 Fast-NAT がその名で呼ばれるのは、 Netfilter-NAT コードよりも格段に速いからだ。 Fast-NAT はコネクション追跡を行わない。そこが Fast-NAT の利点でもあり欠点でもある。コネクション追跡は多くの CPU パワーを必要とし、それが故に処理速度が遅い。これが Fast-NATNetfilter-NAT より速い理由だ。先ほど述べたように Fast-NAT の困ったところはコネクション追跡を行わない点で、ネットワーク単位の SNAT がうまく扱えないし、 Netfilter-NAT の得意とする FTP, IRC をはじめとした複雑なプロトコルの NAT もできない。不可能というわけではないのだが、 Netfilter を使ってやるよりも遙かに手間がかかる。

最後に残った単語がひとつある。基本的には SNAT の同義語なのだが、それがマスカレード (Masquerade) という単語だ。 Netfilter においてはマスカレードは SNAT と極めて近い。唯一の違いは、変換後の送信元アドレスを、自動的に、外と接するネットワークインターフェイスの持つデフォルト IP アドレスにするという点だ。