ssecutils
Network / Browser-native guide

NAT とポートフォワーディング

家庭用ルーターで何が起きているか、NAPT、UPnP、CGNAT、IPv6との関係を説明します。

6Zero tracking reading surface

家庭 LAN の素朴な疑問

家には PC・スマホ・タブレット・スマートスピーカーなど、たくさんのデバイスがインターネットに繋がっています。でも ISP からは グローバル IP アドレスが 1 つしか払い出されていません。なぜ全部から外に出られるのでしょうか?

答えが NAT(Network Address Translation)です。家庭用ルーターの中で常時動いている、地味だが偉大な仕組みを解説します。

プライベート IP とグローバル IP

まず前提として、IP アドレスには 2 種類あります:

  • グローバル IP: インターネット上で一意。ISP から割り当てられる
  • プライベート IP: 組織内 / 家庭内でのみ有効。RFC 191810.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 は徐々に役割を終えますが、それまでは現役プレイヤーであり続けるでしょう。

Tool companion

この記事と一緒に使えるツール

Related reading

関連記事