NATとポート — 家の住所を1つの公開住所にまとめる

上級の解説は準備中のため、上級の内容を表示しています。

概要 — まず全体をつかむ

中級では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アドレスとポート番号』を開く
届いたパケット宛先IP203.0.113.5宛先ポート443宛先IP → 建物宛先ポート443 → この窓口🏢 サーバ(1台)= 1つのIPアドレス203.0.113.580HTTP(Web・平文)443HTTPS(Web・暗号化)25SMTP(メール)22SSH(遠隔操作)同じ窓口でも「運び方」は2種類TCP 確実に届ける(再送・順序保証)UDP 速さ優先(確認を省く:通話・動画)
アニメーション『NAT(プライベートIPを公開IPに変換)』を開く
NAT — 私設IPを1つの公開IPに変換して外へ家庭内ネットワーク(192.168.x.x)端末1(家の中)192.168.1.11端末2(家の中)192.168.1.12端末3(家の中)192.168.1.13ルーター(NAT)私設IP → 公開IPに付け替え戻りは変換表で送信元=203.0.113.5インターネットNAT変換表(ポート番号で「誰宛てか」を区別)内側(私設IP : ポート)外側(公開IP : ポート)192.168.1.11 : 52001203.0.113.5 : 40001192.168.1.12 : 49770203.0.113.5 : 40002192.168.1.13 : 51234203.0.113.5 : 400031つの公開IP(203.0.113.5)を家じゅうで共有。ポート番号が違うから戻りも取り違えない

ここから「外から始まる通信が入れない」理由がはっきりします。変換表のエントリは内側発の通信でしか作られないからです。外から突然来たパケットには対応するエントリがなく、ルーターは戻し先を決められないため破棄します。これは欠陥ではなく、結果として簡易なファイアウォールとして働き、VPC のプライベート側の設計思想にもつながります。

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文字で答えてください。