NAT&NAPT

# はじめに
本日は一旦CCNAの範囲に戻ってNAT(とその技術を拡張したPAT)について学習していきたいと思います。

# 1.NAT(Network Address Translation)について
### 【1-1】概要
企業や家庭などの内部ネットワークではプライベートIPアドレスを使用しており、商用インターネットではグローバルIPアドレスを使用しています。
そのため、内部ネットワーク上のホストを商用インターネット(外部ネットワーク)に接続する場合は、プライベートIPアドレスをグローバルIPアドレスに変換する必要があります。(逆も然りです)
このようにIPアドレスを変換するのにNATやNAPTといった技術を使用します。

#### ・グローバルIPアドレス
インターネット上で使用できるIPアドレスで、世界中で一意となっています。
重複するアドレスは存在しません。
グローバルIPアドレスとして使用できる範囲は、プライベートIPアドレスとして使用できるもの(次の項目に記載あり)以外全てです。

#### ・プライベートIPアドレス
企業や家庭などの内部ネットワーク内で使用されるIPアドレスです。
グローバルIPアドレスとは違い、同一LAN内で重複しなければ問題ありません。
なお、プライベートIPアドレスとして使用できる範囲はRFC1918(インターネット技術に関する仕様を公開している文書の中で、プライベートIPアドレスに関して記載されているもの)によって以下の通り規定されています。
・10.0.0.0 - 10.255.255.255
・172.16.0.0 - 172.31.255.255
・192.168.0.0 - 192.168.255.255
<br>

### 【1-2】NAT技術を使用する理由
上の項目で記載した通りグローバルアドレスは世界で一意となっておりますので、インターネットが普及している現代ではIPアドレス不足の問題が生じてきました。
そこでIPアドレス枯渇の解決策となるのがアドレス変換技術のNAT(ダイナミックNATの方)とPATとなります。

具体的には、異なるネットワークの境界線にあるルータ/FW/ロードバランサーなどのNAT機能を持つネットワーク機器が、受け取ったIPヘッダ内の送信元アドレス(プライベートアドレス)を利用可能なグローバルアドレスに書き換えて転送してくれます。
上記に対する応答パケットが来た際は、宛先アドレスを元のプライベートアドレスに変換します。

NAT変換用に用意されたグローバルアドレスは、インターネットへの接続が必要になったホストが通信する際に使用され、不要になれば他に必要としているホストが使い回すことができます。
この技術によって、1つのグローバルアドレスを効率的に使用することができ、内部ネットワーク上のホストと同数のグローバルアドレスを用意する必要が無くなります。

また、1つのグローバルアドレスを複数ホストで使い回すことによって、内部ネットワークで割り当てられているホストのIPアドレス(本来のIPアドレス)をインターネット側から隠す事ができるため、セキュリティ面でもメリットがあります。
<br>

### 【1-3】NATに関する用語(CCNA/Ciscoにおいて)
CiscoではNAT変換における各アドレスを以下の通りに定義しています。
#### ・内部ローカルアドレス
内部ネットワーク上でホストに割り当てられたIPアドレスです。
外部ネットワーク上のホスト(以下[外部ホスト]と記載)からは見ることができません。
一般的にはプライベートアドレスです。

#### ・内部グローバルアドレス
外部ホストから見た送信元ホストのIPアドレスです。
一般的にはグローバルアドレスです。

#### ・外部ローカルアドレス
内部ホストが宛先として指定する、外部ホストのIPアドレスです。

#### ・外部グローバルアドレス
外部ホストが、所属するネットワーク上で実際に割り当てられているIPアドレスです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3950373/dcc2d2c4-f9c2-56ab-f7ca-a2aab3ca6bcb.png)
<br>

# 2.NATのアドレス変換方法について
NATの変換方法についても、以前の記事でまとめたルーティングのようにスタティックとダイナミックに分かれます。

#### 【2-1】スタティックNAT
スタティックNATは、管理者が手動で内部ローカルアドレスと内部グローバルアドレスを1対1で紐づけておく変換方法です。
内部ホストが外部ネットワークと通信を行う際は常に同じ内部グローバルアドレスに変換されます。

なお、この方法で登録された変換規則は、NAT変換情報を保有するNATテーブルに永続的に保有されます(管理者が再度手動で変更をかけない限り)。
異なるネットワークの境界にいるNAT機能をもった機器は、内部のホストからパケットを受け取ると、NATテーブルで検索し、検索結果に従って送信元アドレスを[内部グローバルアドレス]に書き換えた上でパケットを転送します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3950373/87b3ab4e-3b69-19fc-9234-2fd577a6aab6.png)
<br>

#### 【2-2】ダイナミックNAT
ダイナミックNATは、管理者が手動で内部ローカルアドレスと内部グローバルアドレスプール(NAT変換用に貸し出すためのグローバルIPアドレス達)を紐づけておく変換方法です。
通信が開始されたタイミングで、内部グローバルアドレスプール内で空いているアドレスを動的に割り当て、1対1で変換します。

あくまで1対1での変換となりますので、[同時に外部ネットワークに接続できるホストの台数=内部グローバルアドレスプールに登録されているIPアドレスの数]となります。
なお、全ての内部グローバルアドレスが使用されている時に新たに来たパケットについては、NAT変換を行っている機器にて破棄されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3950373/e6aad0f3-eff0-f183-95c0-6ca89237666f.png)
<br>

# 3.NAPT(Network Address Port Translation)について
項目1と2で記載したNATに関しては、用意されたグローバルアドレスの数よりも内部ホストの数が多い場合に、一部のホストがインターネットへ接続できない不便さもあり、グローバルアドレスの節約に有効な方法とは言えませんでした。
その問題を解消できるのがNAPT(IPマスカレードとも呼ばれます)です。
NAPTはNATの技術を拡張したもので、送信元IPアドレスだけでなく送信元ポート番号も一緒に変換します。

NAPTルータは内部ホストからパケットを受信すると、送信元IPアドレスと送信元ポート番号を対応付けてNATテーブルに登録しますが、既に同じポート番号がNATテーブル内に存在した場合は送信元ポート番号を一意のポート番号に変換します。
それによってNAPTルータは変換エントリの識別ができますので、一つの内部グローバルアドレスを複数の内部ローカルアドレスで共有することが可能となります。(同時接続化が可能です)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3950373/ba70a9cd-b17d-dd79-a973-3a0cb211dae8.png)



# おわり