この記事の最終更新日: 2025年5月7日
はじめに
家庭や企業のネットワークでは、プライベートIPアドレス空間とグローバルIPアドレス空間のギャップを埋めるためにNAT(Network Address Translation:ネットワークアドレス変換)が欠かせません。
NATは、限られたIPv4アドレスを効率的に使うための技術で、家庭用ルーターや企業ネットワークで標準的に使われています。しかしその一方で、外部からの通信がブロックされるため、P2P通信やオンライン会議など、双方向の通信を必要とするアプリケーションでは問題となる場合があります。
このような制限を乗り越えて通信を成立させるための仕組みが「NAT越え(NAT Traversal)」です。本記事では、NATの仕組みや種類、そしてNAT越えの必要性と代表的な技術について、初心者にもわかりやすく丁寧に解説します。

1. NATの基礎知識
1-1. なぜNATが必要か
インターネットは、通信を行うためにIPアドレスという識別子を必要とします。現在主流のIPv4は、約43億個のアドレスしかなく、すべての機器にグローバルIPを割り当てるには足りません。
その解決策として登場したのが「プライベートIPアドレス」と「NAT」です。プライベートIPは、社内や家庭内など限られたネットワーク内で自由に使えるアドレス帯で、NATによってこれらのアドレスをグローバルIPに変換することで、外部との通信を実現します。
1-2. NATの動作原理
例として、家庭のパソコンがWebサイトにアクセスする場合を考えてみましょう:
- パソコン(192.168.0.2)が「example.com」にアクセス
- ルーターは送信元アドレスを「203.0.113.10:40000」のように変換(NAT変換)
- WebサーバーはルーターのIPに応答を返す
- ルーターは変換表を参照して、元のパソコンに応答を転送
このように、1つのグローバルIPアドレスを複数の端末が共有し、通信の整合性を保つことができます。
1-3. 主なNATタイプ
種類 | 説明 | 用途例 |
---|---|---|
スタティックNAT | 1つのプライベートIPに対して1つのグローバルIPを固定割当 | Webサーバーの公開 |
ダイナミックNAT | グローバルIPのプールから空いているものを動的に割り当てる | グローバルIPが複数ある企業 |
NAPT(PAT) | 複数のプライベートIPを1つのグローバルIPにポート番号でマッピング | 家庭用ルーターなど |
1-4. NATの動作制限とその分類(NATの挙動タイプ)
NATには「コーン型(Cone NAT)」と「シンメトリック型(Symmetric NAT)」という動作パターンの違いがあり、NAT越えの難易度に関係します:
タイプ | 特徴 |
---|---|
フルコーンNAT | 一度外部に送信すれば、誰からの応答も受け取れる |
制限コーンNAT | 最初に通信したIPアドレスからの応答だけ受け取れる |
ポート制限コーンNAT | 最初に通信したIPアドレスとポートが完全一致しないと応答不可 |
シンメトリックNAT | 外部ごとに異なるポートを使うため、応答ルートが確立しづらい |
シンメトリックNATはNAT越えが難しく、TURNサーバーなどの中継が必要になるケースが多くなります。
より詳しく知りたい方はこちらの記事へ
2. NAT越えが必要となるシナリオ
- P2P通信アプリ(Skype、Zoom、Discordなど)
- WebRTCを利用した音声・映像通話や画面共有
- オンラインゲーム
- 遠隔地のIoTデバイス制御
- VPNによるリモートアクセス
これらの通信では、クライアント同士が「お互いに直接通信する」必要がありますが、NATの内側にいる場合、外部から直接接続できないため、NAT越えの仕組みが求められます。
3. NAT Traversalの主要技術

3-1. ホールパンチング(Hole Punching)
クライアントがあらかじめ外部にパケットを送ることでNATの変換表にエントリを作り、そこに外部から応答してもらう手法です。
- UDPホールパンチング:軽量で高速。STUNでグローバルIP/ポートを知った後、クライアント同士が直接パケット交換
- TCPホールパンチング:NATによってブロックされやすく、UDPより成功率は低い
3-2. STUN(Session Traversal Utilities for NAT)
- 役割:自分のグローバルIPアドレスとポート番号を調べる
- 動作:STUNサーバーに問い合わせ、戻ってきたIP/ポートを確認
- 用途:WebRTCなどのP2P接続で使用(候補収集に使われる)
3-3. TURN(Traversal Using Relays around NAT)
- 役割:NAT越えが失敗した場合の“保険”として中継通信を行う
- 特徴:通信は安定するが、すべてのトラフィックがTURNサーバーを経由するため負荷が高い
3-4. ICE(Interactive Connectivity Establishment)
- 目的:STUNやTURNを組み合わせ、最も効率のよい通信経路を自動的に選ぶ仕組み
- 手順:候補となるIP/ポートのリスト(ICE候補)を収集 → 相手と交換 → 接続可能な経路をチェック → 最適経路で接続
4. WebRTCでの具体的な活用例
WebRTCは、ブラウザ間での音声・映像通信、データ通信を可能にするオープン技術です。
NAT越えのために内部的にICE、STUN、TURNを使って以下のように動作します:
RTCPeerConnection
オブジェクトを生成し、STUN/TURNサーバーを設定createOffer()
を使って通信条件(SDP)を生成し、相手に送信onicecandidate
イベントで取得したICE候補を都度相手に伝達- 双方のブラウザで接続可能な候補が見つかると、P2P通信が開始
5. セキュリティや運用上の注意点
- UPnPの過信は禁物:自動ポート開放は便利だが、脆弱性に繋がる可能性があるため、安全性に配慮する必要あり
- TURNサーバーは資源負荷が高い:できればSTUNや直接通信で済ませ、TURN利用は最小限に
- ログとプライバシー:NAT越えの候補にはIPアドレスやポート情報が含まれ、取り扱いに注意が必要
まとめ
- NATはIPv4アドレスの枯渇を補う重要な技術であり、家庭・企業のネットワークの標準構成
- 一方で、外部からのアクセスを制限するため、P2P通信が困難になりやすい
- NAT越え(NAT Traversal)を実現するために、STUN・TURN・ICEといった技術が用いられる
- WebRTCなどの技術ではこれらが組み合わさって、安全・高性能なリアルタイム通信を実現している
NATやNAT越えの基本を理解しておくことは、通信アプリやIoT開発、ネットワーク設計において非常に役立ちます。まずは用語と仕組みをしっかり押さえ、徐々に実践へと応用していきましょう。

大阪のエンジニアが書いているブログ。
コメント