NAPT

読み:なぷと / 英語表記:Network Address Port Translation

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

エントリーの保持時間

通信が終わったエントリーは、一定時間(保持時間)が過ぎると削除され、再利用される。

通信保持時間の考え方
TCPSYN、FIN、RSTなどから接続状態を追跡し、状態別の保持条件やタイムアウトに従って削除する
UDP接続という概念がなく、終了がわからないため、最後の通信から一定時間(例:300秒)待って削除する

UDPの保持時間が長いと、使われなくなったエントリーがテーブルに残り続ける。HTTP/3(QUIC)のようにUDPを使う通信が増えると、UDPの保持時間を短くすることで、テーブルを有効に使える。ただし、短くしすぎると、通信の途中でエントリーが消え、通信が切れてしまう。

TCPでも、FINを一つ受信しただけで直ちに対応を削除するとは限らない。片方向だけ通信を終えた状態や、終了処理の再送を考慮する必要がある。具体的な保持時間は装置の仕様と設定を確認する。

出口を変えると相手に見えるアドレスも変わる

NAPTを行う出口を変更すると、内部の端末のアドレスが同じでも、外部のサーバが見る送信元IPアドレスは変わり得る。次は同じ端末が別々の出口から通信する独自の例である。外部側の値には説明用のアドレスを使っている。

利用する出口変換前外部から見える値
旧出口10.20.0.10198.51.100.10
新出口10.20.0.10192.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トランスレーションと区別する。

参考資料

実際の試験ではここに出る!全10問

ネットワークスペシャリスト

午後Ⅰ
午後Ⅱ
午前Ⅱ

テクニカルエンジニア(ネットワーク)

午前

この用語が出てくる記事

↑