Ciscoルータで同一セグメントNAT+HSRPを構成する


#やりたいこと
Ciscoルータで同一セグメント上のクラスタホストの物理IPアドレス、及び仮想IPアドレスを一意となる同一セグメントの別IPアドレスにNAT変換してかつ冗長化。

#構成概要
・NATはCisco891FJで行う。
・HSRPでルータ2台を冗長化する。
・Inside用とOutside用のL3インターフェースが同一セグメントにそれぞれ必要となるため、VRFを使用してルーティングテーブルを分離する。
・Inside側はグローバルテーブル、Outside側をVRFテーブルとする。
・Inside⇒Outside変換のためテーブル間ルーティング必要となる。これにはPBRを使用する。
・Outside⇒Inside変換時はテーブル間ルーティングしない。
※NAT変換が行われた後、宛先IPアドレスがルーティングテーブルのDirectConnectエントリにマッチするため、直接ホストに転送される。パケットがInsideインターフェースを一切経由せずともNAT処理が成立する点は直感的にかなり理解し難いがそういうものらしい。PBRなどを使用すればInsideインターフェースを経由させることも可能だが、なくても問題なかった。
・各ルーティングテーブル毎にHSRPグループを構成して2つの仮想IPを持たせる。
・オブジェクトトラッキングを使用し、2つのHSRPグループが連動して切り替わるようにする。
・機器の管理用インターフェースも別のVRFで分ける（HSRPは構成しない）。
・セグメント内でのNATアドレス重複によるエラーを回避する。
・ネクストホップとなるL3スイッチに静的ARPエントリを設定する。当該エントリでルータでNAT変換後のIPアドレスをHSRPの仮想MACアドレスを紐づける。これにより、NATアドレス宛にルーティングされてくるパケットを常にHSRPのActiveルータで受信することが可能となる。

#設定
正系ルータのコンフィグ

```ruby:正系ルータ
#VRF作成
ip vrf 10
rd 10:1

ip vrf MGMT
rd 100:1

#VLAN作成
vlan 1267
vlan 2267

#ルーティング設定
ip route vrf 10 0.0.0.0 0.0.0.0 10.48.16.254

#ルートマップ作成
ip access-list extended 101
permit ip host 10.48.16.2 any
permit ip host 10.48.16.3 any
permit ip host 10.48.16.4 any 

route-map MAP-TO-VRF permit 10
match ip address 101
set vrf 10

#インターフェース設定
int fa0
ip vrf fowarding MGMT
ip address 10.48.23.73 255.255.255.0

int vlan 1267
ip vrf fowarding 10
ip address 10.48.16.246 255.255.255.0
ip nat outside

int vlan 2267
ip address 10.48.16.249 255.255.255.0
ip policy route-map MAP-TO-VRF
ip nat inside

int gi0
no shutdown
switchport mode access
switchport access vlan 1267

int gi1
no shutdown
switchport mode access
switchport access vlan 2267

#オブジェクトトラッキング
track 11 interface interface gi0 line-protocol
track 12 interface interface Vlan1267 ip routing
track 21 interface interface gi1 line-protocol 
track 22 interface interface Vlan2267 ip routing

#HSRP設定
int vlan 1267
vstandby 10 priority 105
standby 10 ip 10.48.16.248
standby 10 preempt
standby 10 track 11 decremen 100
standby 10 track 12 decremen 100
standby 10 track 21 decremen 100
standby 10 track 22 decremen 100

int vlan 2267
standby 20 priority 105
standby 20 ip 10.48.16.251
standby 20 preempt
standby 20 name HA
standby 20 track 11 decremen 100
standby 20 track 12 decremen 100
standby 20 track 21 decremen 100
standby 20 track 22 decremen 100

#NAT設定
ip access-list standard 51
permit host 10.48.16.2
permit host 10.48.16.3

route-map MAP-EXT-SV permit 10
match ip address 51

ip nat pool POOL-EXT-SV 10.48.16.1 10.48.16.1 prefix-length 24
ip nat inside source route-map MAP-EXT-SV pool POOL-EXT-SV vrf 10 match-in-vrf overload
ip nat inside source static 10.48.16.4 10.48.16.1 vrf 10 redundancy HA extendable match-in-vrf 

```

副系ルータのコンフィグ

```ruby:副系ルータ
#VRF作成
ip vrf 10
rd 10:1

ip vrf MGMT
rd 100:1

#VLAN作成
vlan 1267
vlan 2267

#ルーティング設定
ip route vrf 10 0.0.0.0 0.0.0.0 10.48.16.254

#ルートマップ作成
ip access-list extended 101
permit ip host 10.48.16.2 any
permit ip host 10.48.16.3 any
permit ip host 10.48.16.4 any 

route-map MAP-TO-VRF permit 10
match ip address 101
set vrf 10

#インターフェース設定
int fa0
ip vrf fowarding MGMT
ip address 10.48.23.74 255.255.255.0

int vlan 1267
ip vrf fowarding 10
ip address 10.48.16.246 255.255.255.0
ip nat outside

int vlan 2267
ip address 10.48.16.249 255.255.255.0
ip policy route-map MAP-TO-VRF
ip nat inside

int gi0
no shutdown
switchport mode access
switchport access vlan 1267

int gi1
no shutdown
switchport mode access
switchport access vlan 2267

#オブジェクトトラッキング
track 11 interface interface gi0 line-protocol
track 12 interface interface Vlan1267 ip routing
track 21 interface interface gi1 line-protocol 
track 22 interface interface Vlan2267 ip routing

#HSRP設定
int vlan 1267
standby 10 priority 100
standby 10 ip 10.48.16.248
standby 10 preempt
standby 10 track 11 decremen 100
standby 10 track 12 decremen 100
standby 10 track 21 decremen 100
standby 10 track 22 decremen 100

int vlan 2267
standby 20 priority 100
standby 20 ip 10.48.16.251
standby 20 preempt
standby 20 name HA
standby 20 track 11 decremen 100
standby 20 track 12 decremen 100
standby 20 track 21 decremen 100
standby 20 track 22 decremen 100

#NAT設定
ip access-list standard 51
permit host 10.48.16.2
permit host 10.48.16.3

route-map MAP-EXT-SV permit 10
match ip address 51

ip nat pool POOL-EXT-SV 10.48.16.1 10.48.16.1 prefix-length 24
ip nat inside source route-map MAP-EXT-SV pool POOL-EXT-SV vrf 10 match-in-vrf overload
ip nat inside source static 10.48.16.4 10.48.16.1 vrf 10  redundancy HA extendable match-in-vrf 

```

ネクストホップのL3スイッチに追加する静的ARP(Catalystの前提)

```ruby:L3スイッチ
arp 10.48.16.1 0000.0C07.AC.<HSRP-GID> arpa
```

上記のコンフィグで一応イメージ通りに動きました。
雑ですみません。
その内構成図とか設定の補足とか足します。