Cisco IOS IPサービス – NAT on a stick

スポンサーリンク

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

なお、設定全文は下記ファイルです。ルーティング等の設定は省略しますので、必要に応じて下記を参照下さい。

BB1
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname BB1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
ip subnet-zero
!
!
no ip domain lookup
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 200.1.1.1 255.255.255.0
!
interface FastEthernet0/0
 ip address 200.0.12.1 255.255.255.0
 duplex auto
 speed auto
!
router bgp 100
 no synchronization
 bgp log-neighbor-changes
 network 200.1.1.0
 neighbor 200.0.12.2 remote-as 100
 no auto-summary
!
ip http server
ip classless
!
!
!
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
!
!
end
R2
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
ip subnet-zero
!
!
no ip domain lookup
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
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
 duplex auto
 speed auto
!
router ospf 1
 log-adjacency-changes
 network 10.2.2.2 0.0.0.0 area 0
 network 192.168.23.2 0.0.0.0 area 0
 default-information originate always
!
router bgp 100
 no synchronization
 bgp log-neighbor-changes
 network 200.0.2.0
 neighbor 200.0.12.1 remote-as 100
 no auto-summary
!
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 nat inside source static 10.3.3.3 200.0.2.3
ip http server
ip classless
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
!
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
!
!
end
R3
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R3
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
ip subnet-zero
!
!
no ip domain lookup
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.3.3.3 255.255.255.0
!
interface FastEthernet0/0
 ip address 192.168.23.3 255.255.255.0
 duplex auto
 speed auto
!
router ospf 1
 log-adjacency-changes
 network 10.3.3.3 0.0.0.0 area 0
 network 192.168.23.3 0.0.0.0 area 0
!
ip http server
ip classless
!
!
!
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 password cisco
 login
!
!
end

設定説明

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>
タイトルとURLをコピーしました