ネットワークアドレス変換、NAT(Network Address Translation)とは、インターネットプロトコルによって構築されたコンピュータネットワークにおいて、パケットヘッダに含まれるIPアドレスを、別のIPアドレスに変換する技術である。

業務用、家庭用を問わず、インターネットに接続するために使用されるルータや無線LANのアクセスポイントにおいて標準的に利用されている。

IPアドレスに加え、ポート番号の変換も行うものをNAPT(Network Address Port Translation、またはIPマスカレード)と呼ぶ。今日では、NATと言えばNAPTのことを指すのが一般的である(#NATとNAPTも参照)。

## 概要

インターネットに接続し通信を行うためには、世界で唯一のIPアドレス(グローバルIPアドレス)を使用する必要がある。よって、プライベートネットワーク環境下において、プライベートIPアドレスを割り当てられている機器は、そのままではインターネットに接続することができない。NATを利用することにより、ゲートウェイを通過するIPパケットの送信元または宛先のIPアドレスは、グローバルIPアドレスまたはプライベートIPアドレスに変換される。こうして、LAN内の機器が、ルータ等のゲートウェイを通してインターネットにアクセスできるようになる。

### NATとNAPT

元来のNATは、送受信するパケットの送信元・宛先IPアドレスだけを識別して変換するものであったため、複数の機器が同時に外部ネットワークに接続する場合は、その機器数と同数のグローバルIPアドレスが必要であった。そこで現在では、プライベートIPアドレスとグローバルIPアドレスの1対1の変換に加え、ポート番号も変換してプライベートIPアドレスとグローバルIPアドレスを1対多に変換するNAPTが用いられることが多い。NATオーバーロード、オーバーロード変換、PAT(Port Address Translation、Cisco Systemsによる呼称)、IPマスカレード(LinuxにおけるNAPTの実装名から。マスカレード(masquerade)は、仮面舞踏会の意味)などとも呼ばれる。

NAPTでは、IPアドレスに加えてポート番号の識別や変換をすることで、複数のホストからローカル外のネットワークに接続する際、異なるローカルアドレスを同一のグローバルアドレス配下の異なるポートとして表現し、必要なグローバルアドレスの数を減らすことができる。動的NAPTは、インターネットプロバイダから利用者に対するグローバルIPアドレスの割り当て等でよく用いられる。

### IPアドレス枯渇問題の解決策

NATは、LAN内のホストにはプライベートIPアドレスを割り当て、インターネットに接続するときだけグローバルIPアドレスを使用する技術であるため、NATを活用することにより、使用するグローバルIPアドレスの数を減らすことができる。

### 動的NAT

動的NAT(ダイナミックNAT)とは、LAN内部のIPアドレスをあらかじめ用意された外部IPアドレスの中の1個を選択してそのIPアドレスに動的にマップする技術のことである。動的NATはセキュリティや不足するIPアドレスの問題解決に役に立つが、IPアドレスが固定されないという問題点がある。例えば、LAN内部のサーバをインターネットなど、外部から参照する必要が生じた場合、外部から参照するためにはグローバルIPアドレスが必要だが、動的NATでは解決できない。

### 静的NAT

静的NAT(スタティックNAT)とは、LAN内部のIPアドレスを常に同一の外部のIPアドレスに静的にマップする技術のことである。この技術を使用すれば、LANの外部から常に同一のIPアドレスを指定することによって内部サーバにアクセスすることができる。

### 非難

その一方、インターネットが本来掲げていたピア・ツー・ピアでの接続に対する障害になりうると非難する意見もある(エンドツーエンド接続性)。また、FTPや、SIPなどのVoIPを機能させるためには工夫が必要な場合もある。

また、複数のローカルIPアドレスからのアクセスを、1つのグローバルIPアドレスで共有しているため、外からはローカルネットワーク内のどのノードがアクセスしたのかまでを特定することはできない。このためインターネットカフェなどの不特定多数の人が利用するアクセス端末からの、悪意のある利用(SPAM行為や掲示板荒らし、ネット犯罪など)がなされた場合、匿名性が高く特定がより困難になる。

### NATの色々な呼ばれ方

Source NAT(送信元IPアドレス変換)

- NAPT(Network Address Port Translation)
- IPマスカレード(Linux)
- PAT(Port Address Translation)(Cisco)
- NATオーバーロード(Cisco)
- ダイナミックENAT(Enhanced NAT)(アライドテレシス)
- DIP(Dynamic IP)(Juniper SSG)
- DIPP(Dynamic IP and port)(Palo Alto Networks)

Destination NAT(宛先IPアドレス変換)

- ポートフォワーディング
- スタティックENAT(アライドテレシス)
- VIP(Juniper SSG)
- バーチャルIP(Fortinet)

Source and Destination NAT(送信元IPアドレスと宛先IPアドレスの両方を変換する)

- ダブルNAT(アライドテレシス)
- MIP(Juniper SSG)

## NATの分類

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である。

|  |  |
| --- | --- |
| Full cone NAT(または1対1NAT)  - 内部アドレス(iAddr:port1)は外部アドレス(eAddr:port2)にマップされた時点で、iAddr:port1 から来た任意のパケットは eAddr:port2 から送られる。任意の外部ホストはパケットを eAddr:port2 宛に送ることによって iAddr:port1 に送ることができる。 |  |
| (Address-)Restricted cone NAT  - 内部アドレス(iAddr:port1)は外部アドレス(eAddr:port2)にマップされた時点で、iAddr:port1 から来た任意のパケットは eAddr:port2 から送られる。外部ホスト(hostAddr:任意)は iAddr:port1 が hostAddr:任意 にパケットを送ったことがある場合にのみ、eAddr:port2 にパケットを送ることによって、パケットを iAddr:port1 に送ることができる。"任意" はポート番号が何でもよいということを意味する。 |  |
| Port-Restricted cone NAT Address-Restricted cone NATのように振る舞うが、ポート番号も制限される。   - 内部アドレス(iAddr:port1)は外部アドレス(eAddr:port2)にマップされた時点で、iAddr:port1 から来た任意のパケットは eAddr:port2 から送られる。外部ホスト(hostAddr:port3)は、 iAddr:port1 が hostAddr:port3 にパケットを以前に送った場合にのみ、 eAddr:port2 にパケットを送ることによって、パケットを iAddr:port1 に送ることができる。 |  |
| Symmetric NAT  - 同一内部IPアドレスとポートから特定の宛先IPアドレスに対する要求は全て、唯一の外部ソースIPアドレスとポートにマップされる 異なる宛先に対しては、同一内部ホストがたとえ同じソースアドレスとポートでパケットを送っても、異なるマッピングが使われる。 - 内部ホストからのパケットを受け取った外部ホストのみがパケットを送り返すことができる。 |  |
|

この用語は多くの混乱を招く原因であった。なぜならそれは現実のNATの振る舞いを記述するには不適切であると判明したからである。多くのNATの実装はこれらの種類を組み合わせている。従ってCone/Symmetricという用語を使う代わりに、それぞれ固有のNATの振る舞いに言及する方がよい。特に、大抵のNAT変換装置は外部に出て行く方向への接続に対するSymmetricNATと静的ポートマッピングとを組み合わせている。外部アドレスとポートに入ってくるパケットは特定の内部アドレスとポートにリダイレクトされる。いくつかの製品は、例えば何台かのサーバの間に負荷を分散するために、複数の内部ホストにパケットをリダイレクトできる。しかしながら、これは多くの相互接続パケットが存在するような、より複雑な通信の場合に問題を引き起こす。従って滅多に使われることはない。RFC 4787では、観測された動作に関する標準的な用語を導入することで、混乱の緩和を試みている。

多くのNATの実装はポート維持設計に従う。 ほとんどの通信において、NATは内部と外部のポート番号として同じ値を使う。 しかしながら、2つの内部ホストが同じポート番号を使って同じ外部ホストと通信しようとするならば、2番目のホストによって使われる外部ポート番号はランダムに選ばれる。このようなNATは、時にはRestricted cone NATのように見え、別の時にはSymmetric NATのように見える。

## 関連技術

### Connection Tracking機能

NATやNAPTではFTPやSIPなどのVoIPなどうまく動作しないアプリケーションがあるため、さらにコネクションとトラッキングすることでそれらに対処した技術。Linuxのiptablesなどで実装されている。

### GapNAT機能

住友電工製のADSLモデムに内蔵のルータに実装されたDMZを実現する機能の名称。 1つのグローバルIPアドレスしか提供されないIP接続サービス環境下において、DHCPによりローカルの一つのコンピュータにグローバルIPアドレスを割り当て、それ以外のコンピュータにはローカルIPアドレスを割り当てる。これによって、グローバルIPアドレスを割り当てられたコンピュータは、グローバルIPアドレスを直接使用しなければならないネットワークアプリケーションを動作させることができる。

### UPnP の規定するInternet Gateway Device(IGD)

UPnPのインターネットゲートウェイデバイス(IGD)仕様に準拠したNATルータは,それに対応したアプリケーションから様々な操作(Action)を受け付けることが可能である。この動作の中に、ポートマッピングを作成・削除・情報取得を行う操作(Action)がある。UPnP NAT Traversalとも呼ばれる。

これにより、使用するアプリケーションがポートマッピングを要求する場合、従来はユーザーがNATルータに例えばwebブラウザからアクセスするなどして、手動で設定を加えなければならなかったものが、アプリケーション自身が直接ルーターにアクセスしポートマッピングのエントリーを追加・削除できるようになった。

市場に出回る「ブロードバンドルータ」などの商品名のもので「UPnP機能搭載」や「UPnP NAT Traversal対応」などと書かれている製品がこれに当たる。

## IPv4 IPv6間 NAT

2007年現在、IPアドレス枯渇問題で足りないとされているIPv4のIPアドレスであるが、将来的にはIPv6のIPアドレス体系に移行すれば、枯渇問題は解決すると見られている。しかし、その移行期間においてはIPv4とIPv6の双方のネットワークが混在することになり、両ネットワークを接続するNAT(プロトコル変換も行うためゲートウェイと呼ぶのが妥当)が必要となる。実際のゲートウェイの実装方法がRFC 2766によって提案されている。