ポートアドレス変換
ポートアドレス変換(ポートアドレスへんかん)はPAT(パット、Port Address Translation の略語)とも呼ばれる、プライベートネットワーク上のホストとパブリックネットワーク上のホストの間で構成されるTCPまたはUDP通信を、ネットワーク機器が変換する機能である。ポートアドレス変換により、ただ一つのグローバルIPアドレスがプライベートネットワーク、大抵はLAN上の多数のホストによって使用されることを可能にする。
PAT機器は、IPパケットが機器を通過する際に透過的にIPパケットを修正する。この操作により、プライベートネットワーク上の多数のホストからパブリックネットワークに送られるすべてのパケットが、パブリックネットワーク上のホスト、つまりPAT機器から生じたかのように見える。
PATはベンダーごとに異なる名前で呼ばれている。Hide-Mode NAT(チェック・ポイント・ソフトウェア・テクノロジーズ)、PAT(シスコシステムズ)、 NAPT(RFC 3022)、SNAT/MASQUERADE(Linux iptables)、Internet Connection Sharing(マイクロソフト)などがその例である。ネットワークアドレス変換(NAT)の主要目的はインターネット上のIPアドレスの枯渇問題を対処することであるので、NATはPATアプリケーションを表す総括的な用語である。詳細は RFC 1631 および RFC 2663 を参照。
NATを提供する一部の機器、例えばブロードバンドルータなどは、実質的にはPATを提供している。従って、NATとPATの間には不明瞭な部分がかなりある。PAT機器を含めたNATの一般的な用途からすると、PATはNATとはまったく異なった技術よりは、むしろNATの一種であると考えるのが正しい。
PATはNATの一部であり、NATの概念に密接に関連している。PATはNATオーバーロードとしても知られている。PATでは一般にグローバルIPアドレスが一つあり、そのアドレスを使用して接続する多数のプライベートホストがある。パブリックネットワークから受け取ったパケットは、パブリックおよびプライベートのポートペアを保持するPAT機器内部の表を参照することによって、プライベートネットワーク上のそれぞれの目的地に送られる。
PATでは、送信者のプライベートIPとポート番号の両方が修正され、PAT機器はパブリックネットワーク上のホストから見えるポート番号を選ぶ。このように、PATはOSI参照モデルの3層(ネットワーク層)と4層(トランスポート層)にて作動するが、一方で基本的なNATは3層でのみ作動する。
すべてのTCPパケットとUDPパケットは、ソースIPアドレスおよびソースポート番号の両方とデスティネーションIPアドレスおよびデスティネーションポート番号の両方を含む。同時に受け取られたこれら4つの情報はソケットを形成する。
Webサーバやメールサーバのようなパブリックネットワークにアクセス可能なサービスにとって、ポート番号は重要である。例えば、80番ポートはWebサーバソフトウェアに接続し25番ポートはメールサーバのSMTPデーモンに接続する。
パブリックサーバのIPアドレスも重要で、これは郵便の宛先あるいは電話番号と似た国際的な唯一性を持つ。IPアドレスとポート番号の両方は、通信しようとしているすべてのホストに正確に知られておかなければならない。
RFC 1918で記述されているように、プライベートIPアドレスはプライベートネットワーク上では重要である。このことは、ホスト上のポートにも言えることである。ポートはホスト上の唯一の通信のエンドポイントである。そのため、PAT機器を通過する接続は、ポートとIPアドレスを組み合わせたマッピングによって維持される。
PATは、同時に唯一の通信を確立するために同じソースポート番号を使う2つの異なるホストを通して起こる衝突(コンフリクト)を解決する。
PAT機器は、一つの公的な電話番号を持つ会社における受付係と似ている。会社内から会社外に対する通話は、すべて同じ電話番号からかかってくるように見える。しかし、会社外からかかってきた電話は、オペレータが通話したいと思っている発呼者に通話先を尋ねることによって、正しい内線に転送される必要がある。なぜなら、内線番号には外部から直接電話をかけることができないからである。
PATを使うことで、すべての通信は実質的には内部ホストのIPアドレスまたはポート番号の代わりに、PAT機器のグローバルIPアドレスとポート情報を含んで外部ホストへ送られる。
プライベートネットワーク上のコンピュータが外部ネットワークに向けてパケットを送ったとき、PAT機器はパケットヘッダの送信元フィールドの中のプライベートIPアドレス(つまり、送信者のアドレス)をPAT機器のグローバルIPアドレスと交換する。その後、郵便局の私書箱番号と同じように、送信元ポートフィールドの中のポート番号を挿入することでその通信にポート番号を割り当てる。そして、パケットを外部ネットワークへ転送する。その際に、PAT機器は変換テーブルにプライベートIPアドレス、元のソースポート、そして変換されたソースポートを記入する。次に送られてくるパケットには同じポート番号が割り当てられる。
ポートアドレス変換されたパケットを受け取っているコンピュータは、変換されたパケットに明記されているポートとIPアドレスへの接続を確立する。このとき、郵便局の私書箱番号と同じように、コンピュータは供給されたアドレスが変換されているという事実に気付いていない。
外部ネットワークから来るパケットは、変換テーブルに基づいて、受け取ったパケットヘッダの中のグローバルIPアドレスとポート番号を対応するプライベートIPアドレスとポート番号に置換される。これは、郵便局の私書箱番号から所在地住所への変換と似ている。それからパケットは内部ネットワーク上に転送される。もしも受け取ったパケットのデスティネーションポート番号が変換テーブルの中に見当たらなければ、PAT機器はどこに送ればよいかわからないので、パケットは捨てられる。
PATは、プライベートネットワーク上の内部ホストの真のエンドポイントを隠しつつ、内部ホストのIPアドレスとポート番号のみを変換する。
PATの動作は、通常は内部ホストと外部ホストの両方に見える。
一般に、内部ホストは外部ホストの真のIPアドレスとTCPまたはUDPポートを知っている。さらに、PAT機器は内部ホストのためにデフォルトゲートウェイとしても機能できる。しかし、外部ホストはPAT機器についてのパブリックIPアドレスと内部ホストの代わりに通信するために使用されている特定のポートしか知らない。
ソフトウェアファイアウォールとブローバンドネットワークに接続する装置(たとえば、ADSLルータ)は、PAT実装を含むことができるネットワーク技術の例である。これらの装置を適切に設定しているとき、インターネットは外部ネットワークでありLANは内部ネットワークである。
プライベートネットワーク上にありIPアドレスが192.168.0.2であるホストが、パブリックネットワーク上のホストへの接続を要求するものとする。最初のパケットにはアドレス192.168.0.2:15345が与えられる。ここで、1.2.3.4というパブリックIPアドレスを持つと想定するPAT機器は、プライベートネットワーク上の192.168.0.2によって接続目的で使用される16529ポートをPAT機器の内部テーブルに記入することにより、独断的にこのソースアドレスをポートペアから1.2.3.4:16529に変換する。パケットがパブリックネットワークからPAT機器によってアドレス1.2.3.4:16529として受け取られた時、そのパケットは192.168.0.2:15345に転送される。
NATによって与えられる利点に加えて、PATはただ一つのグローバルIPアドレスを多数の内部ホストにより共有できるようにする。
プライベートネットワーク上の多数のホストはパブリックネットワークへ幾多の接続を行う。ここで、利用できるポートの数は限られているので、PAT機器における変換テーブルの領域はゆくゆくは不足する。PAT機器では数千のポートが利用可能で、それらはすぐに再利用されるが、一部のネットワーク通信はたった一つの論理トランザクション(例えば、多数の埋め込みオブジェクトのあるWebページに対するHTTP要求や、一部のVoIPアプリケーションなど)において多数のポートをほぼ同時に消費する。この種類の通信を頻繁に持続する十分に大きいLANは利用可能な全ポートを定期的に消費するだろう。
内部アドレスはすべてパブリックネットワークにアクセス可能な一つのアドレスに変換されるので、外部のコンピュータが特定のポートへの接続を転送するファイアウォール上で特別な設定なしに、ファイアウォール内部にある特定のコンピュータに接続を始めることは不可能である。これは例えばVoIPやテレビ会議、そしてそのほかのP2Pアプリケーションのようなアプリケーションに大きな影響を与える。