Cisco機器の静的NAT(スタティックNAT)の概要と、 外部送信元アドレスのNAT(ip nat outside source)について説明します。
NATの概要については、下記を参照してください。
Cisco機器の基本的なNATの設定
Cisco機器では、下記の設定を行うことで、NATを行うことができます。
- インターフェースを内部ネットワーク(inside)か外部ネットワーク(outside)に設定する
- NAT対象とするネットワーク(内部or外部)と変換前後のIPアドレスを設定する
外部送信元アドレスの変換 | ip nat outside source
ネットワーク構成
下記のネットワーク構成を例に、具体的なNAT設定について説明します。ここでは、外部サーバーのIPアドレスを”200.200.1.1″から”192.168.2.1″に変換します。
NATとルーティングの順序
NATとルーティングの順序に関しては、下記のルールがあります。外部送信元をNATする場合、insideからoutsideへのルーティングを考慮する必要があります。
inside側からoutside側への通信 | outside側からinside側への通信 |
---|---|
「ルーティング」→「NAT」の順序で処理される | 「NAT」→「ルーティング」の順序で処理される |
詳細に関しては、下記を参照してください。
通信NGとなる設定(ルーティング設定が不足している場合)
下記の設定だけでは、insideからoutsideへの通信に必要なルーティングが不足しているため、通信がNGとなります。
# Gi0/0をinsideに指定
interface GigabitEthernet0/0
ip nat inside
# Gi0/1をoutsideに指定
interface GigabitEthernet0/1
ip nat outside
# outside側の送信元アドレス"200.200.1.1"を"192.168.2.1"に変換する
ip nat outside source static 200.200.1.1 192.168.2.1
通信の流れ(outside→insideへの通信) ※通信OK
外部サーバーから内部サーバー宛に通信が開始されます。
NATルーターにパケットが到達します。
送信元アドレスをNAT変換します。
送信先ネットワークに対して、ルーティング処理が行われます。
内部サーバーにパケットが到達します。
通信の流れ(inside→outsideへの通信) ※通信NG
外部サーバーから内部サーバー宛に通信が開始されます。
NATルーターにパケットが到達します。
送信先ネットワークに対して、ルーティング処理を行いますが、「192.168.2.1」宛の経路情報が無いため、パケットは破棄されます。
通信OKとなる設定
insideからoutsideへの通信を可能とするためには、NATルーターに適切なルーティング設定を行うことが必要です。(送信先ネットワークへの経路情報を保持する必要があります。)
パターン① ルーティングを手動で設定
192.168.2.1への通信はoutside側へルーティングされるようにスタティックルートを設定します。
# Gi0/0をinsideに指定
interface GigabitEthernet0/0
ip nat inside
# Gi0/1をoutsideに指定
interface GigabitEthernet0/1
ip nat outside
# outside側の送信元アドレス"200.200.1.1"を"192.168.2.1"に変換する
ip nat outside source static 200.200.1.1 192.168.2.1
# insideからoutsideへの通信に必要なルーティングの設定
ip route 192.168.2.1 255.255.255.255 200.200.1.1
パターン② ルーティングを自動追加(add-routeオプション)
NAT設定に”add-route”オプションを追加すると、outside側へのルーティングに必要な経路情報が自動的に設定されます。
# Gi0/0をinsideに指定
interface GigabitEthernet0/0
ip nat inside
# Gi0/1をoutsideに指定
interface GigabitEthernet0/1
ip nat outside
# outside側の送信元アドレス"200.200.1.1"を"192.168.2.1"に変換する
# 必要な経路情報を自動的に追加するように"add-route"オプションを追加
ip nat outside source static 200.200.1.1 192.168.2.1 add-route
ルーティングテーブルを確認すると、必要な経路情報(宛先アドレス:192.168.2.1、ネクストホップ:200.200.1.1)が追加されていることがわかります。
Router#show ip route
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.1.0/24 is directly connected, GigabitEthernet0/0
L 192.168.1.254/32 is directly connected, GigabitEthernet0/0
192.168.2.0/32 is subnetted, 1 subnets
S 192.168.2.1 [1/0] via 200.200.1.1
200.200.1.0/24 is variably subnetted, 2 subnets, 2 masks
C 200.200.1.0/24 is directly connected, GigabitEthernet0/1
L 200.200.1.254/32 is directly connected, GigabitEthernet0/1
通信の流れ(outside→insideへの通信) ※通信OK
外部サーバーから内部サーバー宛に通信が開始されます。
NATルーターにパケットが到達します。
送信元アドレスをNAT変換します。
送信先ネットワークに対して、ルーティング処理が行われます。
内部サーバーにパケットが到達します。
通信の流れ(inside→outsideへの通信) ※通信OK
外部サーバーから内部サーバー宛に通信が開始されます。
NATルーターにパケットが到達します。
送信先ネットワークに対して、ルーティング処理が行われます。
送信先アドレスをNAT変換します。
外部サーバーにパケットが到達します。
通信確認
内部サーバーから外部サーバーに通信を行い、NATのステータスを確認します。
NATのステータスは、下記のコマンドで確認できます。
show ip nat translations
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- --- --- 192.168.2.1 200.200.1.1
Cisco機器の静的NAT(スタティックNAT)の場合、設定した値が確認できます。
Server2:~$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=63 time=8.566 ms
64 bytes from 192.168.1.1: seq=1 ttl=63 time=5.290 ms
64 bytes from 192.168.1.1: seq=2 ttl=63 time=9.345 ms
64 bytes from 192.168.1.1: seq=3 ttl=63 time=4.931 ms
64 bytes from 192.168.1.1: seq=4 ttl=63 time=5.492 ms
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- --- --- 192.168.2.1 200.200.1.1
icmp 192.168.1.1:3747 192.168.1.1:3747 192.168.2.1:3747 200.200.1.1:3747
NATエントリーが追加され、プロトコル/ポート番号なども表示されます。
show ip nat translations の見方は下記の通りです。
項目 | 意味 | 説明 |
---|---|---|
Pro | プロトコル | TCP/UDP/ICMPなどのプロトコル情報 |
Inside global | 内部機器のグローバルアドレス | インサイド側の機器のアウトサイド側で見えるアドレス |
Inside local | 内部機器のローカルアドレス | インサイド側の機器のインサイド側で見えるアドレス |
Outside local | 外部機器のローカルアドレス | アウトサイド側の機器のインサイド側で見えるアドレス |
Outside global | 外部機器のグローバルアドレス | アウトサイド側の機器のアウトサイド側で見えるアドレス |
難解な表記となっていますが、下記のように覚えると分かりやすいです。
デバッグ確認
ルーターでのNAT状況を確認するために、下記のデバッグコマンドを実行します。
debug ip nat detailed
NAT実施時のデバッグログ
Router#
07:17:43.247: NAT: s=200.200.1.1->192.168.2.1, d=192.168.1.1 [41254]
- 送信元のNAT結果
- s=200.200.1.1->192.168.2.1:送信元(s – source)をNAT変換
- d=200.200.1.1:送信先(d – destination)は変更なし
キャプチャ確認
NAT状況を確認するため、双方のサーバーでパケットキャプチャの結果を確認します。
外部サーバー側のパケットキャプチャ
要求(request)パケットの送信元、応答(reply)パケットの送信先が、”200.200.1.1″となっていることがわかります。
内部サーバー側のパケットキャプチャ
要求(request)パケットの送信元、応答(reply)パケットの送信先が、”192.168.2.1″となっていることがわかります。
逆方向の通信について
上記のNAT設定(ip nat outside source 〜〜)では、内部サーバーから外部サーバーのプライベートIPアドレス(192.168.2.1)に通信した場合も、NAT変換が行われます。
下記のように双方向でのNATが可能です。
内部サーバーから通信した場合のデバッグログ
Router#
07:28:32.723: NAT*: s=192.168.1.1, d=192.168.2.1->200.200.1.1 [33936]
送信先がNATされていることがわかります。(d=192.168.2.1->200.200.1.1)