NAPT
IPアドレスに加えてポート番号も変換することで、1つのグローバルIPアドレスを、多数の端末で同時に共有できるようにするアドレス変換の方式。変換の対応は、ルータのNAT変換テーブルに記録される。
イマシルちゃんの解説
家庭内のパソコンやスマホからIPv4でインターネットへ接続するとき、端末ごとに外向けのIPアドレスを用意しなくてもよい方法があるんだ。
NAPTは、複数の端末で一つのグローバルIPアドレスを共有するアドレス変換方式だよ。
ネットワークの境界にあるルータが、送信元のIPアドレスと通信の窓口を表すポート番号の組を変換するんだ。
変換前後の対応を記録しておくことで、返ってきたデータも元の端末へ届けられるよ。
同じ外向けのアドレスを使っていても通信を区別できるから、限られたIPv4アドレスを複数の端末で使えるんだ。
この解説はわかりやすかったですか?
より深い解説
定義
NAPT(Network Address Port Translation)は、プライベートIPアドレスとポート番号の組を、グローバルIPアドレスとポート番号の組に変換する方式である。IPマスカレード、PAT(Port Address Translation)とも呼ばれる。1対1でアドレスだけを変換する(狭い意味の)NATと違い、多数の端末で1つのグローバルIPアドレスを共有できる。
変換前後の対応を記録する
内部の端末が外部に通信を始めると、ルータは変換の対応をNAT変換テーブルのエントリー(変換エントリー)として記録する。戻ってきたパケットは、このテーブルを見て、元の端末に届ける。
| 項目 | 例 | 誰が決めるか |
|---|---|---|
| 内部のIPアドレス(local IP address) | 192.168.10.13 | 端末 |
| 内部のポート番号(local port number) | 56124 | 端末 |
| 変換後のIPアドレス(registered IP address) | ISPから割り当てられたグローバルIPアドレス | ルータ |
| 変換後のポート番号(assigned port number) | 5001 | ルータ |
| プロトコル | TCP、UDP | 通信の種類 |
変換後のアドレスとポート番号は、ルータが自分の持つグローバルIPアドレスと、空いているポート番号から割り当てる。
同時に維持できる通信の上限
ポート番号の範囲だけでなく、装置が利用できる番号や再利用の条件、変換テーブルの大きさによって同時に維持できる通信数は変わる。同時に通信する端末と、1台あたりのセッションが増えると、番号やエントリーが枯渇して新しい通信の変換ができなくなる。一部の端末の通信だけが失敗する場合もある。
TCPとUDPのポート番号は16ビットで表すため、値の種類は2の16乗、つまり65,536通りである。独自の例として、三つの外部IPアドレスで全番号を使い、各番号を一つの通信だけに割り当てると仮定すると、組合せは3 × 65,536 = 196,608通りになる。ただし、これは条件を単純化した計算である。実際は利用しない番号や装置の上限があり、宛先の違いに応じて同じ外部側の組を再利用する実装もあるため、この積をそのまま装置の保証接続数にはできない。
次は、装置の上限が65,536エントリーで、1セッションにつき1エントリーを使うと仮定した独自の計算例である。
| 計算の例 | 値 |
|---|---|
| エントリー数の上限 | 65,536 |
| 1台あたりの最大セッション数 | 200 |
| 上限内に収まる台数 | 65,536 ÷ 200の整数部分 → 327台 |
| 600台が同時に使うのに必要なエントリー数 | 600 × 200 = 120,000 |
エントリーの保持時間
通信が終わったエントリーは、一定時間(保持時間)が過ぎると削除され、再利用される。
| 通信 | 保持時間の考え方 |
|---|---|
| TCP | SYN、FIN、RSTなどから接続状態を追跡し、状態別の保持条件やタイムアウトに従って削除する |
| UDP | 接続という概念がなく、終了がわからないため、最後の通信から一定時間(例:300秒)待って削除する |
UDPの保持時間が長いと、使われなくなったエントリーがテーブルに残り続ける。HTTP/3(QUIC)のようにUDPを使う通信が増えると、UDPの保持時間を短くすることで、テーブルを有効に使える。ただし、短くしすぎると、通信の途中でエントリーが消え、通信が切れてしまう。
TCPでも、FINを一つ受信しただけで直ちに対応を削除するとは限らない。片方向だけ通信を終えた状態や、終了処理の再送を考慮する必要がある。具体的な保持時間は装置の仕様と設定を確認する。
出口を変えると相手に見えるアドレスも変わる
NAPTを行う出口を変更すると、内部の端末のアドレスが同じでも、外部のサーバが見る送信元IPアドレスは変わり得る。次は同じ端末が別々の出口から通信する独自の例である。外部側の値には説明用のアドレスを使っている。
| 利用する出口 | 変換前 | 外部から見える値 |
|---|---|---|
| 旧出口 | 10.20.0.10 | 198.51.100.10 |
| 新出口 | 10.20.0.10 | 192.0.2.200 |
SaaSなどが送信元IPアドレスの許可リストで利用を制限している場合、新出口の値が未登録なら接続を拒否されることがある。経路が通じることと、サービスの利用条件を満たすことは別に確認する。 移行前に利用中の外部サービスと登録値を調べ、切替え後の値を許可する必要がある。
プロキシサーバを使う場合、NAPTが変換するのはプロキシから外部へ向かう通信である。端末がプロキシへ接続するときのアドレスを、そのまま外部サービスの許可リストへ登録するわけではない。
また、新しい装置にNAT変換テーブルの状態が引き継がれなければ、継続中の通信を正しく変換できない場合がある。外部から見えるアドレスやポート番号が変われば、通常のTCP接続をそのまま維持することもできない。経路の切替えだけで既存通信まで継続できると考えず、状態の引継ぎ条件やアプリケーションの再接続を確認する。特定の通信だけ旧出口へ残す必要がある場合は、ポリシーベースルーティングで対象と転送先を指定できる。
NAPTの課題
| 課題 | 内容 |
|---|---|
| 外部からの接続 | 外部から内部の端末に、直接接続を始められない(静的なポート転送の設定が必要) |
| アプリケーションへの影響 | 通信の中にIPアドレスを含むプロトコル(FTP、SIPなど)は、特別な対応(ALG)が必要 |
| ログの追跡 | 外部から見ると全員が同じアドレスなので、誰の通信かを調べるには、NAPTの変換ログが必要 |
ISP側で行うアドレス共有
キャリアグレードNAT(CGN)は、ISPなどの網内で利用者の通信を変換し、複数の利用者がグローバルIPv4アドレスを共有する構成である。家庭のルータだけで変換する場合に比べ、事業者側にも変換の管理が加わる。
RFC 6598で定められた100.64.0.0/10は、こうした事業者網内などで使うシェアードアドレスの範囲である。RFC 1918のプライベートアドレスとは別の範囲であり、インターネットへそのまま到達させるグローバルIPアドレスでもない。
CGNはIPv4アドレスの共有のための仕組みであり、それだけでIPv6しか扱えない端末とIPv4しか扱えない端末との形式の違いを解決するものではない。IPv4/IPv6トランスレーションと区別する。
参考資料
- RFC 3022:アドレスと通信識別子の変換、複数装置への切替え
- RFC 5382 §5:TCPの接続状態と変換状態の保持
- RFC 6598:事業者網で使うアドレス範囲
- Cisco:利用するポート範囲と宛先を含めた変換の実装例
- Microsoft:接続元のネットワークに基づく利用条件の実装例
実際の試験ではここに出る!全10問
ネットワークスペシャリスト
テクニカルエンジニア(ネットワーク)
- 午前