ネットワークアドレス変換 (NAT)

ネットワークアドレス変換 (NAT)

ネットワークアドレス変換 (NAT; Network Address Translation) は、 IP パケットの転送中に IP パケットヘッダーの送信元アドレスや宛先アドレスを変更する処理です。一般に、送信者、受信者のアプリケーションには、 IP パケットが途中で操作されていることは分かりません。

NAT はしばしばルーターで行われます。そのため、 NAT を行うホストを NAT ルーター と呼びます。しかしながら、 OpenStack デプロイメントでは、通常 Linux サーバーで NAT 機能が実装され、ハードウェアルーターではありません。これらのサーバーでは iptables ソフトウェアパッケージを使って NAT 機能を実装します。

NAT にはいくつかの種類があります。ここでは、OpenStack デプロイメントでよく使われている 3 種類について説明します。

SNAT

送信元ネットワークアドレス変換 (SNAT) では、NAT ルーターは IP パケットヘッダーの送信元 IP アドレスを変更します。 SNAT は プライベートアドレス のホストをパブリックインターネット上のサーバーと通信できるようにするのに広く使われます。

RFC 1918 は、以下の 3 つのサブネットをプライベートアドレスとして予約しています。

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

これらの IP アドレスは、グローバルにはルーティングできないアドレスです。つまり、パブリックなインターネット上のホストはこれらのアドレスを持つ IP パケットを送信できません。プライベート IP アドレスは家庭や企業の環境では広く使われています。

プライベート IP アドレスを持つホストで動作するアプリケーションがパブリックなインターネット上のサーバーへの接続を必要とすることはしばしばあります。 1 例としては、ユーザーが www.openstack.org のような公開ウェブサイトにアクセスしたい場面があるでしょう。 IP パケットが送信元アドレスがプライベート IP アドレスを持ったまま www.openstack.org があるウェブサーバーに到達してしまうと、ウェブサーバーは送信元にパケットを送り返すことができません。

SNAT は、送信元 IP アドレスをパブリックなインターネットから到達可能な IP アドレスに変更することで、この問題を解決します。 SNAT にはいくつかの種類があります。 OpenStack デプロイメントで使用されている形では、 送信者と受信者間の経路上にある NAT ルーターが、パケットの送信元 IP アドレスをルーターのパブリック IP アドレスに変更します。このルーターは送信元の TCP や UDP のポート番号も別の値に変更し、ルーターは、送信元の実際の IP アドレスとポートと、変更後の IP アドレスとポートの情報を管理します。

ルーターが管理している IP アドレスとポートにマッチするパケットを受信すると、プライベート Ip アドレスとポートに戻す変換を行い、引き続きパケットを転送します。

NAT ルーターは IP アドレスだけでなくポートも変更するので、この形態の NAT は ポートアドレス変換 (PAT) と呼ばれることもあります。 NAT オーバーロード (overload) と呼ばれることもあります。

OpenStack は SNAT を使うことで、インスタンス内で動作するアプリケーションがパブリックなインターネットに出て行けるようにしています。

DNAT

宛先ネットワークアドレス変換 (DNAT) では、NAT ルーターは IP パケットヘッダーの宛先 IP アドレスを変更します。

OpenStack は、インスタンスからのパケットを OpenStack メタデータサービスにルーティングするために、DNAT を使用します。インスタンス内で動作するアプリケーションは、 IP アドレス 169.254.169.254 のウェブサーバーに HTTP GET リクエストを行うことで、 OpenStack メタデータサービスにアクセスします。 OpenStack 環境では、この IP アドレスを持つホストはありません。その代わり、 OpenStack は、 DNAT を使ってこれらのパケットの宛先 IP アドレスを変更し、メタデータサービスがリッスンしているネットワークインターフェースにパケットが届くようにします。

One-to-One (1対1) NAT

one-to-one NAT では、 NAT ルーターはプライベート IP アドレスとパブリック IP アドレスの 1 対 1 のマッピングを管理します。 OpenStack は one-to-one NAT を使って Floating IP アドレスを実装しています。

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.