最終更新:

NATの仕組み ― 家のルーターはどうやってIPアドレスを変換しているのか


NAPT:外側IPをポートで共有

スマホPCルーター変換表外側IP共有TCPの変換表(例)端末側 →外側192.168.1.10:50000203.0.113.1:30001192.168.1.20:50001203.0.113.1:30002
送信時の経路を示した簡略図です。返事は変換状態と照合して元の端末へ戻します。アドレスとポートは説明用で、NATの全方式を表す図ではありません。
ひよこ ひよこ
家のWi-FiにスマホとPCをつないでいるのに、外から見るIPアドレスは同じなの?
ペンギン先生 ペンギン先生
IPv4の接続では、ルーターがアドレスを変換して共有している場合があるよ。NATはIPアドレスの変換のこと。さらにTCPやUDPのポート番号も使って、複数端末が1つの外側アドレスを共有する仕組みがNAPTだよ。
ひよこ ひよこ
どうして住所を共有する必要があるの?
ペンギン先生 ペンギン先生
IPv4は32ビットで、アドレス空間は約43億個。ただし全部を端末へ割り当てられるわけではないよ。家の中ではプライベートアドレスを使い、外へ出るところで変換すると、外側のアドレスの消費を抑えられるんだ。
ひよこ ひよこ
返事が来たら、どっちの端末へ戻すか迷わない?
ペンギン先生 ペンギン先生
ルーターが変換の対応を記録するんだ。図ではスマホとPCの通信を外側の異なるポートへ対応付けているよ。戻ってきた通信を対応表と照合して、元の宛先へ書き換える。実際の照合条件にはプロトコルや相手側も関わるよ。
ひよこ ひよこ
送信元を書き換えるのと、宛先を書き換えるのは別なの?
ペンギン先生 ペンギン先生
そうだね。SNATは送信元、DNATは宛先の変換を指すよ。家庭の外向き通信は送信元変換の例。外からの特定ポートを内部サーバーへ向けるポート転送は宛先変換の例だよ。公開設定にはファイアウォールなども関わるんだ。
ひよこ ひよこ
オンライン通話では、端末同士でつなぐのが難しくならない?
ペンギン先生 ペンギン先生
外から始まる通信を内側へ届けられるとは限らないから、NAT越えを考える必要があるよ。WebRTCではSTUNで外側のアドレス・ポートの候補を得たり、TURNで中継したりする。ICEは候補の優先順位と接続確認に基づいて通信経路を選ぶ仕組みだよ。
ひよこ ひよこ
プロバイダ側でも変換していることがあるの?
ペンギン先生 ペンギン先生
あるよ。CGNATでは、プロバイダが複数契約者の通信を変換する。100.64.0.0/10はそのための共有アドレス空間で、192.168.x.xなどのRFC 1918のプライベート範囲とは別だよ。家のルーターだけでポート転送を設定しても公開できない場合があるんだ。
ひよこ ひよこ
IPv6ならNATのことは全部忘れていい?
ペンギン先生 ペンギン先生
IPv6はアドレス空間が広く、IPv4のアドレス節約用NAPTは基本的に不要だよ。ただしIPv4へ接続するNAT64など、変換が使われる場面はある。IPv6で届くかどうかも、アドレスの種類、ルーティング、ファイアウォールの設定によるんだ。
ひよこ ひよこ
NATがあれば安全、というわけではないんだね?
ペンギン先生 ペンギン先生
その通り。NATはアドレス変換、ファイアウォールは通信を許可・拒否するルールだよ。同じルーターに両方が入っていても役割は違う。外から届く通信の制御、端末の更新、認証などは、それぞれ確認しよう。

変換表を一行ずつ追ってみよう

図はTCP通信のNAPTを簡略化した例です。スマホの 192.168.1.10:50000 を、ルーターの外側では 203.0.113.1:30001 として送る、と考えます。外側の同じIPでも、PCの通信には別のポートを対応付けられます。

端末側の送信元外側の送信元(例)
スマホ:192.168.1.10:50000203.0.113.1:30001
PC:192.168.1.20:50001203.0.113.1:30002

203.0.113.1 は説明用のアドレスです。番号は実際の家庭に固定で使われる値ではありません。返事を戻すには対応する変換状態が必要で、タイムアウトなどで消えることもあります。プロトコルや相手側を含む詳しい対応・フィルタリングは機器の方式によって異なります。

接続トラブルを調べるなら、まず「端末のアドレス」「ルーターの外側のアドレス」「プロバイダ側の変換の有無」を分けて確認しましょう。次はIPv4とIPv6の比較とファイアウォールの仕組みで、それぞれの役割を整理できます。

参考資料