NATがなぜ必要か
グローバルIPアドレスは有限です。組織内のすべてのホストにグローバルIPを割り当てることは現実的ではありません。
NATはプライベートIPとグローバルIPを変換することで、少数のグローバルIPで多数のホストをインターネットに接続可能にします。
ただし「NATは全部同じ」と思っていると設計でつまずきます。今回扱うStatic・Dynamic・PATの3種類が、IPv4環境のNAT実装のほぼすべてのベースになっています。
なお、NATの役割は「アドレス空間を変換すること」であり、変換先が必ずしもグローバルIPである必要はありません。たとえば拠点間VPN接続で、双方の組織が同じプライベートアドレス帯(例: 192.168.1.0/24)をそれぞれ独立に使っていてアドレスが重複している場合、プライベートIP同士であってもNATでアドレスを変換し、経路を区別できるようにします。以降の説明では分かりやすさのため「プライベートIP→グローバルIP」を軸に解説しますが、変換の仕組み自体はアドレス帯の重複解消にもそのまま応用できます。
Static NAT
1つのプライベートIPを1つのグローバルIPに 1対1で固定マッピングします。
外部からそのグローバルIPに届いたパケットは必ず同じ内部ホストに転送されます。
使いどころ: 社内サーバーを外部に公開する場合です。WebサーバーやメールサーバーなどDMZに置くサーバーへの外部アクセスを受ける際に使います。
[外部] --> グローバルIP 203.0.113.10 --> [NAT変換] --> 192.168.1.10 [Webサーバー]
Cisco IOSでの設定例:
ip nat inside source static 192.168.1.10 203.0.113.10
!
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.0
ip nat inside
!
interface GigabitEthernet0/1
ip address 203.0.113.1 255.255.255.252
ip nat outside
Static PAT(ポートフォワーディング)との違い
実務でよくあるのは「グローバルIPを1つサーバーに丸ごと割り当てる」のではなく、「特定のポートだけを内部サーバーに転送する」ケースです。これは正確にはStatic NATではなく Static PAT(ポートフォワーディング) と呼ばれます。
ip nat inside source static tcp 192.168.1.10 80 203.0.113.10 80
家庭用ルーターの「ポート開放」設定はほぼこれに該当します。1つのグローバルIPの特定ポートだけを内部の特定ホスト・ポートに紐づけるので、同じグローバルIPの別ポートを別サーバーに割り当てることもできます。Static NATと混同されがちなので区別しておきましょう。
Dynamic NAT
プライベートIPを グローバルIPのプールから動的に割り当てます。
通信が始まったときにプールから1つのグローバルIPを使い、通信が終わると返却します。
使いどころ: グローバルIPをある程度確保できるが固定割り当ては不要、というケースです。
Cisco IOSでの設定例:
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat pool NATPOOL 203.0.113.10 203.0.113.14 netmask 255.255.255.248
ip nat inside source list 1 pool NATPOOL
プールのアドレス数を超えるホストが同時に通信しようとすると変換に失敗する点はStatic NATにはない制約で、設計時はプールサイズと同時接続ホスト数を見積もっておく必要があります。
PAT(Port Address Translation)/ NAT Overload
最も広く使われている方式です。
1つのグローバルIPに ポート番号を組み合わせることで、多数のホストが1つのグローバルIPを共有できます。
家庭用ルーターも企業のインターネット接続もほぼこれです。
192.168.1.10:5000 ──┐
192.168.1.11:5000 ──┼──> [PAT] --> 203.0.113.1:ポート番号で識別
192.168.1.12:5000 ──┘
使いどころ: インターネットへの一般的なアウトバウンド通信です。グローバルIPが1つしかなくても何百台ものホストが同時に通信できます。
Cisco IOSでの設定例:
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat inside source list 1 interface GigabitEthernet0/1 overload
内部では以下のようなNATテーブル(セッションテーブル)で変換前後の対応を管理しています。
Pro Inside global Inside local Outside global
tcp 203.0.113.1:5000 192.168.1.10:50000 8.8.8.8:443
tcp 203.0.113.1:5001 192.168.1.11:50000 8.8.8.8:443
tcp 203.0.113.1:5002 192.168.1.12:50000 8.8.8.8:443
ポート番号は最大約6万5千まで使えるため、理論上は1つのグローバルIPで数万セッションを同時にさばけます。ただし実際にはルータ・ファイアウォールのセッションテーブル上限やタイムアウト設定が先に効いてくることが多いです。
なお、AWSのNAT Gatewayも実質はPATの実装です。プライベートサブネットの複数インスタンスが1つのElastic IPを共有してアウトバウンド通信を行います。逆にEC2にElastic IPを直接アソシエートする場合は1対1のIPマッピングになり、Static NATに近い動作になります。
NATの限界と注意点
外部からの接続開始ができない
PATは「内部から始めた通信」のセッションテーブルを元に変換しています。
外部から新規接続を始めることはできません(ポートフォワーディングで例外を設定することは可能です)。
ALGが必要なプロトコル
FTPやSIPなど、ペイロード内にIPアドレスを含むプロトコルはNATが透過的に処理できません。
ALG(Application Layer Gateway)の設定が必要になる場合があります。
IPsecも同様に相性がよくありません。ESP(プロトコル番号50)にはポート番号の概念がないため、PAT環境では複数セッションを区別できず通信が壊れることがあります。これを解決するのが NAT-T(NAT Traversal) で、ESPをUDP 4500番でカプセル化することでPAT環境でも透過的にIPsec通信できるようにしています。VPN機器同士がNAT配下にある場合、NAT-Tが有効かどうかは切り分けの定番ポイントになります。
NATはセキュリティではない
「NATしているから外部からは見えない」は誤解です。
NATはアドレス変換の仕組みであり、ファイアウォールではありません。セキュリティポリシーは別途実装しましょう。
どれを使うべきか迷ったら
| やりたいこと | 適したNAT |
|---|---|
| サーバーを丸ごと固定のグローバルIPで公開したい | Static NAT |
| 公開したいのは特定ポートだけ(例: Webサーバーの80番だけ) | Static PAT(ポートフォワーディング) |
| ポート番号を変換したくない | Dynamic NAT |
| 大多数のホストが一般的なアウトバウンド通信をするだけ | PAT |
まとめ
| 種類 | 変換方式 | 変換単位 | 主な用途 |
|---|---|---|---|
| Static NAT | 1対1固定 | IPアドレス単位 | サーバー公開(DMZ) |
| Static PAT | 1対1固定+ポート指定 | IP+ポート単位 | 特定ポートのみ公開(ポートフォワーディング) |
| Dynamic NAT | プールから動的割り当て | IPアドレス単位 | ポート番号を変換したくない |
| PAT | ポートで多重化 | IP+ポート単位 | 一般的なインターネット接続 |
- NATをセキュリティ対策と混同しないようにしましょう
- FTP・SIP・IPsecなどALGやNAT-Tが必要なプロトコルに注意しましょう
- 「グローバルIPを丸ごと割り当てるか、ポート単位で割り当てるか」でStatic NATとStatic PATを区別しましょう