NAT(アドレス変換)とは|仕組み・種類・問題点とトラブル対策・IPv6移行
アドレス変換(NAT)とは
アドレス変換(Network Address Translation、以下 NAT)は、ネットワーク機器がパケットの送信元/宛先のIPアドレス(および必要に応じてポート番号)を別の値に書き換える技術です。主にIPv4アドレス不足の対処やプライベートネットワークとパブリックネットワークの接続、簡易なアドレス隠蔽のために広く使われています。NAT自体はパケットのヘッダを書き換えることで通信を成立させるため、トラフィックの状態(コネクション情報)を保持することが多く、「ステートフル」な処理を行います。
背景:なぜアドレス変換が必要になったか
インターネットの普及に伴いIPv4アドレスが枯渇したため、プライベートアドレス空間(RFC1918で定義された範囲)をLAN内で利用し、1つまたは少数のグローバルIPを多くの内部ホストで共有する仕組みが求められました。NATはこの要請に応える形で普及し、家庭や企業、ISPのネットワークで一般的に使われています。
NATの主な種類
- 静的NAT(Static NAT / 1:1 NAT):内部のプライベートIPと外部のグローバルIPを1対1で固定的にマッピングします。サーバの公開などに使われます。
- 動的NAT(Dynamic NAT):内部アドレスを外部のプールから動的に割り当てて翻訳します。外部プールに空きがないと新規通信は失敗します。
- NAPT / PAT(Port Address Translation、いわゆるオーバーロード):多数の内部ホストを1つ(または少数)の外部IPで共有する方法。IPアドレスだけでなくTCP/UDPポートを使って識別します。家庭用ルータで一般的です。
- DNAT / SNAT:宛先(Destination)や送信元(Source)を変換する目的別の呼び方。Linux iptables等ではDNAT/DNATチェインで外向き/内向きの変換を扱います。
- Carrier-Grade NAT(CGN / Large Scale NAT):ISPが複数ユーザで共有するアドレス空間を使って大規模にNATを行う方式。共有アドレス空間(100.64.0.0/10)がRFCで推奨されています。
- IPv6関連の翻訳(NAT64 / SIIT 等):IPv6専用ネットワークとIPv4ネットワークを相互接続するためのアドレス/プロトコル変換。IPv6設計でのNATは本来不要とされていますが、相互運用のため一部で利用されます。
仕組みの詳細
NAT機器は各通信フローについて「翻訳テーブル」を保持します。内部IP:内部ポート ⇔ 外部IP:外部ポート の対応関係を作り、戻ってくるパケットの宛先(外部側のIP/ポート)を元の内部アドレスに逆引きして転送します。TCP/UDPではポート番号、ICMPでは識別子(Identifier)などを利用します。
書き換え時にはIPヘッダのチェックサム、TCP/UDPのチェックサムも再計算する必要があります。またパケットのTTLやフラグメンテーション(MTU)に起因する問題への配慮も必要です。
NATが引き起こす問題点・影響
- エンドツーエンド性の喪失:送信元アドレスが書き換わるため、外部から内部ホストに直接接続できなくなることがあります。サーバ公開にはポートフォワーディング等の設定が必要です。
- プロトコル互換性の問題:FTPのアクティブ/パッシブ、SIPやH.323などはヘッダ内にIPアドレスやポート情報を含むため、単純なNATでは正しく動作しないことがあります。これを補うためにALGs(Application Layer Gateways)が用いられる場合がありますが、万能ではありません。
- IPsec等の暗号化通信との相性:ESP等でペイロードを暗号化するとNAT機器が内部のアドレス情報を参照できず問題になります。NAT-T(NAT Traversal for IPsec)等で対処する方法があります。
- ロギングと追跡性:多人数が同一グローバルIPを共有する場合、誰がどの通信を行ったかを記録するためにNATログが重要になります。CGNではこの要件が法的にも問題になります。
- パフォーマンスとスケーラビリティ:大規模な接続数を扱うと翻訳テーブルのサイズや処理能力がボトルネックになります。ハードウェアオフロードや分散処理が求められます。
NATとIPv6の関係
IPv6はアドレス空間が十分に大きいため、原則としてNATは不要であり、エンドツーエンド性を重視する設計になっています。ただし現実の移行期間やIPv4との相互接続の必要性から、NAT64やIPv6-to-IPv6のNAT(NAT66)などが使われることがあります。多くのネットワーク設計者は「IPv6ではNATを避けて、適切なルーティングとフィルタリングでセキュリティを確保する」ことを推奨しています。
NATのトラブルシューティングと回避技術
- ポートフォワーディング(Port Forwarding):特定ポートへの外部着信を内部ホストに転送する設定。サーバ公開に使われます。
- UPnP / PCP:内部ホストがルータに対して動的にポートを開く仕組み。UPnP IGDやPort Control Protocol(PCP)が代表例です。セキュリティ的配慮が必要です。
- STUN / TURN / ICE:P2PやVoIPでのNAT越えのためのプロトコル群。STUNで外側の見かけのアドレスを取得し、TURNを中継として回避、ICEで複数手法を組み合わせて最良経路を決定します。
- ALGs(Application Layer Gateways):FTPやSIPのようなプロトコル向けに、NAT機器がアプリケーションレイヤの情報を解析してアドレス書換を手助けしますが、プロトコル更新に追従できない欠点があります。
運用上の注意点とベストプラクティス
- 翻訳テーブルやログの保存ポリシーを設計し、必要に応じて法令順守(通信履歴保存等)に対応する。
- ポートフォワーディングやUPnPの利用は最小限にし、不要なポート開放を避ける。
- CGNを導入する場合は共有アドレス空間(100.64.0.0/10)やユーザ識別のためのログ要件を確認する。
- NAT機能は便利だが「セキュリティ機能」ではないため、適切なファイアウォールルールやIDS/IPSを併用する。
- IPv6導入を検討し、長期的にはNAT依存を減らす戦略を立てる。
まとめ
アドレス変換(NAT)はIPv4アドレス枯渇に対応するために生まれ、家庭用ルータからISPのCGNまで幅広く使われる重要な技術です。ただし、アドレスの書き換えはエンドツーエンド原則を損ない、特定アプリケーションや暗号化通信と衝突することがあります。そのため、運用では翻訳テーブル管理、ログ保存、トラバース手法の理解、IPv6移行戦略といった観点から設計・運用を行うことが重要です。
参考文献
- RFC 1918 - Address Allocation for Private Internets
- RFC 1631 - The IP Network Address Translator (NAT)
- RFC 2663 - IP Network Address Translator (NAT) Terminology and Considerations
- RFC 3022 - Traditional NAT
- RFC 4787 - Network Address Translation (NAT) Behavioral Requirements for ICMP and UDP
- RFC 6888 - The Internet Assigned Numbers Authority (IANA) and shared address space (100.64.0.0/10)
- RFC 6146 - Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers
- RFC 6145 - IPv6/IPv4 Translation (SIIT)
- RFC 5389 - Session Traversal Utilities for NAT (STUN)
- RFC 5766 - Traversal Using Relays around NAT (TURN)
- RFC 8445 - Interactive Connectivity Establishment (ICE)
- RFC 6887 - Port Control Protocol (PCP)


