NAT(ネットワークアドレス変換)完全ガイド:仕組み・種類・NAT越え対策とIPv6移行のポイント
NATとは何か — 概要と目的
NAT(Network Address Translation:ネットワークアドレス変換)は、IPパケットの送信元または宛先のIPアドレス(および場合によってはポート番号)を別の値に変換する技術です。主にIPv4アドレスの枯渇への対応、プライベートネットワークとインターネットの接続、および簡易的なトラフィック分離・制御を目的として家庭用ルータや企業の境界機器、キャリア機器などで広く使われています。
なぜNATが必要になったのか
IPv4アドレス空間は32ビット(約43億個)と有限であり、インターネットの普及に伴って追加のアドレスが不足するようになりました。IPv6への移行は進行中ですが広範な置き換えには時間がかかるため、NATによって複数の内部ホストが1つ(または少数)のグローバルIPv4アドレスを共有できる仕組みが採られました。また、プライベートアドレス(RFC 1918)を内部で利用し、外部にはグローバルアドレスを見せることで簡易的な隔離やアドレス管理の容易化も実現します(NATの応用例については後述)。
基本的な動作原理
NATは、送信元IPアドレスとポート番号(場合によっては宛先)を変換し、その対応関係(マッピング)をテーブルとして保持します。外部から戻ってきた応答パケットはこのテーブルを参照して、元の内部ホストに戻すことができます。NATは基本的にステートフルな処理を行い、一定時間アクセスがなければマッピングを破棄します(タイムアウト)。
NATの主要な種類
- 静的NAT(Static NAT):内部アドレス1つを固定のグローバルアドレス1つに1対1でマッピングします。サーバ公開などに使用されます。
- 動的NAT(Dynamic NAT):内部アドレスをグローバルアドレスのプールと動的にマッピングします。プールが枯渇すると新しい接続はできません。
- NAPT / PAT(Port Address Translation、別名:オーバーロード):多対一のマッピングで、内部複数ホストのIPアドレスとポートを単一のグローバルIPアドレスの複数ポートに割り当てます。家庭用ルータで一般的な方式です。
- Carrier-Grade NAT(CGN / Large-Scale NAT):ISP側で多数の顧客を限られたグローバルアドレスで共有する大規模なNAPT運用。共有アドレス用に100.64.0.0/10が予約されています(RFC 6598)。
- NAT64 / DNS64:IPv6専用ネットワークからIPv4サーバへアクセスするためにアドレス・プロトコルを変換する仕組み。IPv6移行時のトンネルや翻訳手段の一つです(RFC 6146, RFC 6147)。
マッピングの振る舞い(技術的詳細)
NATのパケット処理の振る舞いは詳細に規定されており、UDPやTCPなどプロトコルごとに異なる要求が存在します。IETFの文書では、マッピングやフィルタリングの挙動を分類しており、ゲームやリアルタイム通信で問題となる「NATタイプ」の説明に使われる概念(フルコーン、リストリクテッドコーン、ポートリストリクテッド、シンメトリックなど)と対応します。
- Endpoint-Independent Mapping(フルコーンに相当)
- Address-Dependent Mapping(制限付き)
- Address-and-Port-Dependent Mapping(シンメトリック)
これらの違いは、外部ホストXからのパケットを受け付けるかどうか、また同一内部ソースポートが異なる宛先にアクセスしたときにどのように外部ポートが割り当てられるかに影響します(詳細はRFC 4787、RFC 5382など)。
NATが引き起こす問題点(プロトコルの影響)
NATは便利ですが、次のような問題をもたらします。
- エンドツーエンドの接続の阻害:外部から内部へインバウンド接続を直接張ることが基本的にできない(ポートフォワーディング等で回避)。
- アプリケーションプロトコルの不具合:FTP(アクティブモード)、SIP、H.323、RTSP、IPsec(ESP)、GREなどは通信中にペイロード内にIPアドレスやポート情報を含むことがあり、NATがそれを更新しない場合通信が失敗します。
- ログと監査の複雑化:CGNなどで複数ユーザが同一グローバルアドレスを共有すると、通信ログから個別ユーザを特定するためにポート番号とタイムスタンプの保存が必要になります(法令対応上の課題)。
- ポート枯渇:NAPTでは利用可能なポート(理論的には65535だが実用上はこれより少ない)を多数の同時接続で使い尽くす可能性があります。
NAT越え(NATトラバーサル):手法とプロトコル
NATによって阻害されるアプリケーションのために、いくつかのトラバーサル技術が開発されています。
- ALGs(Application Layer Gateways):ルータがアプリケーションペイロードを解析して動的にポートやIPを書き換える。ただし万能ではなく、多くの実装でバグや相互運用性問題が発生します。
- STUN(RFC 5389):クライアントが自分の外向きのIP/ポート割り当て(マッピング)を取得するためのプロトコル。P2PやVoIPで多用されますが、対称NATでは効果が限定されます。
- TURN(RFC 5766):中継サーバを使って確実に通信を成立させる。STUNで直接接続できない場合のフォールバック手段。
- ICE(RFC 8445, 旧RFC 5245):STUNやTURNを組み合わせて、可能な接続経路(候補)を探索し最適な経路で接続を確立するフレームワーク。
- IPsecのNATトラバーサル(NAT-T, RFC 3947/3948など):IPsecパケットをUDPでカプセル化してNATを通過させる技術。
- UPnP / PCP(RFC 6887):内部ホストがNATデバイスに対して自分用のポートマッピングを動的に要求するプロトコル。家庭用ではUPnPが広く使われますが、セキュリティ上の懸念もあります。
セキュリティ観点と誤解
しばしば「NATがあるからファイアウォールはいらない」と誤解されますが、NATはファイアウォールではありません。確かにNATは外部からの不要な接続を遮断する副次的効果がありますが、パケット検査やアプリケーション層の防御、ポリシー管理、ロギングなどは専用のファイアウォールやIDS/IPSの役割です。さらに、NATによる「セキュリティ」は設計上の副作用であり、堅牢なセキュリティ対策として過信すべきではありません。
IPv6とNAT:将来像
IPv6は膨大なアドレス空間を提供するため、理論的にはNATを不要にします。エンドツーエンドの接続性を復元できるため、アプリケーション設計にも好影響があります。ただし実際にはIPv4からIPv6への完全な移行には時間がかかり、移行期間中はNAT、トランスレーション(NAT64等)、およびデュアルスタック運用が共存します。したがって、現実のネットワーク運用では引き続きNATおよび関連技術を理解しておく必要があります。
運用上の注意点とベストプラクティス
- ポートフォワーディングやUPnPの利用は必要最小限にし、アクセス制御を行う。
- CGNを使用している場合はログの保持やトラブルシューティング用にポートごとの記録を確実に行う(法令対応も考慮)。
- アプリケーション開発者はNATを想定した設計(STUN/TURN/ICEのサポート、接続の再試行など)を行う。
- 可能ならばIPv6化を進める。移行が困難な部分はNAT64/DNS64などのトランスレーション技術を検討する。
- ALGsに頼りすぎない。ALGsは便利だが相互運用性の問題やセキュリティリスクを招くことがある。
まとめ
NATはIPv4時代の重要な技術であり、アドレス節約、内部ネットワークの分離、運用上の利便性を提供します。一方でエンドツーエンド性の喪失、特定アプリケーションとの非互換、ログ/監査やトラブルシューティングの複雑化といった課題も抱えています。現実のネットワーク設計ではNATの種類と挙動(マッピング/フィルタリング)、NAT越え技術、IPv6移行計画を総合的に考慮することが重要です。
参考文献
- RFC 2663 - IP Network Address Translator (NAT) Terminology and Considerations
- RFC 3022 - Traditional IP Network Address Translator (Traditional NAT)
- RFC 4787 - Network Address Translation (NAT) Behavioral Requirements for Unicast UDP
- RFC 5382 - Network Address Translation (NAT) Behavioral Requirements for TCP
- RFC 5389 - Session Traversal Utilities for NAT (STUN)
- RFC 5766 - Traversal Using Relays around NAT (TURN)
- RFC 8445 - Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal
- RFC 3947 - Negotiation of NAT-Traversal in the IKE
- RFC 3948 - UDP Encapsulation of IPsec ESP Packets
- RFC 6598 - Address Allocation for Private Internets (Shared Address Space for CGN)
- RFC 6146 - Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers
- RFC 6147 - DNS64: DNS Extensions for Network Address Translation from IPv6 Clients to IPv4 Servers
- RFC 6887 - Port Control Protocol (PCP)


