NAPTとは
NAPTは、IPアドレスとTCPまたはUDPのポート番号を同時に変換し、複数の内部端末が一つの外部IPアドレスを共有できるようにする仕組みです。正式名称はNetwork Address Port Translation(ネットワーク・アドレス・ポート・トランスレーション)です。
NAPTは、IPアドレスとTCPまたはUDPのポート番号を同時に変換し、複数の内部端末が一つの外部IPアドレスを共有できるようにする仕組みです。
家庭用ルーターで「NAT」と表示される機能の多くは、実際にはNAPTです。製品や資料によってPAT(Port Address Translation/ポート・アドレス・トランスレーション)、IPマスカレードなどの名称も使われます。同じ外部アドレスを使っても、変換後のポート番号を変えれば応答の戻り先を区別できることが中心です。

変換表には、アドレスとポートの組が並ぶ
| 通信規則 | 内部側の送信元 | 外部側で見える送信元 |
|---|---|---|
| TCP | 192.168.1.10:53001 | 203.0.113.8:41001 |
| TCP | 192.168.1.11:53001 | 203.0.113.8:41002 |
| UDP | 192.168.1.12:60000 | 203.0.113.8:41003 |
往路で作った対応を、復路で逆に使う
内部端末が外部サーバーへTCPパケットを送ると、NAPT機器は送信元のプライベートIPアドレスと送信元ポートを変換します。外部サーバーは、変換後のグローバルIPアドレスとポートへ応答します。
戻ってきたパケットでは、その宛先アドレスと宛先ポートを表から照合し、元の内部アドレスとポートへ戻します。対応は永久ではなく、通信の終了や一定時間の無通信などで削除されます。対応が失われれば、届いた応答をどこへ戻すか判断できません。
外部から始める通信には、ポート転送などの設定が必要
外部から新しく届いたパケットには、往路で作った対応がありません。特定の外部ポートを特定の内部アドレスとポートへ結び付けるport forwarding(ポート・フォワーディング)を設定すれば、外部から内部サービスへ転送できます。
ただし、ポート転送はサービスを外部へ到達可能にする設定です。必要なポートだけに限定し、ファイアウォール、認証、ソフトウェア更新も同時に確認します。また、さらに事業者側のCGNATがある場合、家庭用ルーターだけに設定しても外部から届かないことがあります。
ポート番号はサービス名そのものではない
ポート番号にはよく使われる通信規則との対応がありますが、番号だけで通信内容が保証されるわけではありません。別のアプリが同じポートを使うことも、既定と異なるポートでサービスを待ち受けることもできます。NAPTは番号を通信の識別材料として扱い、アプリの意味を理解して振り分けているわけではありません。
ICMPの問い合わせ識別子など、TCP・UDPポート以外を変換する実装もあります。NAPTを「すべてのIP通信に必ずポート番号がある仕組み」と一般化しないようにします。
仕様の確認資料:RFC 3022「Traditional IP Network Address Translator」、RFC 2663「IP Network Address Translator Terminology」