1. ドキュメントの目的
ヘアピン NAT ( NAT on a stick とも呼ばれます ) の設定方法は以下のドキュメントに紹介されていますが、IOS15.X 等の比較的新しい IOS ではNAT 周りの実装変更等の影響により紹介されている設定では正常に動作しない問題が報告されています。
この問題は以下の ID で登録されています。
CSCtx82633 Legacy Nat on stick feature broken
このドキュメントでは IOS15.X 等の比較的新しい IOS を使用して前述のドキュメントの Example1 を実現するための設定方法を紹介します。
2. ネットワーク構成と要件
ネットワーク構成

※このドキュメントでは 10.0.0.X を内部ネットワークで使用するプライベートアドレスとして、
192.168.X.X, 177.10.X.X をインターネット上で使用されるグローバルアドレス相当として説明しています。
上記ネットワークには、同一のネットワークセグメント上にプライベートアドレス( 10.0.0.11 - 13 )がアサインされた Host 郡と、グローバルアドレス( 192.168.1.1 )がアサインされた Internet Gateway が存在します。 Host とインターネット上のノードが通信を行うために NAT Router においてプライベートアドレスとグローバルアドレスを変換する必要があります。
NAT Router は単一の物理インタフェースで同セグメントに接続されており、プライマリ IP アドレスとしてプライベートアドレス( 10.0.0.2 )を、セカンダリ IP アドレスとしてグローバルアドレス( 192.168.1.2 )が設定されています。
NAT Router は物理インタフェースで受信した NAT 対象パケットを Loopback0 にルーティングする際に NAT変換を行い、変換後のパケットを同じ物理インタフェースから送信します。
要件を次に示します。
要件
インターネットで利用可能なアドレスとして ISP から 192.168.2.1 ~ 192.168.2.3 を払い出されている。Host 郡は何れかの IP アドレスを使ってインターネット上のノードと通信を行う。
全てのホストはインターネット上のノードと通信できなければならない。
インターネット上のノードは 192.168.2.1 で Host2 にアクセスできなければならない。
3. 設定
NAT Router の設定を以下に示します。前述のドキュメントとの設定差分は赤字で記載しています。
interface Loopback0
ip address 10.0.1.1 255.255.255.252
ip nat outside
ip virtual-reassembly in
!
interface Ethernet0/0
ip address 192.168.1.2 255.255.255.0 secondary
ip address 10.0.0.2 255.255.255.0
ip nat inside
ip virtual-reassembly in
ip policy route-map nat-loop
!
ip nat pool external 192.168.2.2 192.168.2.3 prefix-length 29 no-alias (*)
ip nat inside source list 10 pool external overload (*)
ip nat inside source static 10.0.0.12 192.168.2.1 no-alias
ip route 0.0.0.0 0.0.0.0 192.168.1.1
ip route 192.168.2.0 255.255.255.0 Ethernet0/0
!
route-map nat-loop permit 10
match ip address 102
set ip next-hop recursive 10.0.1.0
!
!
access-list 10 permit 10.0.0.0 0.0.0.255
access-list 102 permit ip any 192.168.2.0 0.0.0.255
access-list 102 permit ip 10.0.0.0 0.0.0.255 any
*Dynamic NAT に使用する NAT Pool の no-alias 機能は 15.2(4)M 以降でサポートされています。それ以前の IOS では no-alias オプションを付与することができず、Dynamic NAT が正しく動作しませんのでご注意ください。