Cisco機器のNAT設定 | 動的NAT(NAPT/IPマスカレード)

Cisco機器のNAT設定 | 動的NAT(NAPT/IPマスカレード)

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することができます。

NAPT/IPマスカレードの例

NAT変換後のアドレスが一つで済むため、IPアドレスの節約になります。

NAPT/IPマスカレードの設定方法

下記のネットワーク構成を例に、設定方法を説明します。

ネットワーク構成

Cisco機器で動的NATを利用する場合、以下の手順で設定します。

STEP
インターフェース/ルーティングの設定

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
# デフォルトルートのネクストホップとして、外部ルータを指定します。
STEP
アクセスリストの設定(送信元の特定)

NAT変換対象とする送信元IPアドレスを特定するために、アクセスリストを設定します。

access-list 1 permit 192.168.1.0 0.0.0.255
# 送信元:192.168.1.0/24を対象とするアクセスリスト
STEP
NATの設定(送信元アドレスと対象インターフェースの紐付け)

アクセスリストと対象インターフェースを指定した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側のキャプチャ

サーバー側のキャプチャ

ポート番号が重複しない場合のサーバー側のキャプチャ
  • 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側のキャプチャ

サーバー側のキャプチャ

ポート番号が重複する場合のサーバー側のキャプチャ
  • PC側のキャプチャとサーバー側のキャプチャを比較すると、PCのIPアドレスとポート番号が変換されていることが確認できます。

以上で、「Cisco機器のNAT設定 | 動的NAT(NAPT/IPマスカレード)」の説明は完了です!

  • URLをコピーしました!
  • URLをコピーしました!
目次