inside, outsideが同一I/Fに設定された、複雑構成のNATについて説明します。ルータからの線が一本しか出ていない事から、この構成をNAT on a stickと呼びます。
概要
“NAT on a stick”とは1つのI/Fでinside, outsideの両方の役割を果たすNATの設定方法の事です。”on a stick”という用語は、”1つの物理I/Fで何かタスクを実行する事”を指します。
一般的にNATを使用する場合は、insideとoutisdeは別のInterfaceになります。例えば、以下の構成が一例です。
+--------+ | R2 | NAT outside+-+---+--+NAT inside 200.0.12.2/24│ │192.168.23.2/24 │ │ ----┬--------┴ ┴--------┬-------- │200.0.12.1/24 │192.168.23.3/24 +---+----+ +---+----+ | BB1 | | R3 | +--------+ +--------+
“Nat on a stick”が有効であるのは、以下構成図のようにinsideとoutsideが共有せざるを得ない状況の場合です。”Nat on a stick”を使用する事によって、以下のような物理構成でもNATを実現し、Internetへのアクセスを提供する事ができます。(但し、”Nat on a stick”を使用すると構成が非常に複雑になるので、物理I/Fを増設する提案をした方が無難であると思います。”Nat on a stick”は、他に方法がない場合の最後の手段と考えると良いでしょう。)
+--------+ | R2 | +---+----+ │192.168.23.2/24 (primary) │200.0.12.2/24 (secondary) ----┬----------┴----------┬-------- │200.0.12.1/24 │192.168.23.3/24 +---+----+ +---+----+ | BB1 | | R3 | +--------+ +--------+
NAT on a stick 内部から外部へのアクセス
構成概要
動作確認を行う構成は以下の通りです。
Lo0 10.2.2.2/24 +--------+ | R2 | +---+----+ f0/0│192.168.23.2/24 (primary) │200.0.12.2/24 (secondary) ----┬----------┴----------┬-------- f0/0│200.0.12.1/24 f0/0│192.168.23.3/24 +---+----+ +---+----+ | BB1 | | R3 | +--------+ +--------+ Lo0 200.1.1.1/24 Lo0 10.3.3.3/24
R2の設定で特に重要な部分は以下の通りです。
[R2] interface Loopback0 ip address 10.2.2.2 255.255.255.0 ip nat outside ! interface FastEthernet0/0 ip address 200.0.12.2 255.255.255.0 secondary ip address 192.168.23.2 255.255.255.0 ip nat inside ip policy route-map RMAP_POLICE ! ip nat pool NAT_POOL 200.0.2.100 200.0.2.199 prefix-length 24 ip nat inside source list ACL_NAT_SOURCE pool NAT_POOL overload ! ip route 200.0.2.0 255.255.255.0 FastEthernet0/0 ! ! ip access-list extended ACL_NAT_SOURCE permit ip 192.168.0.0 0.0.255.255 any permit ip 10.0.0.0 0.255.255.255 any ip access-list extended ACL_POLICE permit ip 192.168.0.0 0.0.255.255 any permit ip 10.0.0.0 0.255.255.255 any permit ip any 200.0.2.0 0.0.0.255 ! route-map RMAP_POLICE permit 10 match ip address ACL_POLICE set interface Loopback0
なお、設定全文は下記ファイルです。ルーティング等の設定は省略しますので、必要に応じて下記を参照下さい。
設定説明
NATを行うI/Fを以下のように定義します。この時、物理I/Fをinsideとし、Loopbackをoutsideとした方がルーティングの設定が簡単になります。(NATの処理順序については説明を省略します)
[R2] interface Loopback0 ip nat outside ! interface FastEthernet0/0 ip nat inside
以下のようにNAT変換ルールを定義します。かなりトリッキーな設定ですが、以下の例はinside globalアドレスとして200.0.2.0/24を使用します。inside globalアドレスはR2に存在しないアドレス空間を使用して下さい。(なぜならば、仮に200.0.1.0/24のように存在するアドレスがinside globalとして割り当てると、戻りのパケットが想定通りにNATされません。200.0.1.0/24をinside interfaceで受信してもNATの変換対象とはならないからです。実際に200.0.1.0/24をinside globalとして設定してパケットを観察すると、NATの挙動を納得できると思います。)
[R2] ip nat pool NAT_POOL 200.0.2.100 200.0.2.199 prefix-length 24 ip nat inside source list ACL_NAT_SOURCE pool NAT_POOL overload ! ip access-list extended ACL_NAT_SOURCE permit ip 192.168.0.0 0.0.255.255 any permit ip 10.0.0.0 0.255.255.255 any
inside globalアドレスがどのI/Fに接続されているかルータに教えるため、以下のようなstatic routeを定義します。
[R2] ip route 200.0.2.0 255.255.255.0 FastEthernet0/0
外部から内部へ・内部から外部への両方の通信に対して、以下のようなpolicy routingを定義します。inside I/Fからoutside I/Fへ転送するように見せかける事で、NATの制御対象になるようにします。
[R2] interface FastEthernet0/0 ip policy route-map RMAP_POLICE ! route-map RMAP_POLICE permit 10 match ip address ACL_POLICE set interface Loopback0 ! ip access-list extended ACL_POLICE permit ip 192.168.0.0 0.0.255.255 any permit ip 10.0.0.0 0.255.255.255 any permit ip any 200.0.2.0 0.0.0.255
Cisco公式ドキュメントでは以下のように”set ip next-hop”を使用していますが、”set interface”, “set ip next-hop”のどちらでも問題ありません。
[R2] route-map RMAP_POLICE permit 10 match ip address ACL_POLICE set ip next-hop 10.2.2.22
動作確認
R3からR1へのpingによる疎通確認を行います。
[R3] R3#ping 200.1.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 200.1.1.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 64/88/116 ms R3#
この時のNAT tableは以下の通りです。
[R2] R2#show ip nat translations Pro Inside global Inside local Outside local Outside global icmp 200.0.2.100:8 192.168.23.3:8 200.1.1.1:8 200.1.1.1:8 R2#
NAT on a stick 外部から内部へのアクセス
設定説明
外部から内部へのアクセスを提供するためにはstatic NATを定義します。以下は10.3.3.3(R3)のinside globalアドレスとして200.0.2.3を割り当てる例です。
[R2] ip nat inside source static 10.3.3.3 200.0.2.3
動作確認
BB1からR3へ接続可能である事を確認します。
[BB1] BB1#telnet 200.0.2.3 Trying 200.0.2.3 ... Open User Access Verification Password: R3>