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

ネットワークアドレス変換（ネットワークアドレスへんかん）、NAT（Network Address Translation）とは、インターネットプロトコルによって構築されたコンピュータネットワークにおいて、パケットヘッダに含まれるIPアドレスを、別のIPアドレスに変換する技術である。 プライベートネットワーク環境下でプライベートIPアドレスを持つホストから、グローバルIPアドレスを持つゲートウェイを通して、インターネットにアクセスする際に、プライベートIPアドレスをグローバルIPアドレスに変換するために利用されることが多い。 また、IPアドレスに加え、ポート番号の変換も行うものをNAPT(Network Address Port Translation、またはIPマスカレード)と呼ぶ。今日では、NATと言えばNAPTのことを指すのが一般的である。（#NATとNAPTも参照） 元来、インターネットに接続される全てのルータやホストには、それぞれ固有のIPアドレス（グローバルIPアドレス）が割り当てられていた。しかし、インターネットに接続されるホストが著しく増えたため、約43億個を上限とするIPアドレスは枯渇するようになった。こうした状況へ対応するため、LAN内のホストにはプライベートIPアドレスを割り当て、インターネットに接続するときだけグローバルIPアドレスを使用する技術が開発された。このときに用いられる技術がNATである。日本向けに発売されている ADSL や FTTH などに対応したブロードバンドルータにおいては、業務用、家庭用を問わずNAT機能を持っていることが多い。 動的 NAT (ダイナミック NAT) とは、LAN 内部の IP アドレスをあらかじめ用意された外部 IP アドレスの中の 1 個を選択してその IP アドレスに動的にマップする技術のことである。動的 NAT はセキュリティや不足する IP アドレスの問題解決に役に立つが、IP アドレスが固定されないという問題点がある。例えば、LAN 内部のサーバをインターネットなど、外部から参照する必要が生じた場合、外部から参照するためにはグローバル IP アドレスが必要だが、動的 NAT では解決できない。 静的 NAT (スタティック NAT) とは、LAN 内部の IP アドレスを常に同一の外部の IP アドレスに静的にマップする技術のことである。この技術を使用すれば、LAN の外部から常に同一の IP アドレスを指定することによって内部サーバにアクセスすることができる。 現在では、プライベートIPアドレスとグローバルIPアドレスの1対1の変換に加え、ポート番号も変換してプライベートIPアドレスとグローバルIPアドレスを1対多に変換するNAPTが用いられることが多い。NATオーバーロード、オーバーロード変換、PAT（Port Address Translation、Cisco Systemsによる呼称）、IPマスカレード（LinuxにおけるNAPTの実装名から。マスカレード（masquerade）は、仮面舞踏会の意味）などとも呼ばれる。 元来のNATは、送受信するパケット上のIPアドレスだけを識別して変換するものであるため、複数のホストから同時にローカル外のネットワークに接続しようとすると、ローカルのホスト数と同数のグローバルアドレスが必要になる。NAPTでは、IPアドレスに加えてポート番号の識別や変換をすることで、複数のホストからローカル外のネットワークに接続する際、異なるローカルアドレスを同一のグローバルアドレス配下の異なるポートとして表現し、必要なグローバルアドレスの数を減らすことができる。 動的NAPTは、インターネットプロバイダから利用者に対するグローバルIPアドレスの割り当て等でよく用いられる。 NATは、グローバルIPアドレスをプライベートIPアドレスに変換するときに、パケットフィルタリング（パケット(syn)の条件を指定して制限）ができる。実際には、プライベートIPアドレスを割り当てられたホストには、特別な設定をしない限り外部のネットワークからは接続できないことが多い。こうした動作をするが、NATを簡易的なファイアウォールと混同してはならずそれ自体はセキュリティを高めるものではない。 その一方、インターネットが本来掲げていたピア・ツー・ピアでの接続に対する障害になりうると非難する意見もある（エンドツーエンド接続性）。また、FTPや、SIPなどのVoIPを機能させるためには工夫が必要な場合もある。 また、複数のローカルIPアドレスからのアクセスを、1つのグローバルIPアドレスで共有しているため、外からはローカルネットワーク内のどのノードがアクセスしたのかまでを特定することはできない。このためインターネットカフェなどの不特定多数の人が利用するアクセス端末からの、悪意のある利用（SPAM行為や掲示板荒らし、ネット犯罪など）がなされた場合、匿名性が高く特定がより困難になる。 NATはアドレスやポート番号を変換する様々な仕組みに実装されている。そして、それぞれのアプリケーションの通信プロトコルに異なった影響を及ぼす。IPアドレスの情報を使用するいくつかのアプリケーションプロトコルはマスカレードに用いられる外部のアドレスを決定する必要がある。そしてさらに、しばしば与えられたNAT機器に用いられるマッピングの種類を発見し、分類する必要がある。このために、Simple traversal of UDP over NATs (STUN) protocol は開発された。それ (STUN) はNATの実装をFull cone NAT、Restricted cone NAT、Port restricted cone NAT、もしくはSymmetric NAT に分類し、それ(この分類)に応じて機器を検査するための1つの手法を提案した。しかしながら、その後これらの手順はスタンダードステータスから除外された。なぜならこれらの方法は不完全で、多くの機器を正しく評価するには不十分であると判明したからである。新しい方法は　RFC 5389 (2008) に記述されており、STUNの頭文字は現在、この仕様の新しいタイトルを表すSession Traversal Utilities for NATである。 この用語は多くの混乱を招く原因であった。なぜならそれは現実のNATの振る舞いを記述するには不適切であると判明したからである。 多くのNATの実装はこれらの種類を組み合わせている。従ってCone/Symmetricという用語を使う代わりに、それぞれ固有のNATの振る舞いに言及する方がよい。特に、たいていのNAT変換装置は外部に出て行く方向への接続に対するSymmetricNATと静的ポートマッピングとを組み合わせている。外部アドレスとポートに入ってくるパケットは特定の内部アドレスとポートにリダイレクトされる。いくつかの製品は、例えば何台かのサーバの間に負荷を分散するために、複数の内部ホストにパケットをリダイレクトできる。しかしながら、これは多くの相互接続パケットが存在するような、より複雑な通信の場合に問題を引き起こす。従って滅多に使われることはない。 多くのNATの実装はポート維持設計に従う。 ほとんどの通信において、NATは内部と外部のポート番号として同じ値を使う。 しかしながら、2つの内部ホストが同じポート番号を使って同じ外部ホストと通信しようとするならば、2番目のホストによって使われる外部ポート番号はランダムに選ばれる。このようなNATは、時にはRestricted cone NATのように見え、別の時にはSymmetric NATのように見える。 NATやNAPTではFTPやSIPなどのVoIPなどうまく動作しないアプリケーションがあるため、さらにコネクションとトラッキングすることでそれらに対処した技術。Linuxのiptablesなどで実装されている。 住友電工製のADSLモデムに内蔵のルータに実装されたDMZを実現する機能の名称[1]。 1つのグローバルIPアドレスしか提供されないIP接続サービス環境下において、DHCPによりローカルの一つのコンピュータにグローバルIPアドレスを割り当て、それ以外のコンピュータにはローカルIPアドレスを割り当てる。これによって、グローバルIPアドレスを割り当てられたコンピュータは、グローバルIPアドレスを直接使用しなければならないネットワークアプリケーションを動作させることができる。 UPnPのインターネットゲートウェイデバイス(IGD)仕様に準拠したNATルータは，それに対応したアプリケーションから様々な操作(Action)を受け付けることが可能である。この動作の中に、ポートマッピングを作成・削除・情報取得を行う操作(Action)がある。UPnP NAT Traversalとも呼ばれる。 これにより、使用するアプリケーションがポートマッピングを要求する場合、従来はユーザーがNATルータに例えばwebブラウザからアクセスするなどして、手動で設定を加えなければならなかったものが、アプリケーション自身が直接ルーターにアクセスしポートマッピングのエントリーを追加・削除できるようになった。 市場に出回る「ブロードバンドルータ」などの商品名のもので「UPnP機能搭載」や「UPnP NAT Traversal対応」などと書かれている製品がこれに当たる。 2007年現在、IPアドレス枯渇問題で足りないとされているIPv4のIPアドレスであるが、将来的にはIPv6のIPアドレス体系に移行すれば、枯渇問題は解決すると見られている。しかし、その移行期間においてはIPv4とIPv6の双方のネットワークが混在することになり、両ネットワークを接続するNAT(プロトコル変換も行うためゲートウェイと呼ぶのが妥当)が必要となる。実際のゲートウェイの実装方法がRFC 2766によって提案されている。 エンドツーエンド接続性 IPアドレス枯渇問題 NAT traversal キャリアグレードNAT ^ STUN ^ NAT Types (PDF). ^ Francois Audet, Cullen Jennings (2007年1月) (text). RFC 4787 Network Address Translation (NAT) Behavioral Requirements for Unicast UDP. IETF. http://www.ietf.org/rfc/rfc4787.txt 2007年8月29日閲覧。.  RFC 1631 - The IP Network Address Translator (NAT) RFC 2766 - Network Address Translation - Protocol Translation (NAT-PT) RFC 3022 - Traditional IP Network Address Translator (Traditional NAT) RFC 3235 - Network Address Translator (NAT)-Friendly Application Design Guidelines RFC 4787 - Network Address Translation (NAT) Behavioral Requirements for Unicast UDP RFC 5902 - IAB Thoughts on IPv6 Network Address Translation LinuxのConnection Tracking機能説明