第2章 アドレスのしくみ|2-4|コース全体 19本中8本目
プライベートIPアドレスとNATのしくみ
自宅の
前の記事 ・2-3 サブネットマスクの計算のやり方
IPv4アドレスが足りないから、プライベートIPアドレスとNATを使う
「IPアドレスの構造 ― 32ビットをどう読むか」で説明したように、IPv4アドレスは32ビットで、全部で 2³² = 約43億個 しかありません。世界中のスマホ・PC・ルータのすべてに重複しないアドレスを1つずつ配ると、とうてい足りません。
そこで、家庭や社内などの閉じた範囲では、誰でも自由に使ってよいアドレスを使います。これがプライベートIPアドレスです。自宅のPCが 192.168.x.x になっているのはこのためです。
インターネットに出ていくときだけ、ルータが世界で重複しないグローバルIPアドレスに変換します。この変換の技術をNAT(Network Address Translation)と呼びます。家庭用ルータで実際に使われているのは、NATの中でもNAPTという方式です。グローバルIPアドレスを誰が配るかと、自分のアドレスの確かめ方は、グローバルIPアドレスの記事で説明しています。
ルータは、内部から外部へパケットが出ていくときに送信元アドレスを書き換え、戻ってきたパケットでは宛先を元に戻します。NATの中心は、この行き帰りの対応を記録した表です。
プライベートIPアドレスの範囲
プライベートIPアドレスとして使ってよい範囲は、RFC 1918という文書で3つに決められています。どれもグローバルIPアドレスと重複しないように予約された範囲なので、誰が自分のネットワーク内で使っても問題になりません。
/8 や /16 のようなCIDR表記の読み方は、「サブネットマスクの計算のやり方」で説明しています。
| 範囲 | 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個 | 家庭・小規模オフィス向け |
192.168.0.0/16 は、3つの範囲のうち一番小さい範囲です。家庭用ルータの初期設定では、慣習としてほとんどの場合この範囲を使います。自宅のPCのIPアドレスが 192.168.x.x になることが多いのはこのためです。
NATとは
NATは、ルータが内部から外部へパケットを送り出すときに、送信元のプライベートIPアドレスをグローバルIPアドレスに書き換える技術です。日本語では、ネットワークアドレス変換と呼びます。
戻りのパケットが届くと、ルータは逆の変換を行います。宛先をグローバルIPアドレスから元のプライベートIPアドレスに書き換え、内部の機器に届けます。
この行き帰りの変換はルータが自動で行うので、内部の機器はプライベートIPアドレスのままインターネットと通信できます。
NATには、対応の決め方によっていくつかの種類があります。1つのプライベートIPアドレスに1つのグローバルIPアドレスを固定で対応させる方式が静的NATで、空いているグローバルIPアドレスをその都度割り当てる方式が動的NATです。
どちらもIPアドレスだけを1対1で変換するので、グローバルIPアドレスの数しか同時に通信できません。この制約をなくすのが、次に説明するNAPTです。
NAPT(IPマスカレード)
ここまでのNATは、プライベートIPアドレス1つにグローバルIPアドレス1つを対応させる方式です。しかし、家庭用ルータが持つグローバルIPアドレスは、ふつう1つだけです。それでも家の中のスマホ・PC・テレビが同時に接続できるのは、NAPTという方式を使っているからです。
NAPTは、NATにポート番号の変換を加えたものです。IPアドレスだけでなくポート番号も一緒に変換するので、1つのグローバルIPアドレスを複数台の機器で同時に共有できます。ポート番号は、通信するアプリを区別する番号です。詳しくはポート番号の記事で説明しています。
NAPTは、IPマスカレードとも呼びます。これは、Linuxがこの機能に付けた名前が広まったものです。
ルータは、内部から通信が発生するたびに、変換テーブルに対応を記録します。たとえば、次のようになります。
| プライベートIP:ポート | 通信相手 | グローバルIP:ポート |
|---|---|---|
| 192.168.10.25:50001 | 203.0.113.50:443 | 198.51.100.5:60001 |
| 192.168.10.26:50002 | 203.0.113.50:443 | 198.51.100.5:60002 |
| 192.168.10.25:50003 | 203.0.113.60:443 | 198.51.100.5:60003 |
表に通信相手の列があるのは、戻ってきたパケットが本当にその相手から届いたものかを照合するためです。ルータは、送信元IP:ポートだけでなく、宛先IP:ポートまで変換テーブルに記録しておきます。
ルータは、戻りのパケットの送信元を、記録した宛先と照らし合わせます。こうすると、想定していない相手から届いたパケットを誤って内部に通すことを防げます。どこまで厳しく照合するかは、ルータの実装によって異なります。
戻りのパケットは、変換テーブルの 198.51.100.5:60001 のエントリと照合され、正しいプライベートIPアドレスとポートである 192.168.10.25:50001 へ届けられます。
ポート番号を持たない通信は、NAPTではそのまま振り分けられません。VPNで使うIPsecのESPがその例で、この場合はUDPで包んでからNAPTを通過させます。UDPで包む仕組みは、IPsecの記事に図があります。
NATがあると何が困るか
NATの変換テーブルは、内部から外部へ通信が発生したときに作られます。家庭用ルータが使うNAPTでも同じです。
外部から内部の機器へ最初に接続しようとしても、対応するエントリは変換テーブルにまだありません。ルータはどの内部機器に渡せばよいか分からないので、パケットは届きません。
これで困るのは、自宅でWebサーバやゲームサーバを公開したい場合です。そこで、ポート開放という設定を使います。ポートフォワーディングとも呼びます。
ポート開放では、「このポート宛の通信は、この内部機器へ送る」という固定のエントリを、ルータにあらかじめ手動で登録します。こうしておけば、外部からの最初の接続でも正しい機器に届きます。登録する項目やUPnPとの違い、危険性は、ポート開放の記事にまとめています。
ただし、契約している回線によっては、ポート開放ができないことや、使えるポートが限られることがあります。どちらになるかは、NATをどこで行っているかで決まります。
CGNATやDS-Liteは、プロバイダ側の設備でNATを行います。どちらも、インターネットから見て家庭用ルータより手前で変換が行われます。そのため、家庭用ルータでポート開放を設定しても効果がありません。DS-Liteを使うサービスには、transixなどがあります。
CGNATでは、100.64.0.0/10 という共有アドレス空間を使います。この範囲は、RFC 6598で定められています。ルータの管理画面と確認サイトの値を比べると、自分の回線がCGNATかどうかの手がかりになります。見比べ方はグローバルIPアドレスの記事にあります。
一方、MAP-E方式では、家庭用ルータ自身がNATを行います。MAP-Eは、IPv4のパケットをIPv6網の上で運ぶIPv4 over IPv6の方式の1つで、MAP-Eを使うサービスにはv6プラスなどがあります。
MAP-Eでは、プロバイダ側にNATはありません。ただし、契約者ごとに使えるポート番号の範囲があらかじめ決まっているので、ポート開放ができるのはその範囲内のポートに限られます。
DS-LiteとMAP-Eは、どちらもIPoE方式の回線でIPv4を使うための技術です。IPoE自体の仕組みは、PPPoEとIPoEの記事で説明しています。
IPv6ではどうなるか
IPv6のアドレス空間は 2¹²⁸ で、IPv4とは比較にならないほど広く、枯渇を心配する必要はありません。そのため、IPv6の基本設計では、すべての機器にグローバルなアドレスを直接割り当てます。NATは前提にしていません。
プライベートIPアドレスとNATは、IPv4のアドレス不足を補うための仕組みです。IPv6のアドレス表記や種類、日本の家庭回線との関係は、IPv6の記事を読むと分かります。
NATとファイアウォールは別の仕組み
変換テーブルにエントリがない通信は、内部に届きません。この結果だけを見ると、NATが外部からの通信を防いでいるように見えます。しかし、NATはIPv4アドレスを節約するための変換技術です。
NATは、通してよい通信かどうかを積極的に判断する仕組みではありません。通信を許可するかどうかを判断するのはファイアウォールです。判断の仕組みは、ファイアウォールの記事で説明しています。公開サーバを社内LANから分けて守る構成は、DMZの記事を読むと分かります。
練習問題(全5問)
正解:IPv4アドレスの
IPv4アドレスは
正解:192.168.0.0/16
192.168.0.0〜192.168.255.255の
正解:NATは
NATは、
正解:ポート番号を
ルータは、
正解:NATの
NATの
選んでから「採点する」を押すと、解説つきで答え合わせができます。
おすすめの本 PR
この記事の内容を扱っている本です。
