NAT / NAPT — 1つの住所を皆で分け合う
家の中には、PC・スマホ・テレビと、インターネットにつなぐ機器がたくさんあります。でも、プロバイダから家に割り当てられるグローバルIPアドレスは、たった1つなのが普通です。どうやって何台もの機器が、1つの住所を分け合って通信しているのでしょう?
その魔法が NAPT(NAT の一種。IPマスカレードとも)です。ルーターが、出ていくパケットの送信元アドレスを自分のグローバルIPに書き換え、代わりにポート番号で「これはどの機器宛ての通信か」を覚えておきます。下の図1で各機器から送信してみてください。1つのグローバルIPを、ポート番号で見分けて配り分ける様子が見えます。
ポート番号が「宛先の鍵」になる
出ていくとき、ルーターは送信元を 192.168.0.10:51000 から自分の 203.0.113.7:40001 へ書き換え、その対応を変換表に記録します。サーバーから見える送信元は、どの機器も同じ 203.0.113.7。区別がつかなさそうですが、ルーターが割り当てたポート番号(40001, 40002…)が違うので大丈夫です。応答が 203.0.113.7:40001 宛てに返ってくれば、ルーターは変換表を逆引きして「これはPC宛て」と分かり、正しい機器へ届けます。
この仕組みのおかげで、わずかなグローバルIPアドレスで膨大な数の機器がインターネットを使えています(IPv4アドレス枯渇への現実解の1つ)。副産物として、外部から各機器へ勝手に入ってこられない(変換表に無い通信はルーターが捨てる)という、ゆるいセキュリティ効果もあります。一方で、外から自宅サーバーへ直接つなぎたいときはポート開放(ポートフォワーディング)を手動で設定する必要が出てきます。
- NAT
- プライベートIPとグローバルIPを相互変換する仕組み。
- NAPT
- ポート番号も使って、1つのグローバルIPを多数の機器で共有する方式。IPマスカレードとも。
- プライベートIP
- 192.168.x.x など、家庭や社内ネットワークの中だけで使える住所。
- ポートフォワーディング
- 外側の特定ポート宛ての通信を、内側の特定機器へ転送する手動設定。
まとめ
NAPTは、1つのグローバルIPを、ポート番号という背番号で見分けて多数の機器に共有させる仕組みです。ルーターは出ていく通信の送信元を自分のIPに着替えさせ、変換表に控えておき、戻ってきた応答を逆引きして正しい機器へ返します。図1で3台から続けて送信し、変換表に行が積み上がり、それぞれ別のポートで管理される様子を確かめてみてください。