コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
NAT とプライベートIP
NAT とプライベートIP
このレッスンで分かること
- NAT は内側のプライベート IP と外側のグローバル IP を変換する仕組みで、IPv4 アドレス枯渇を実質的に解決しました
- ポート番号も書き換える NAPT (IP マスカレード) が現代の主流
- 副作用として外部から内部へ直接アクセスできず、P2P 通信では STUN/TURN/ICE で NAT 越えを行います
NAT とプライベートIP とは
家庭内 LAN とインターネットをつなぐ NAT の仕組みを理解します。本レッスンでは、NAT とプライベートIP の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
NAT 方式の整理
| 方式 | 別名 | 仕組み | 主な利用シーン |
|---|---|---|---|
| 静的 NAT | 1:1 NAT | 内部 IP 1 つ ↔ 外部 IP 1 つ | 公開サーバー用 |
| 動的 NAT | プール NAT | 内部 IP を外部 IP プールから動的割当 | 古典企業 LAN |
| NAPT (PAT) | IP マスカレード | 複数内部 IP を 1 つの外部 IP に多重 (ポート書換) | 家庭/小規模 LAN の標準 |
| CGNAT | キャリアグレード NAT | ISP 側で巨大 NAT を実施 | モバイル回線、一部 ISP |
副作用: NAT 越しの内部端末への着信は基本不可。P2P 用途では STUN/TURN/ICE で NAT 越え。
このレッスンで学ぶこと
家庭やオフィスのプライベート LAN がインターネットにつながる仕組み、NAT (Network Address Translation) を学びます。IPv4 アドレス枯渇を救った技術です。
NAT とは
NAT は、プライベート IP アドレスとグローバル IP アドレスを変換する仕組みです。多くの場合は家庭の Wi-Fi ルーターや企業のゲートウェイに組み込まれています。
家の中の PC が 192.168.1.50 (プライベート IP) から noimancode.com (グローバル IP) にアクセスするとき、ルーターは送信元 IP を自分のグローバル IP に書き換えてから外に出します。返事が返ってきたら逆方向に書き換え、内部の PC へ届けます。
なぜ NAT が生まれたか
IPv4 のアドレスは約 43 億個しかなく、世界中の端末すべてにグローバル IP を割り当てるのは不可能でした。「組織の中ではプライベート IP を自由に使い、外に出るときだけグローバル IP に変換すれば、グローバル IP は 1 つ (= プロバイダから割り当てられた 1 個) でも何百台もの端末を収容できる」というアイデアが NAT です。
NAT のおかげで IPv6 移行が遅れた
IPv6 は 1998 年に規格化されましたが、NAT のおかげで「IPv4 のまま十分やっていける」状態が長く続きました。これが結果として IPv6 普及を遅らせた大きな要因のひとつです。
NAPT (IP マスカレード)
実は今 NAT と呼んでいる仕組みの大半は NAPT (Network Address Port Translation) です。IP アドレスだけでなくポート番号も書き換えることで、1 つのグローバル IP に多数の内部端末を相乗りさせます。
たとえば家のルーターが下記のような変換テーブルを持ちます。
| 内部 IP:ポート | 外部 IP:ポート | 宛先 |
|---|---|---|
| 192.168.1.50:51234 | 203.0.113.5:62345 | noimancode.com:443 |
| 192.168.1.51:48901 | 203.0.113.5:62346 | google.com:443 |
| 192.168.1.52:55012 | 203.0.113.5:62347 | github.com:443 |
ポート番号が違うので、戻ってきたパケットがどの内部端末向けかを一意に決められます。
外から内部にアクセスできない
NAT の副作用として、外部から内部端末への通信は基本的にできません。外から見えるのはルーターの 1 つのグローバル IP だけで、その中の 192.168.x.x には直接アクセスできないからです。
これは「セキュリティ的にはありがたい」面と「サーバーを家で公開しづらい」面の両方があります。家で Web サーバーを公開したい場合は、ルーターでポートフォワーディング (例 — 外部 80 番への通信を内部 192.168.1.10 の 80 番に転送) を設定する必要があります。
CGNAT (キャリアグレード NAT)
モバイル回線や一部のプロバイダでは、ユーザーにグローバル IP を割り当てず、キャリア側で大規模 NAT (CGNAT) を行うことが増えています。これにより外部から到達不可能な構成になることが多く、ピアツーピア通信 (オンラインゲーム、VPN) で問題になることがあります。
NAT トラバーサル
P2P 通信 (ビデオ会議、オンラインゲーム、WebRTC) では NAT 越しに直接通信する必要があるため、STUN / TURN / ICE と呼ばれる NAT 越えの技術が使われます。
- STUN — お互いの外側 IP/ポートを公開サーバー経由で知る
- TURN — どうしても直接つながらないとき、中継サーバーを使う
- ICE — STUN/TURN を含めて複数の候補から最適経路を選ぶ
Zoom や Google Meet が裏側でやっている仕組みなので、頭の片隅に入れておくとビデオ会議系の障害対応がはかどります。
IPv6 と NAT
IPv6 はアドレスが潤沢なので、本来 NAT は不要です。すべての端末にグローバル IPv6 を直接付与する設計が想定されています。しかしセキュリティの慣習やルーター側の都合で、IPv6 でもファイアウォール的な「ステートフルフィルター」が標準で有効になっているケースが多く、結果として家庭利用では NAT に近い体験になります。
まとめ
このレッスンの要点は、NAT と NAPT / IPv4 延命と IPv6 / NAT トラバーサル の 3 点です。実務でこれらを切り分けて説明できるようになると、設計レビューや障害対応の精度が一段上がります。
理解度チェック
Q. 家庭の Wi-Fi ルーターで使われている NAT 方式として最も一般的なものは?
- 静的 NAT (1:1)
- 動的 NAT (プール方式)
- NAPT (IP マスカレード) - 複数内部 IP を 1 つの外部 IP にポート多重
- CGNAT
答えを見る
正解は 3。家庭ルーターは 1 つのグローバル IP に複数の端末を相乗りさせる必要があるため、IP + ポートを書き換える NAPT (IP マスカレード) が標準です。
出典 (References)
- IETF RFC 3022 — Traditional NAT
- IETF RFC 1918 — Private IP Address Space
- IETF RFC 5389 — STUN (NAT 越え)
最終更新: 2026-05-28
関連レッスン
よくある質問
Q. このトピックは実務でどう役立ちますか?
A. DB のクエリ最適化、API 設計、データ構造の選択など、設計判断の根拠になります。表面的にライブラリを使うだけでなく「なぜそれが速いのか」を理解できると、性能問題を未然に防げます。コーディング面接でも頻出のテーマです。
Q. 計算量はどう求めれば良いですか?
A. ループのネストごとに掛け算する、再帰なら漸化式から解く、というのが基本です。Big-O 表記は定数倍と低次の項を無視するため、n の指数(n²、n log n など)に注目してください。最悪・平均・最良の 3 つを意識すると説得力が増します。
Q. 覚えるべき定番アルゴリズムは何ですか?
A. 二分探索、クイックソート/マージソート、BFS/DFS、ダイクストラ、DP の基本問題(フィボナッチ・ナップサック)が必修です。これらを「白紙から書ける」状態にすると、応用問題が一気に解けるようになります。
次のレッスン
次は ルーティングと経路選択 で、家庭内 LAN とインターネットをつなぐ NAT の仕組みを理解します を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- NAT の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. NAT とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
復習ミニクイズ
NAPT (IP マスカレード) で書き換えられる情報はどれですか