ネットワークエンジニアになろう! > CCO レビュー > NAT - IP アドレスを変換する

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 を挙げています。

内部ネットワークは通常は Local Area Network(LAN; ローカルエリア ネットワーク)であり、これは普通スタブ ドメインと呼ばれます。スタブ ドメインは IP アドレスを内部的に使用する LAN です。

突然スタブという言葉が出てきました。一応説明はしてありますが、イメージしづらいですね。
スタブ(Stub) とは、本来「切り株」「切れ端」という意味の英単語です。
ネットワークでは、中継点ではない物に使われる言葉です(※)。
つまり、スタブドメインは、ISP のように様々なユーザのデータを中継するのではなく、ISP から受け取ったデータを他のISP やユーザに中継する必要が無い、企業や自宅のネットワークを指します。

※ OSPF のスタブエリアなど

次の例では、NAT ルータは、プライベート(内部)ネットワークに存在する未登録 IP アドレス(内部ローカル アドレス)を登録済み IP アドレスに変換するよう設定されています。

「未登録IP アドレス」とは、内部ネットワークで使われているIP アドレスを指します。それに対して「登録済みIP アドレス」とは、このスタブドメインが、インターネットに対して公開しているIP アドレスです。







スタブ ドメイン上にあるほとんどのコンピュータは、内部ローカル アドレスを使用して互いに通信します。

インターネットの普及、B2B、B2C の一般化により、この前提条件は過去のものとなりました。

スタブ ドメイン上のコンピュータの中には、主にネットワークの外部と通信するものがあります。このコンピュータには、変換が不要であることを意味する内部グローバル アドレスがあります。

この例は、DMZ(ディミリタライズドゾーン: DeMilitarized Zone) に設置されたWWW サーバなどを指しているのでしょうか?
DMZ にグローバルアドレスを用いるのは間違いではありませんが、あまりお勧めできる構成ではありません。

NAT ルータはルーティング テーブルをチェックして、宛先アドレスのエントリがあるかどうかを確認します。宛先アドレスがルーティング テーブルに登録されていない場合、パケットは廃棄(ドロップ)されます。

アドレスの変換処理を行う前に、ルーティングテーブルが参照されることを説明しています。

ルーティングテーブルに、宛先へ到達するための経路が存在しなければ、そもそもアドレス変換を行う理由がありませんので、破棄されます。
ルーティングを主目的として設計されたコンピュータであるルータにとって、アドレス変換よりも、ルーティングテーブルを参照する処理の方が、負荷が低くなります。
この順番は妥当でしょう。

ルータは内部グローバル アドレスを使用して、パケットを宛先に送信します。

NAT ルータは、パケットの送信元IP アドレスを、内部グローバルアドレスに変換して、外部へ中継します。

パブリック ネットワーク上のコンピュータはプライベート ネットワークにパケットを送信します。 パケットの送信元アドレスは、外部グローバル アドレスです。 宛先アドレスは、内部グローバル アドレスです。

返信されてきたパケットの宛先IP アドレスは、先ほどNAT ルータが変換した、内部グローバルアドレスになります。

パケットが外部ネットワークに着信する場合、NAT ルータはアドレス変換テーブルを検索して、テーブルに宛先アドレスがあるかどうかを特定し、そのアドレスをスタブ ドメイン上のコンピュータにマッピングします。

返信されてきたパケットが、NAT ルータの外部インターフェイスで受信された時の動作を説明しています。

NAT ルータは、パケットの内部グローバル アドレスを内部ローカル アドレスに変換し、ルーティング テーブルをチェックした後、パケットを送信先コンピュータに送信します。

パケットを外部へ中継した時とは逆の動作になります。
宛先IP アドレスを内部向けに変換した後でないと、ルーティングテーブルを参照できないからです。

NAT オーバーロードでは、TCP/IP プロトコル スタックの一機能である多重化を利用します。

ここで言う多重化とは、TCP/UDP のポート番号を使うことで、一つのIP アドレスの上で、複数のセッションを識別できることを意味します。

ダイナミック NAT とオーバーロードの例

残念ながら、Flash アニメへのリンクが切れているようです。
Flash アニメを見る場合は、原文を参照しましょう。

内部ネットワーク(スタブ ドメイン)に設定されている IP アドレスは、Internet Assigned Numbers Authority(IANA)(IP アドレスを分配する世界的な機関)によってその会社専用に割り当てられたアドレスではありません。これらのアドレスは一意でないため、ルーティング不能と見なされます。

ルーティング不能なのは、一意ではないからではなく、外部ネットワークに存在しない経路だからです。
内部ネットワークの中では、ルーティングテーブルに経路が登録されていれば、そのようなアドレスでもルーティング可能です。

ダイナミックNAT とスタティックNAT の間に、基本的な動作の違いはありません。
内部ローカル/内部グローバルアドレスの関連付け(マッピング)が、ダイナミックの場合は、そのときにあいているアドレスとの間で行われるのに対して、スタティックの場合は事前の設定が必要となるくらいです。


オーバーロードは、内部から外部へのアクセス要求に対して、割り当て可能な内部グローバルアドレスの数が不足している場合に有効です。
内部グローバルアドレスがひとつしかない場合、この方法を使います。
この場合、内部グローバルアドレスは、NAT ルータのインターネット側インターフェイスに設定されたIP アドレスになります。

ルータは送信元コンピュータの送信元ポートを、アドレス変換テーブル内の、送信元コンピュータのアドレス情報を保存した場所と一致するポート番号に置き換えます。

ひとつしかない送信元IP アドレスでは、内部ネットワークの複数の端末を識別することができませんので、TCP/UDP のポート番号を使用します。
NAT ルータは、外部へ中継するパケットの送信元ポート番号を変換し、ポート番号を、その端末に割り当てます。
外部から戻ってきたパケットの宛先ポート番号は、このポート番号になりますので、NAT ルータは、どの端末宛のパケットなのかを識別することができます。

アドレス変換テーブルの標準的なエントリのサイズはおよそ 160 バイトであるため、4 MB の DRAM を搭載したルータであれば、理論的には 26,214 の同時変換が可能です。これはほとんどのアプリケーションにとって十分な数です。

DRAM が、すべてNAT 用に使われるわけではない点に注意してください。


マルチホーミング

ルータは Border Gateway Protocol(BGP; ボーダーゲートウェイ プロトコル)(TCP/IP プロトコル群の一部)を使用して、異なるプロトコルを使用するネットワーク間のルーティングを行います。マルチホーム ネットワークでは、ルータはスタブ ドメイン側で Internal Border Gateway Protocol(IBGP)を使用し、他のルータとの通信には External Border Gateway Protocol(EBGP)を使用します。

これは訳もおかしいですが、原文も正しく説明できていません。

マルチホーミングとは、スタブドメインから外部へ接続するための出口(NAT ルータ)が複数存在する環境を指します。

NAT ルータが外部から経路情報を受け取るための手段としてEBGP を使います。
これに対してIBGP は、スタブドメイン内で、複数のNAT ルータが、経路情報の同期を取るための手段として用いられます。




ネットワークエンジニアになろう!のトップページへ戻る
サイト内検索
無料メールマガジン「英語でネットワークエンジニア」
マニュアルやRFCを読むのに必要なのは、高度な文法知識ではなく語彙力です。毎回一単語、例文と解説に技術情報を併せてお届けします. (マガジンID:0000181633)
メールアドレス:
Powered by
This website is powered by Movable Type 3.2 Smartnetworks.jp.