Cisco機器での動的NAT(NAPT/IPマスカレード)の概要と設定方法について説明します。
NATの概要については、下記を参照してください。
NAPT/IPマスカレードとは
NAPTとは、「Network Address Port Translation」の略で、送信元アドレスと送信元ポート番号を変換する技術です。IPアドレスとポート番号を紐づけて、NATテーブルを管理することで、複数の送信元アドレスを、一つのアドレスにNATすることができます。※NAPTとIPマスカレードは同じ意味で利用されます。
例)
複数の内部PC(192.168.1.0/24)から通信を行う際に、一つのアドレス(100.100.100.1)に送信元をNATすることができます。
NAT変換後のアドレスが一つで済むため、IPアドレスの節約になります。
NAPT/IPマスカレードの設定方法
下記のネットワーク構成を例に、設定方法を説明します。
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 100.100.100.1 255.255.255.0
ip nat outside
# NAT外部ゾーンとして設定
ip route 0.0.0.0 0.0.0.0 100.100.100.250
# デフォルトルートのネクストホップとして、外部ルータを指定します。
NAT変換対象とする送信元IPアドレスを特定するために、アクセスリストを設定します。
access-list 1 permit 192.168.1.0 0.0.0.255
# 送信元:192.168.1.0/24を対象とするアクセスリスト
アクセスリストと対象インターフェースを指定したNATの設定を行います。
ip nat inside source list [アクセスリスト番号] interface [インターフェース番号] overload
ip nat inside source list 1 interface GigabitEthernet0/1 overload
対象インターフェースは、NAT変換後のIPアドレス(100.100.100.1)を持っているインターフェースを指定します。
最終的なコンフィグ は下記の通りです。
interface GigabitEthernet0/0
ip address 192.168.1.254 255.255.255.0
ip nat inside
interface GigabitEthernet0/1
ip address 100.100.100.1 255.255.255.0
ip nat outside
ip nat inside source list 1 interface GigabitEthernet0/1 overload
ip route 0.0.0.0 0.0.0.0 100.100.100.250
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〜3からの通信発生時
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 100.100.100.1:6829 192.168.1.1:6829 200.200.200.1:443 200.200.200.1:443
tcp 100.100.100.1:2094 192.168.1.5:2094 200.200.200.1:443 200.200.200.1:443
tcp 100.100.100.1:5482 192.168.1.10:5482 200.200.200.1:443 200.200.200.1:443
PC(Inside local = 192.168.1.1〜10)から通信が発生し、NAT変換後のアドレス(Inside global)が、全て「100.100.100.1」となっていることが確認できます。
デバッグログ
「debug ip nat detailed」コマンドで、NATの詳細デバッグを有効にしてログを確認します。
PC1からの通信発生時
04:34:44.641: NAT: API parameters passed: src_addr:192.168.1.1, src_port:0 dest_addr:200.200.200.1, dest_port:0, proto:6 if_input:GigabitEthernet0/0 pak:E59DFF0 get_translated:1
04:34:44.641: mapping pointer available mapping:0
04:34:44.641: NAT: [0] Allocated Port for 192.168.1.1 -> 100.100.100.1: wanted 6829 got 6829
04:34:44.641: NAT*: i: tcp (192.168.1.1, 6829) -> (200.200.200.1, 443) [54421]
04:34:44.641: NAT*: s=192.168.1.1->100.100.100.1, d=200.200.200.1 [54421]
04:34:44.649: NAT*: o: tcp (200.200.200.1, 443) -> (100.100.100.1, 6829) [0]
04:34:44.649: NAT*: s=200.200.200.1, d=100.100.100.1->192.168.1.1 [0]
PC2からの通信発生時
04:34:51.910: NAT: API parameters passed: src_addr:192.168.1.5, src_port:0 dest_addr:200.200.200.1, dest_port:0, proto:6 if_input:GigabitEthernet0/0 pak:E59DFF0 get_translated:1
04:34:51.910: mapping pointer available mapping:0
04:34:51.910: NAT: [0] Allocated Port for 192.168.1.5 -> 100.100.100.1: wanted 2094 got 2094
04:34:51.910: NAT*: i: tcp (192.168.1.5, 2094) -> (200.200.200.1, 443) [18585]
04:34:51.910: NAT*: s=192.168.1.5->100.100.100.1, d=200.200.200.1 [18585]
04:34:51.911: NAT*: o: tcp (200.200.200.1, 443) -> (100.100.100.1, 2094) [0]
04:34:51.911: NAT*: s=200.200.200.1, d=100.100.100.1->192.168.1.5 [0]
PC3からの通信発生時
04:34:57.808: NAT: API parameters passed: src_addr:192.168.1.10, src_port:0 dest_addr:200.200.200.1, dest_port:0, proto:6 if_input:GigabitEthernet0/0 pak:E59DFF0 get_translated:1
04:34:57.808: mapping pointer available mapping:0
04:34:57.808: NAT: [0] Allocated Port for 192.168.1.10 -> 100.100.100.1: wanted 5482 got 5482
04:34:57.808: NAT*: i: tcp (192.168.1.10, 5482) -> (200.200.200.1, 443) [48694]
04:34:57.808: NAT*: s=192.168.1.10->100.100.100.1, d=200.200.200.1 [48694]
04:34:57.809: NAT*: o: tcp (200.200.200.1, 443) -> (100.100.100.1, 5482) [0]
04:34:57.809: NAT*: s=200.200.200.1, d=100.100.100.1->192.168.1.10 [0]
送信元アドレスがNATされていることが確認できます。
s=192.168.1.1->100.100.100.1
s=192.168.1.5->100.100.100.1
s=192.168.1.10->100.100.100.1
パケットキャプチャ
PC側のキャプチャ
サーバー側のキャプチャ
- PC側のキャプチャとサーバー側のキャプチャを比較すると、PCのIPアドレスが変換されていることが確認できます。
通信確認②(送信元ポート番号が重複する場合)
送信元ポート番号が重複する場合、送信元アドレスと送信元ポート番号の変換が行われます。
機器ステータス
「show ip nat translations」コマンドで、NATのステータスを確認します。
通信前
Router#show ip nat translations
静的NAT(スタティックNAT)と異なり、通信前は何も表示されません。
PC1〜3からの通信発生時
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 100.100.100.1:6829 192.168.1.1:6829 200.200.200.1:443 200.200.200.1:443
tcp 100.100.100.1:1024 192.168.1.5:6829 200.200.200.1:443 200.200.200.1:443
tcp 100.100.100.1:1025 192.168.1.10:6829 200.200.200.1:443 200.200.200.1:443
PC1(192.168.1.1)からの通信については、NAT変換後(Inside global)のポート番号が変わっていないことが確認できます。PC2(192.168.1.5)とPC3(192.168.1.10)からの通信については、送信元ポート番号がPC1と同一(6829)のため、NAT変換後(Inside global)のポート番号が変わっていることが確認できます。
・PC2の場合:送信元ポート番号 6829 → 1024
・PC3の場合:送信元ポート番号 6829 → 1025
デバッグログ
「debug ip nat detailed」コマンドで、NATの詳細デバッグを有効にしてログを確認します。
PC1からの通信発生時
05:34:30.200: NAT: API parameters passed: src_addr:192.168.1.1, src_port:0 dest_addr:200.200.200.1, dest_port:0, proto:6 if_input:GigabitEthernet0/0 pak:E59DFF0 get_translated:1
05:34:30.200: mapping pointer available mapping:0
05:34:30.200: NAT: [0] Allocated Port for 192.168.1.1 -> 100.100.100.1: wanted 6829 got 6829
05:34:30.200: NAT*: i: tcp (192.168.1.1, 6829) -> (200.200.200.1, 443) [3872]
05:34:30.200: NAT*: s=192.168.1.1->100.100.100.1, d=200.200.200.1 [3872]
05:34:30.204: NAT*: o: tcp (200.200.200.1, 443) -> (100.100.100.1, 6829) [0]
05:34:30.204: NAT*: s=200.200.200.1, d=100.100.100.1->192.168.1.1 [0]
PC2からの通信発生時
05:34:40.333: NAT: API parameters passed: src_addr:192.168.1.5, src_port:0 dest_addr:200.200.200.1, dest_port:0, proto:6 if_input:GigabitEthernet0/0 pak:E59DFF0 get_translated:1
05:34:40.333: mapping pointer available mapping:0
05:34:40.333: NAT: [0] Allocated Port for 192.168.1.5 -> 100.100.100.1: wanted 6829 got 1024
05:34:40.333: NAT*: i: tcp (192.168.1.5, 6829) -> (200.200.200.1, 443) [27835]
05:34:40.333: NAT*: TCP s=6829->1024, d=443
05:34:40.333: NAT*: s=192.168.1.5->100.100.100.1, d=200.200.200.1 [27835]
05:34:40.337: NAT*: o: tcp (200.200.200.1, 443) -> (100.100.100.1, 1024) [0]
05:34:40.337: NAT*: TCP s=443, d=1024->6829
05:34:40.337: NAT*: s=200.200.200.1, d=100.100.100.1->192.168.1.5 [0]
PC3からの通信発生時
05:34:46.666: NAT: API parameters passed: src_addr:192.168.1.10, src_port:0 dest_addr:200.200.200.1, dest_port:0, proto:6 if_input:GigabitEthernet0/0 pak:E59DFF0 get_translated:1
05:34:46.666: mapping pointer available mapping:0
05:34:46.666: NAT: [0] Allocated Port for 192.168.1.10 -> 100.100.100.1: wanted 6829 got 1025
05:34:46.666: NAT*: i: tcp (192.168.1.10, 6829) -> (200.200.200.1, 443) [3139]
05:34:46.666: NAT*: TCP s=6829->1025, d=443
05:34:46.666: NAT*: s=192.168.1.10->100.100.100.1, d=200.200.200.1 [3139]
05:34:46.672: NAT*: o: tcp (200.200.200.1, 443) -> (100.100.100.1, 1025) [0]
05:34:46.672: NAT*: TCP s=443, d=1025->6829
05:34:46.672: NAT*: s=200.200.200.1, d=100.100.100.1->192.168.1.10 [0]
PC2とPC3からの通信の場合、送信元ポート番号が変換されていることが確認できます。
TCP s=6829->1024, d=443
TCP s=6829->1025, d=443
パケットキャプチャ
PC側のキャプチャ
サーバー側のキャプチャ
- PC側のキャプチャとサーバー側のキャプチャを比較すると、PCのIPアドレスとポート番号が変換されていることが確認できます。
以上で、「Cisco機器のNAT設定 | 動的NAT(NAPT/IPマスカレード)」の説明は完了です!