家庭 LAN の素朴な疑問
家には PC・スマホ・タブレット・スマートスピーカーなど、たくさんのデバイスがインターネットに繋がっています。でも ISP からは グローバル IP アドレスが 1 つしか払い出されていません。なぜ全部から外に出られるのでしょうか?
答えが NAT(Network Address Translation)です。家庭用ルーターの中で常時動いている、地味だが偉大な仕組みを解説します。
プライベート IP とグローバル IP
まず前提として、IP アドレスには 2 種類あります:
- グローバル IP: インターネット上で一意。ISP から割り当てられる
- プライベート IP: 組織内 / 家庭内でのみ有効。RFC 1918 で
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16が予約されている
家庭の各デバイスはルーターから プライベート IP(典型的には 192.168.x.x)を DHCP でもらいます。これだけでは外に出られません(インターネット側はプライベート IP 宛のパケットを捨てる)。
NAT は「住所を書き換える」仕事
家庭ルーターは内側にプライベート IP、外側にグローバル IP の 2 つの顔を持ち、パケットが通るときに送信元アドレスを書き換えます。
PC (192.168.1.5) Router (内: 192.168.1.1 / 外: 203.0.113.10) Internet
192.168.1.5 → ──→─ [NAT] ──→─ 203.0.113.10 → ──→─ example.com:443
戻りパケット:
example.com:443 → ──→─ 203.0.113.10 → ─[NAT]─ ──→─ 192.168.1.5ここで肝心なのは、戻りパケットを正しく PC に届けること。家には複数デバイスが繋がっているので、ルーターは「どの内部 IP からの通信か」を覚えておく必要があります。
NAPT(PAT): ポート番号も使った管理
実際に家庭ルーターで動いているのは NAPT(Network Address Port Translation) または PAT と呼ばれる仕組みで、IP アドレスに加えてポート番号も書き換えることで複数台の同時通信を識別します。
PC1 (192.168.1.5:54321) ──→ Router (203.0.113.10:60001) ──→ example.com:443
PC2 (192.168.1.6:54321) ──→ Router (203.0.113.10:60002) ──→ example.com:443
↑ 両方ともクライアント側ポートが 54321 でも、
ルーターが別の外向けポートに書き換えるので衝突しないルーターは「外向けポート 60001 → 内側 192.168.1.5:54321」というマッピングテーブルを動的に保持しています。戻りパケットはこのテーブルを引いて正しい PC に届けられます。
通称「NAT」と呼ばれているもののほとんどは、実は厳密には NAPT のことです。
ポートフォワーディング: 外から内へ呼ぶ
通常の NAT は「内側から外側への通信」を可能にしますが、逆向き(インターネットから家の中のサーバーへ)はできません。マッピングが内側起点でしか作られないからです。
外から特定のデバイスにアクセスさせたい場合(自宅でゲームサーバーを公開する等)、ポートフォワーディングを設定します。
Router 設定: 外側:25565 (TCP) → 内側:192.168.1.10:25565
↑ 例: Minecraft サーバー
外から 203.0.113.10:25565 に来た TCP は、
ルーターが 192.168.1.10:25565 に転送するセキュリティ上の注意:ポートフォワーディングを設定したサービスは 世界中からアクセス可能になります。サービスに脆弱性があれば即座に突かれます。古いバージョンのソフトを公開しないこと、強い認証を必須にすることが重要です。
UPnP: 自動ポートフォワーディングのリスク
ゲーム機やビデオチャットアプリが「ルーターに自動で穴を開ける」仕組みが UPnP(Universal Plug and Play)です。便利な反面、家の中のマルウェアが任意のポートを開けてしまうセキュリティリスクがあります。
必要なら明示的にポートフォワーディングを設定し、UPnP は無効化するのが安全側の選択です。
CGNAT: ISP も NAT する時代
IPv4 アドレスはすでに枯渇しているため、最近の格安回線・モバイル回線では CGNAT(Carrier-Grade NAT)が使われています。これは ISP 側で複数の家庭をまとめて NAT する仕組みです。
PC ─→ 家庭ルーター(NAT) ─→ ISP CGNAT ─→ Internet
(192.168.x.x) (100.64.x.x) (1つのグローバルIPを多数で共有)CGNAT 環境では:
- 家庭側からポートフォワーディングを設定しても、ISP の CGNAT で塞がれて外から入って来られない
- 自宅サーバー公開・ゲームのホスト立てが困難
- VPN(Tailscale 等)や Cloudflare Tunnel 等の逆向きトンネルで迂回するのが定番
CGNAT 帯域として 100.64.0.0/10 が予約されています(家のルーターの WAN 側がこの範囲なら CGNAT 環境)。
IPv6 では NAT は要らない
IPv4 アドレス枯渇の苦肉の策が NAT でしたが、IPv6 はアドレス空間が事実上無限(2^128 個)あるため、すべてのデバイスにグローバルアドレスを直接割り当てられます。
IPv6 では NAT は基本的に使われず、代わりに「ファイアウォールで内側を守る」設計が標準です。NAT が「アドレス節約のための副作用としてセキュリティになっていた」面を改めて意識する必要があります(NAT があるから安全、ではなく、明示的にファイアウォールを設定する)。
NAT が苦手なもの
NAT は便利ですが、P2P 通信(端末同士の直接接続)が苦手です。両方が NAT の内側にいると、お互いに「外向きパケットしか出せない」ため、直接繋がれません。これを解決する技術が:
- STUN / TURN / ICE: WebRTC 等で使う NAT トラバーサル技術
- UDP hole punching: 双方が同時に外に出ることで一時的な穴を作る
- リレーサーバー経由: 中継サーバーを介して通信
おわりに
NAT は「IPv4 アドレス枯渇に対する応急処置」として生まれましたが、結果的に「内側を一定守ってくれる便利な箱」として広く普及しました。家庭ルーターを買うとデフォルトで動いているので、ありがたみを感じる機会は少ないですが、自宅でサーバーを動かしたり、CGNAT 環境で困ったりして初めて意識します。
IPv6 への移行が進むと NAT は徐々に役割を終えますが、それまでは現役プレイヤーであり続けるでしょう。