Cisco機器での動的NAT(ダイナミックNAT)の概要と設定方法について説明します。
NATの概要については、下記を参照してください。
動的NAT(ダイナミックNAT – Dynamic NAT)とは
動的NAT(ダイナミックNAT)とは、送信元アドレスを特定の範囲内のアドレスに自動的にNATする技術です。
例)
内部PC(192.168.1.1〜3)から通信を行う際に、プール内のアドレス(100.100.1.1〜2)に送信元をNATすることができます。
範囲内のアドレスが全て利用されているときは、NATすることができません。
動的NATの設定方法
上述のネットワーク構成を例に、設定方法を説明します。
Cisco機器で動的NATを利用する場合、以下の手順で設定します。
IPアドレスの設定、NATのゾーン(inside/outside)の設定を行います。
interface GigabitEthernet0/0
ip address 192.168.1.254 255.255.255.0
ip nat inside
# NAT内部ゾーンとして設定
interface GigabitEthernet0/1
ip address 200.200.1.254 255.255.255.0
ip nat outside
# NAT外部ゾーンとして設定
NAT変換対象とする送信元IPアドレスを特定するために、アクセスリストを設定します。
access-list 1 permit 192.168.1.0 0.0.0.255
# 送信元:192.168.1.0/24を対象とするアクセスリスト
NAT変換用のアドレス範囲を指定します。
ip nat pool [プール名] [開始アドレス] [終了アドレス] netmask [サブネットマスク]
ip nat pool NAT 100.100.1.1 100.100.1.2 netmask 255.255.255.252
アクセスリストとNATプールを指定したNATの設定を行います。
ip nat inside source list [アクセスリスト番号] pool [プール名]
ip nat inside source list 1 pool NAT
最終的なコンフィグ は下記の通りです。
interface GigabitEthernet0/0
ip address 192.168.1.254 255.255.255.0
ip nat inside
interface GigabitEthernet0/1
ip address 200.200.1.254 255.255.255.0
ip nat outside
ip nat pool NAT 100.100.1.1 100.100.1.2 netmask 255.255.255.252
ip nat inside source list 1 pool NAT
access-list 1 permit 192.168.1.0 0.0.0.255
通信確認
PCからサーバーへ通信を行い、NATルーターのステータスやデバッグログ、パケットキャプチャを確認します。
機器ステータス
「show ip nat translations」コマンドで、NATのステータスを確認します。
通信前
Router#show ip nat translations
静的NAT(スタティックNAT)と異なり、通信前は何も表示されません。
PC1からの通信発生時
PC1:~$ ping 200.200.1.1
PING 200.200.1.1 (200.200.1.1): 56 data bytes
64 bytes from 200.200.1.1: seq=0 ttl=63 time=16.161 ms
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 100.100.1.1:1264 192.168.1.1:1264 200.200.1.1:1264 200.200.1.1:1264
--- 100.100.1.1 192.168.1.1 --- ---
PC1のアドレス(192.168.1.1)が、100.100.1.1にNATされていることが確認できます。
PC2からの通信発生時
PC2:~$ ping -c 1 200.200.1.1
PING 200.200.1.1 (200.200.1.1): 56 data bytes
64 bytes from 200.200.1.1: seq=0 ttl=63 time=11.553 ms
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 100.100.1.1:1276 192.168.1.1:1276 200.200.1.1:1276 200.200.1.1:1276
--- 100.100.1.1 192.168.1.1 --- ---
icmp 100.100.1.2:1289 192.168.1.2:1289 200.200.1.1:1289 200.200.1.1:1289
--- 100.100.1.2 192.168.1.2 --- ---
PC2のアドレス(192.168.1.2)が、100.100.1.2にNATされていることが確認できます。
PC3からの通信発生時
cisco@PC3:~$ ping -c 1 200.200.1.1
PING 200.200.1.1 (200.200.1.1): 56 data bytes
1 packets transmitted, 0 packets received, 100% packet loss
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 100.100.1.1:1276 192.168.1.1:1276 200.200.1.1:1276 200.200.1.1:1276
--- 100.100.1.1 192.168.1.1 --- ---
icmp 100.100.1.2:1289 192.168.1.2:1289 200.200.1.1:1289 200.200.1.1:1289
--- 100.100.1.2 192.168.1.2 --- ---
PC3のアドレス(192.168.1.3)はNATされず、通信がタイムアウトしていることがわかります。
デバッグログ
「debug ip nat detailed」コマンドで、NATの詳細デバッグを有効にしてログを確認します。
PC1からの通信発生時
11:51:20.436: NAT: Setting IP alias only flag
11:51:20.436: mapping pointer available mapping:0
11:51:20.436: NAT*: i: icmp (192.168.1.1, 1291) -> (200.200.1.1, 1291) [9279]
11:51:20.436: NAT*: s=192.168.1.1->100.100.1.1, d=200.200.1.1 [9279]
11:51:20.438: NAT*: o: icmp (200.200.1.1, 1291) -> (100.100.1.1, 1291) [57310]
11:51:20.438: NAT*: s=200.200.1.1, d=100.100.1.1->192.168.1.1 [57310]
11:51:20.443: NAT: add address 100.100.1.1 to ipalias_hash[0]
11:51:20.446: NAT: Inserted alias only entry tableid=0 100.100.1.1
PC2からの通信発生時
11:51:41.835: NAT: Setting IP alias only flag
11:51:41.835: mapping pointer available mapping:0
11:51:41.835: NAT*: i: icmp (192.168.1.2, 1305) -> (200.200.1.1, 1305) [33580]
11:51:41.835: NAT*: s=192.168.1.2->100.100.1.2, d=200.200.1.1 [33580]
11:51:41.837: NAT: add address 100.100.1.2 to ipalias_hash[3]
11:51:41.838: NAT: Inserted alias only entry tableid=0 100.100.1.2
11:51:41.839: NAT*: o: icmp (200.200.1.1, 1305) -> (100.100.1.2, 1305) [29824]
11:51:41.839: NAT*: s=200.200.1.1, d=100.100.1.2->192.168.1.2 [29824]
適切にNATされていることが確認できます。
PC3からの通信発生時
11:51:51.130: NAT: failed to allocate address for 192.168.1.3, list/map 1
11:51:51.130: mapping pointer available mapping:0
11:51:51.130: NAT*: Can't create new inside entry - forced_punt_flags: 0
11:51:51.132: NAT: failed to allocate address for 192.168.1.3, list/map 1
11:51:51.132: mapping pointer available mapping:0
11:51:51.132: NAT: translation failed (A), dropping packet s=192.168.1.3 d=200.200.1.1
NATエントリーが作成できず、NAT変換が失敗しているため、パケットを破棄(drop)していることが確認できます。
パケットキャプチャ
PC1側のキャプチャ
PC2側のキャプチャ
PC3側のキャプチャ
サーバー側のキャプチャ
- PC1とPC2のキャプチャでは、サーバーから応答があることが確認できます。
- PC3のキャプチャでは、サーバーからの応答は無く、NATルーターから「Destination unreachable」が返されていることが確認できます。
- サーバーのキャプチャでは、PC1とPC2からの通信は適切にNATされていますが、PC3からの通信は届いていないことが確認できます。
以上で、「Cisco機器のNAT設定 | 動的NAT(ダイナミックNAT – Dynamic NAT)」の説明は完了です!