NAPT
IPアドレスに加えてポート番号も変換することで、1つのグローバルIPアドレスを、多数の端末で同時に共有できるようにするアドレス変換の方式。変換の対応は、ルータのNAT変換テーブルに記録される。
イマシルちゃんの解説
おうちのWi-Fiには、パソコンもスマホもゲーム機もつながっているけど、
インターネットから見ると、みんな同じ1つの住所(グローバルIPアドレス)から来ているように見えるんだ。
これを実現しているのがNAPT!
ルータが「この通信はスマホの分」「これはパソコンの分」って、ポート番号を使い分けて区別しているんだよ。
その対応表がいっぱいになると、新しい通信ができなくなっちゃうから、ちょっと注意が必要なんだ。
より深い解説
定義
NAPT(Network Address Port Translation)は、プライベートIPアドレスとポート番号の組を、グローバルIPアドレスとポート番号の組に変換する方式である。IPマスカレード、PAT(Port Address Translation)とも呼ばれる。1対1でアドレスだけを変換する(狭い意味の)NATと違い、多数の端末で1つのグローバルIPアドレスを共有できる。
NAT変換テーブル
内部の端末が外部に通信を始めると、ルータは変換の対応を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つのグローバルIPアドレスで使えるポート番号は約6万5千であり、ルータのNAT変換テーブルにもエントリーの上限がある。同時に通信する端末と、1台あたりのセッションの数が多いと、テーブルがいっぱいになり(枯渇)、新しい通信の変換ができなくなる。その結果、一部の端末の通信だけが、不特定に失敗する。
| 計算の例 | 値 |
|---|---|
| エントリー数の上限 | 65,536 |
| 1台あたりの最大セッション数 | 200 |
| 同時に問題なく使える台数 | 65,536 ÷ 200 = 327.68 → 327台 |
| 600台が同時に使うのに必要なエントリー数 | 600 × 200 = 120,000 |
エントリーの保持時間
通信が終わったエントリーは、一定時間(保持時間)が過ぎると削除され、再利用される。
| 通信 | 保持時間の考え方 |
|---|---|
| TCP | SYN、FIN、RSTを見て接続の開始と終了がわかるため、終了したらすぐに削除できる |
| UDP | 接続という概念がなく、終了がわからないため、最後の通信から一定時間(例:300秒)待って削除する |
UDPの保持時間が長いと、使われなくなったエントリーがテーブルに残り続ける。HTTP/3(QUIC)のようにUDPを使う通信が増えると、UDPの保持時間を短くすることで、テーブルを有効に使える。ただし、短くしすぎると、通信の途中でエントリーが消え、通信が切れてしまう。
NAPTの課題
| 課題 | 内容 |
|---|---|
| 外部からの接続 | 外部から内部の端末に、直接接続を始められない(静的なポート転送の設定が必要) |
| アプリケーションへの影響 | 通信の中にIPアドレスを含むプロトコル(FTP、SIPなど)は、特別な対応(ALG)が必要 |
| ログの追跡 | 外部から見ると全員が同じアドレスなので、誰の通信かを調べるには、NAPTの変換ログが必要 |