第2章 アドレスのしくみ|2-4|コース全体 19回中8本目
プライベートIPアドレスとNAT ― なぜ家のPCは 192.168 なのか
自宅のPCのIPアドレスがなぜ 192.168.x.x になるのか。プライベートIPアドレスとグローバルIPアドレスの違い、NATとNAPT(IPマスカレード)のしくみを解説します。
IPv4アドレスが足りないから、プライベートIPアドレスとNATを使う
IPv4アドレスは32ビットで表され、全部で 2³² = 約43億個 しかありません。 世界中のスマホ・PC・ルータすべてに1つずつグローバルなアドレスを配ると、とっくに足りなくなっています。
そこで家庭や社内などの閉じた範囲では、誰でも自由に使ってよいプライベートIPアドレスを使います。 自宅のPCが 192.168.x.x になっているのはこのためです。 そしてインターネットに出ていくときだけ、ルータがグローバルIPアドレスに変換します。 この変換の技術を広くNAT(Network Address Translation)と呼びます。 家庭用ルータで実際に使われているのは、NATの中でもNAPTと呼ばれる方式です(詳しくは後述)。
プライベートIPアドレスの範囲
プライベートIPアドレスとして使ってよい範囲は、RFC 1918という文書で3つに決められています。 インターネット上のグローバルIPアドレスとは重複しないように予約された範囲なので、 この範囲であれば誰が自分のネットワーク内で使っても問題になりません。
| 範囲 | CIDR表記 | アドレス数 | 主な用途 |
|---|---|---|---|
| 10.0.0.0 〜 10.255.255.255 | /8 | 2²⁴ = 16,777,216個 | 大企業向け |
| 172.16.0.0 〜 172.31.255.255 | /12 | 2²⁰ = 1,048,576個 | 中規模向け |
| 192.168.0.0 〜 192.168.255.255 | /16 | 2¹⁶ = 65,536個 | 家庭・小規模オフィス向け |
家庭用ルータでは、慣習として3つの範囲のうち一番小さい 192.168.0.0/16 が 初期設定に使われていることがほとんどです。自宅のPCのIPアドレスが 192.168.x.x になりやすいのはこのためです。
NATとは
NAT(Network Address Translation、ネットワークアドレス変換)は、 ルータが内部から外部へパケットを送り出すときに、送信元IPアドレス(プライベートIPアドレス)を グローバルIPアドレスに書き換える技術です。
戻りのパケットが届くと、ルータは逆の変換を行い、宛先をグローバルIPアドレスから 元のプライベートIPアドレスに書き換えて内部の機器に届けます。 この行き帰りの変換をルータが自動で行うことで、内部の機器はプライベートIPアドレスのままインターネットと通信できます。
NAPT(IPマスカレード)
ここまでのNATは、プライベートIPアドレス1つにグローバルIPアドレス1つを対応させる方式です。 しかし家庭用ルータが持つグローバルIPアドレスは、ふつう1つだけです。それなのに家の中のスマホ・PC・テレビが 同時にインターネットへ接続できるのはなぜでしょうか。
実際に家庭用ルータで使われているのは、NATの中でもNAPTと呼ばれる方式です (NAPT = NAT + ポート番号の変換)。IPアドレスだけでなくポート番号も一緒に変換することで、 1つのグローバルIPアドレスを複数台の機器で同時に共有できます。日本ではIPマスカレードとも呼びます。 先ほどの郵便のたとえで言えば、部屋番号だけでなく荷物の宛名(ポート番号)も見て仕分けるイメージです。
ルータは内部から通信が発生するたびに、変換テーブルに対応関係を記録します。例えばこうなります。
| プライベートIP:ポート(内部) | グローバルIP:ポート(外部) |
|---|---|
| 192.168.1.10:50001 | 203.0.113.5:60001 |
| 192.168.1.11:50002 | 203.0.113.5:60002 |
| 192.168.1.10:50003 | 203.0.113.5:60003 |
戻りのパケットは、ポート番号(60001 など)を手がかりに どの内部機器宛かを判定し、正しいプライベートIPアドレスへ届けられます。
NATがあると何が困るか
NAT(家庭用ルータではNAPT)の変換テーブルは、内部から外部へ通信が発生したときに作られます。 逆に、外部から内部の機器へ最初に接続しようとしても、対応するエントリが変換テーブルにまだ無いため、 パケットをどの内部機器に届けてよいか分からず、届きません。
これが困るのは、自宅でWebサーバーやゲームサーバーを公開したい場合です。 そこでポート開放(ポートフォワーディング)という設定を使います。 「このポート宛の通信は、この内部機器へ送る」という固定のエントリを、ルータにあらかじめ手動で用意しておくことで、 外部からの最初の接続でも正しい機器に届くようになります。
IPv6ではどうなるか
IPv6のアドレス空間は 2¹²⁸ という、IPv4とは比較にならないほど広大な数です。 枯渇を心配する必要がないため、IPv6ではすべての機器にグローバルなアドレスを直接割り当てるのが基本設計であり、 NATを前提としません。プライベートIPアドレスとNATは、あくまでIPv4のアドレス不足を補うためのしくみです。
練習問題(全5問)
選んでから「採点する」を押すと、解説つきで答え合わせができます。
正解:IPv4アドレスの数が足りないから、世界で重複させずに使えるアドレスを節約するため
IPv4アドレスは2³² 個(約43億個)しかなく、世界中の全機器に1つずつ割り当てると足りません。家庭内やオフィス内など閉じた範囲ではプライベートIPアドレスを繰り返し使い、インターネットに出るときだけグローバルIPアドレスに変換することでアドレスを節約します。
正解:192.168.0.0/16
192.168.0.0〜192.168.255.255(192.168.0.0/16)の範囲内です。
正解:NATはIPアドレスだけを変換し、NAPTはIPアドレスとポート番号を変換する
NATは1つのプライベートIPアドレスを1つのグローバルIPアドレスに変換するだけです。NAPTはポート番号も使い分けることで、1つのグローバルIPアドレスを複数台の機器が同時に共有できます。家庭用ルータで実際に使われているのはほぼNAPTです。
正解:ポート番号を使い分けて、戻りのパケットがどのPC宛かを区別しているから
ルータは「プライベートIP:ポート」と「グローバルIP:ポート」の対応を変換テーブルに記録します。戻りのパケットはポート番号を手がかりに、元のPCへ正しく振り分けられます。
正解:NATの変換テーブルに対応するエントリがまだ無いから。ポート開放(ポートフォワーディング)で固定エントリを用意する
NAT(家庭用ルータではNAPT)の変換テーブルは、内部から外部へ通信が発生したときに作られます。外部からの接続を待つサーバーには対応するエントリが最初から存在しないため、パケットが届きません。ポート開放で「このポート宛は、この内部機器へ」という固定エントリをあらかじめ用意しておく必要があります。