中級ではNAPTがIP+ポートの組で多重化することを見ました。上級では、変換表の中身・NATの型による外向きの振る舞いの違い・対称なほどP2Pが難しい理由・NATを越える手段(STUN/TURN・ポート開放)・CGNAT・IPv6でNATが消える話を掘り下げます。
概要 — まず全体をつかむ
詳細 — 1段階ずつ追う
変換表の中身と「外から入れない」理由
家庭用ルーターが行うのはNAPT(IPマスカレード)でした。その心臓部が変換表です。1エントリは単なる1対1ではなく、5つの組(5タプル)で通信を識別します。
- プロトコル(TCP/UDP)
- 内側の 送信元IP+ポート
- 外側の 送信元IP+ポート(ルーターが割り当てた公開側)
- 宛先IP+ポート
ポート番号はトランスポート層の概念で、どの層が何を担うかは ネットワークの階層 で押さえられます。返信が来ると、ルーターは宛先の公開IP+ポートを鍵に変換表を引き、内側の本来の相手へ戻します。
アニメーション『IPアドレスとポート番号』を開く
アニメーション『NAT(プライベートIPを公開IPに変換)』を開く
ここから「外から始まる通信が入れない」理由がはっきりします。変換表のエントリは内側発の通信でしか作られないからです。外から突然来たパケットには対応するエントリがなく、ルーターは戻し先を決められないため破棄します。これは欠陥ではなく、結果として簡易なファイアウォールとして働き、VPC のプライベート側の設計思想にもつながります。
やさしく言うと(中級)
家庭用ルーターが実際に行うのは、単なるIP変換ではなくNAPT※1(IPマスカレード)です。IPアドレスとポート番号の組で通信を区別し、複数機器を1つの公開IPに多重化します。
- 各機器の「プライベートIP+ポート」を、「公開IP+別のポート」に付け替える
- どの通信をどの機器へ戻すかを、変換表に記録しておく
- だから公開IPが1つでも、家族の通信が混ざらずに並行できる
登場人物メモ:
- ※1 NAPT/IPマスカレード — IPとポートの組で複数機器を1つの公開IPに束ねる方式
- ※2 ウェルノウンポート — 用途が決まった若い番号(80=HTTP、443=HTTPS など)
NATの4つの型
「内側発の通信で穴が開く」と言っても、その穴がどこまでの相手に通じるかはNATの実装で変わります。外向きの挙動で4つに分類されます。
- フルコーン※1 — 内側が一度でも外へ出れば、その外側ポート宛の通信を誰からでも内側へ通す。最も緩い
- 制限コーン(アドレス制限)※2 — 一度通信したことのある宛先IPからの戻りだけ通す
- ポート制限コーン — 通信した宛先のIPとポートの両方が一致する戻りだけ通す
- 対称型(symmetric)※3 — 宛先が変わるたびに外側ポートも変える。最も厳しく、外から見た穴の位置が相手ごとに違う
前の3つ(コーン系)は「一度開いた穴の外側ポートが固定」なのに対し、対称型だけは穴が相手ごとに動くのが決定的な差です。
登場人物メモ:
- ※1 フルコーン — 一度開けば誰からでも通す最も緩い型
- ※2 制限コーン — 通信済みの相手からの戻りだけ通す型
- ※3 対称型 — 宛先ごとに外側ポートを変える最も厳しい型
対称NATとホールパンチング
P2P(端末どうしの直接通信・ビデオ通話やオンライン対戦)では、双方がNATの内側にいます。どちらも「外から入れない」ので、そのままでは繋がりません。ここで使うのがホールパンチングです。
- STUN※4 — 公開サーバに問い合わせ、自分が外からどの公開IP+ポートに見えているかを教えてもらう仕組み。この「外から見た穴」を相手に伝え合い、ほぼ同時に外へ発信すると、互いの変換表に戻り穴ができて直接繋がる
- なぜ対称型だと破綻するか — 対称型は宛先ごとに外側ポートを変える。STUNサーバ相手に観測した穴は、通信相手にはまったく別のポートになる。相手は穴の位置を予測できず、パンチが当たらない
- TURN※5 — パンチが無理なときの最終手段。公開サーバが中継点となり、両者のパケットを転送して橋渡しする。直接ではなくなるが確実に繋がる(その分サーバ負荷と遅延が増える)
つまり「STUNで直接を狙い、ダメならTURNで中継」が定石で、対称NATが混じるほどTURN頼みになります。
登場人物メモ:
- ※4 STUN — 自分が外からどう見えるか(公開IP+ポート)を教えてもらう仕組み
- ※5 TURN — 直接繋げないときに中継してくれる最終手段
ポート開放——手動とUPnP
外部から常時アクセスさせたいサーバ(自宅サーバ・ゲームホスト)には、変換表に固定の穴を用意します。
- ポートフォワーディング — 「この公開ポート宛は、この内側機器のこのポートへ」と手動で固定する設定
- UPnP/NAT-PMP — アプリが自分でルーターに穴開けを要求する仕組み。手動設定なしで繋がる利便がある一方、内部のアプリが勝手に外向きの口を開けられるため、マルウェアに悪用されうるセキュリティ上の懸念がある
CGNAT——NATが二段になる世界
IPv4アドレスの枯渇で、いまや公開IPすら足りません。そこでISPはCGNAT(キャリアグレードNAT)を導入します。
- 家庭ルーターが持つ「公開IP」が、実はISP内で多数の加入者が共有する住所で、その外側にもう一段のNATがある(NATの二段重ね)
- このため家庭側でポートフォワーディングを設定しても、外からの通信は家庭ルーターに届く前に上位NATで落ちる。自宅サーバ公開やP2Pが難しくなる
- 加えて、多数の加入者で公開IPとポートを分け合うためポート枯渇が起きやすい
- 回避策は固定グローバルIPの契約か、次のIPv6への移行
住所を見た経路判断と変換をまとめて担うのが ルーター です。
IPv6——そもそもNATが要らなくなる
ここまでの苦労(多重化・NAT越え・CGNAT)は、すべてIPv4の住所不足が生んだものでした。IPv6はこの前提を覆します。
- IPv6のアドレス空間は事実上無尽蔵で、各機器にグローバルアドレスを直接振れる。住所を使い回すためのNAPTが原理的に不要になる
- 各端末が固有の公開アドレスを持てるので、外から入れない問題やNAT越えの苦労が消える(P2Pが素直に繋がる)
- ただし「NATが簡易防御になっていた」面は失われるため、守りはファイアウォールで明示的に行う設計へ移る
- よくある誤解 — 「IPv6はNATを内蔵している」わけでも「暗号化でNATを代替する」わけでもない。そもそも多重化が要らないのが本質
⚠️ 大規模・分散ゆえの落とし穴
- 対称NAT同士でP2P不成立 — STUNが効かずTURN中継に頼るしかなく、遅延と中継コストが増える
- CGNAT配下でポート開放不能 — 家庭側の設定が上位NATに阻まれ、サーバ公開ができない
- UPnPの開けっぱなし — アプリやマルウェアが開けた穴が残り、意図しない口が外に晒される
- ポート枯渇 — 大量同時接続やCGNAT共有で、割り当てる一時ポートが尽きて新規接続が張れない
- 変換表のタイムアウト — 長時間無通信のエントリが消え、P2Pや常時接続がある日突然切れる
理解度チェック
そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問1. CGNAT(キャリアグレードNAT)配下の家庭で、ルーターにポートフォワーディングを設定してもサーバを外部公開できないことがある理由は?
問2. 対称型(symmetric)NATがP2P通信で最も厄介なのはなぜ?
問3. 本文のNATの4つの型のうち、「内側が一度外へ出れば、その外側ポート宛の通信を誰からでも内側へ通す」最も緩い型は?
問4. ホールパンチングが成立しないとき、公開サーバが中継点となって両者のパケットを転送する最終手段は?
問5. 本文によれば、IPv6でNAPTが「原理的に不要」になる本質的な理由は?
問6. UPnP/NAT-PMPが持つセキュリティ上の懸念として、本文が挙げるのは?
問7. NAPTの変換表が1つの通信を識別する「プロトコル・内側IPとポート・外側IPとポート・宛先IPとポート」の5つの組を何と呼ぶか答えてください。
問8. 自分が外からどの公開IPとポートに見えているかを、公開サーバに問い合わせて教えてもらう仕組みを英字4文字で答えてください。