NAT - IP アドレスを変換する
インターネットの利用が、商用が主目的となっていく過渡期に大きな問題となったのは、「急速に拡大するネットワークでいかに効率よくデータを送り届けるか」と「限られたIP アドレス空間をいかにやりくりするか」の二点でした。
前者は、クラス分割という、必ずしも効率的とはいえない方式を利用していたIPv4 に、クラスの枠を取り払ったCIDR (サイダー: Classless Inter Domain Routing) を導入することで乗り越えました。
後者を解決したのが、NAT(ナット: Network Address Translation ※)です。
※ NAT について説明された最も初期の資料の一つであるRFC1631 では、Network Address Translator とありますが、一般的にNetwork Address Translation と呼ばれることが多いです。
NAT は、ルータやファイアウォール機器に実装され、ネットワークを内部と外部に分割します。
内部ネットワークから外部ネットワークへ向けて送信されるデータは、NAT ルータにより中継されます。
内部ネットワークから外部ネットワークへ送信されるパケットは、NAT ルータによって中継される際に、送信元IP アドレスや送信元TCP/UDP ポート番号が変換されて宛先へ送られます。
外部ネットワークから戻ってきたパケットは、NAT ルータにより宛先IP アドレスや宛先TCP/UDP ポート番号が確認され、対応する内部ネットワークの宛先に変換されます。
IP アドレスは、ネットワーク上の位置情報であると同時に、ID(識別子)でもあります。
ID である以上、インターネット上に存在するIP アドレスは、すべてが一意である必要があります。重複は許されません。
しかし、インターネット上のすべてのノードに一意のIP アドレスを割り当てるには、数が足りません(※)
※ 1990年代初頭、私が所属していた会社では、クラスB のグローバルアドレスが、すべてのPC に割り当てられていました。
NAT により外部と内部に分割することで、内部ネットワークを、外部(インターネット)のアドレッシングから独立させることを可能にします。
独立させることで、外部ネットワークへ影響を与えることなく、内部ネットワークを自由に拡張することが可能となります。
Cisco.com (CCO) レビューについて
NAT の動作の仕組み(ライター翻訳)
How NAT Works (英文)
NAT の基本的な動作について説明した技術資料です。
ルータの具体的な設定方法については触れられておらず、メーカに依存しない、NAT の仕組みを勉強するには良い資料ですね。
ただ、「内部」「外部」「グローバル」「プライベート」といった用語が、正確に定義されることなく乱用されており(※)、非常に読みづらくなっているのが難点です。
※ 一応「NAT:ローカルおよびグローバルの定義」という別な資料へのリンクが提示されていますが、こちらも非常に読みづらく、一読しただけでは理解できそうもありません。
■ 用語の定義
「外部」「グローバル」は、NAT ルータを境にして、インターネットに向け公開されている側を指します。
「内部」「プライベート」は、インターネット側から直接アクセスできない側を指します。
背景知識
NAT の役割を、企業の受付にたとえて説明しています。
これは、Cisco の技術資料にしては珍しく、秀逸な説明ですね。
企業の受付にたとえることで、NAT の役割を、容易に理解することができます。
続いて、NAT の実現方法を図付きで説明していますが、NAT の動作と利用方法が同列に説明されており、少し混乱します。
最初の三つ、「スタティック NAT」「ダイナミック NAT」「オーバーロード」は、NAT の動作を説明するものですが、最後の「オーバーラップ」は、NAT の利用方法について述べています(※)。
※ インターネット上に存在するIP アドレスを、内部ネットワークでも用いる場合の実現方法の例として、スタティックNAT を挙げています。
突然スタブという言葉が出てきました。一応説明はしてありますが、イメージしづらいですね。
スタブ(Stub) とは、本来「切り株」「切れ端」という意味の英単語です。
ネットワークでは、中継点ではない物に使われる言葉です(※)。
つまり、スタブドメインは、ISP のように様々なユーザのデータを中継するのではなく、ISP から受け取ったデータを他のISP やユーザに中継する必要が無い、企業や自宅のネットワークを指します。
※ OSPF のスタブエリアなど
「未登録IP アドレス」とは、内部ネットワークで使われているIP アドレスを指します。それに対して「登録済みIP アドレス」とは、このスタブドメインが、インターネットに対して公開しているIP アドレスです。
インターネットの普及、B2B、B2C の一般化により、この前提条件は過去のものとなりました。
この例は、DMZ(ディミリタライズドゾーン: DeMilitarized Zone) に設置されたWWW サーバなどを指しているのでしょうか?
DMZ にグローバルアドレスを用いるのは間違いではありませんが、あまりお勧めできる構成ではありません。
アドレスの変換処理を行う前に、ルーティングテーブルが参照されることを説明しています。
ルーティングテーブルに、宛先へ到達するための経路が存在しなければ、そもそもアドレス変換を行う理由がありませんので、破棄されます。
ルーティングを主目的として設計されたコンピュータであるルータにとって、アドレス変換よりも、ルーティングテーブルを参照する処理の方が、負荷が低くなります。
この順番は妥当でしょう。
NAT ルータは、パケットの送信元IP アドレスを、内部グローバルアドレスに変換して、外部へ中継します。
返信されてきたパケットの宛先IP アドレスは、先ほどNAT ルータが変換した、内部グローバルアドレスになります。
返信されてきたパケットが、NAT ルータの外部インターフェイスで受信された時の動作を説明しています。
パケットを外部へ中継した時とは逆の動作になります。
宛先IP アドレスを内部向けに変換した後でないと、ルーティングテーブルを参照できないからです。
ここで言う多重化とは、TCP/UDP のポート番号を使うことで、一つのIP アドレスの上で、複数のセッションを識別できることを意味します。
ダイナミック NAT とオーバーロードの例
残念ながら、Flash アニメへのリンクが切れているようです。
Flash アニメを見る場合は、原文を参照しましょう。
ルーティング不能なのは、一意ではないからではなく、外部ネットワークに存在しない経路だからです。
内部ネットワークの中では、ルーティングテーブルに経路が登録されていれば、そのようなアドレスでもルーティング可能です。
ダイナミックNAT とスタティックNAT の間に、基本的な動作の違いはありません。
内部ローカル/内部グローバルアドレスの関連付け(マッピング)が、ダイナミックの場合は、そのときにあいているアドレスとの間で行われるのに対して、スタティックの場合は事前の設定が必要となるくらいです。
オーバーロードは、内部から外部へのアクセス要求に対して、割り当て可能な内部グローバルアドレスの数が不足している場合に有効です。
内部グローバルアドレスがひとつしかない場合、この方法を使います。
この場合、内部グローバルアドレスは、NAT ルータのインターネット側インターフェイスに設定されたIP アドレスになります。
ひとつしかない送信元IP アドレスでは、内部ネットワークの複数の端末を識別することができませんので、TCP/UDP のポート番号を使用します。
NAT ルータは、外部へ中継するパケットの送信元ポート番号を変換し、ポート番号を、その端末に割り当てます。
外部から戻ってきたパケットの宛先ポート番号は、このポート番号になりますので、NAT ルータは、どの端末宛のパケットなのかを識別することができます。
DRAM が、すべてNAT 用に使われるわけではない点に注意してください。
マルチホーミング
これは訳もおかしいですが、原文も正しく説明できていません。
マルチホーミングとは、スタブドメインから外部へ接続するための出口(NAT ルータ)が複数存在する環境を指します。
NAT ルータが外部から経路情報を受け取るための手段としてEBGP を使います。
これに対してIBGP は、スタブドメイン内で、複数のNAT ルータが、経路情報の同期を取るための手段として用いられます。
ネットワークエンジニアになろう!のトップページへ戻る