Multiple Site-to-Site VPNs in VRF mode
やりたいこと
MPLS-VPN 的なユースケースですね。
元々は AWS VPC への接続について(複数のVPCに1つのルータで接続する)こういうことをやりたい、という話だったのですが、私はVPCのことわかてってない(さわってない)ので普通に Cisco router でこういうユースケースが実現できるか、という観点で書いています。
[2014-10-13 追記] Multiple Site-to-Site VPNs in VRF mode (2) もうちょっと続きを書きました。
テスト環境
ターゲットとする構成
複数VPN SA と VRF のマッピングのテスト、ということで、以下のような環境を考えてみます。
- 本社(HQ: headquarter) と拠点(branch office)が2個ある。
- 本社のルータは1つのグローバルIPをもち、拠点のルータとVPNをはる。
- branch1-HQ(branch1-vrf) と branch2-HQ(branch2-vrf) は別物なので分離。
図中、インターネットっぽいところは L3 スイッチで適当にルーティングしてありますが、本筋ではないので特に触れません。図は L3 スイッチのコンフィグ書く上でパラメタ決めるために書いてあるだけです。
方法
どうも調べてみると2種類くらいやり方があるみたい。ひとつは、Crypto-Map の設定による方法("VRF-aware IPsec")
もうひとつは Tunnel Interface を VRF に紐付けて作る方法("VPNs in VRF Mode")
- Cisco VPN Services Port Adapter Configuration Guide - Configuring VPNs in VRF Mode [Cisco Security Modules for Routers and Switches] - Cisco
- 仮想ルーティングおよび転送(VRF)モードでのバーチャル プライベート ネットワーク(VPN)の設定 (pdf)
解説としてはこれがわかりやすかったです。
Crypto Map ベースの方法は、RRI(Reverse Route Injection)がどうのとかちょっと動作的にややこしそうだったのと、Tunnelベースの方が今回のユースケースに対しては理解しやすいかなあと思って Tunnel ベースの方を選択しています。
L3構成
rtr7 (HQ) ルータですが、VRF-aware IPsec などのマニュアルを読むと、VRF の用途(役割)の分類として、以下の用語が出てきます。
- FDVRF (Front-Door VRF), Outside-VRF とも。
- 外部と通信するインタフェースを持ち、トンネルを張る(トンネルへの encryption, トンネルからの decryption を行う)
- 図中では fdvrf のこと。
- IVRF (Inside VRF)
- 内部の個別の環境を管理するVRF、トンネルへの encrypt 前, decrypt 後の暗号化されていないトラフィックを扱う。
- 図中では branch1-vrf, branch2-vrf のこと。
- Global VRF
- 図中では GRT (Global Routing Table) と表記しています。ルータにデフォルトで存在するルーティングインスタンスのこと。
- 以下の記述の中では特に使っていません。
VPN設定方針
元々のユースケースが Amazon VPC の話だったので、そっちの設定を元に VPN 設定していく方針で。以降、ISAKNP/IPsec 関連設定のパラメータは原則以下のサイトを参照しています。
rtr7(HQ) VRF設定
rtr7 (HQ) はこんな感じで設定しておきます。
- fdvrf
ip vrf fdvrf rd 65535:10 ! interface Vlan701 ip vrf forwarding fdvrf ip address 192.0.2.254 255.255.255.0 ! ip route vrf fdvrf 0.0.0.0 0.0.0.0 192.0.2.1
- branch1-vrf
ip vrf branch1-vrf rd 1:1 ! interface Vlan901 ip vrf forwarding branch1-vrf ip address 10.1.10.1 255.255.255.0 !
- branch2-vrf
ip vrf branch2-vrf rd 2:1 ! interface Vlan902 ip vrf forwarding branch2-vrf ip address 10.2.10.1 255.255.255.0 !
rtr7(HQ) IPsec グローバル設定
グローバル設定は、トンネル全体に影響するので設定には注意。
- isakmp policy
- IKE phase 1 のポリシ定義。優先度は1が最高、10000が最低。
crypto isakmp policy 1 encr aes authentication pre-share group 2 lifetime 28800
- IPsec Tunnel で keepalive を有効にして、対向の障害を検出する。
keepalive [X] [Y]
, X=キープアライブ間隔(秒), Y=キープアライブ失敗したときのリトライ間隔(秒)
crypto isakmp keepalive 10 10
- IPsec packet の順序が入れ替わったときに、 Anti-Replay Window サイズを超えてしまうとパケットドロップが起きるので、ウィンドウサイズを大きくする (default は 64?)
crypto ipsec security-association replay window-size 128
- DF(Don't Fragment) bit のオーバーライド機能
- Cisco IOS セキュリティ コンフィギュレーション ガ イド:Secure Connectivity - IPsec トンネルを使用する DF ビット オー バーライド機能 - Cisco Systems
- カプセル化する前の DF bit 指定に関係なくパケットを断片化(fragment)する。
crypto ipsec df-bit clear
- 暗号化する前にフラグメントさせる
crypto ipsec fragmentation before-encryption
Branch1 VPN 設定
rtr7(HQ) IKE 設定
FDVRF を指定するところがあるので注意。
crypto keyring branch1-keyring vrf fdvrf pre-shared-key address 198.51.100.254 key branch1key !
- isakmp profile
address
でリモートピアのIP/マスクを指定vrf
で FDVRF を指定。(address
で指定したアドレスが、どのVRFインスタンスにあるか)
crypto isakmp profile branch1-isakmp-profile keyring branch1-keyring match identity address 198.51.100.254 255.255.255.255 fdvrf !
rtr7(HQ) IPsec 設定
- transform-set
- IPsec SA 生成のためのパラメタ定義。
crypto ipsec transform-set branch1-vpn-tfset esp-aes esp-sha-hmac
- ipsec profile
crypto ipsec profile branch1-ipsec-profile set transform-set branch1-vpn-tfset set pfs group2 !
rtr7(HQ) Tunnel Interface 設定
interface Tunnel1 ip vrf forwarding branch1-vrf ip address 169.254.1.1 255.255.255.252 ip virtual-reassembly ip tcp adjust-mss 1396 tunnel source Vlan701 tunnel mode ipsec ipv4 tunnel destination 198.51.100.254 tunnel vrf fdvrf tunnel protection ipsec profile branch1-ipsec-profile !
トンネルの確認
- ISAKMP SA
- Branch1/2 の ISAKMP SA ができてる。
rtr7#sh crypto isakmp sa IPv4 Crypto ISAKMP SA dst src state conn-id status 203.0.113.254 192.0.2.254 QM_IDLE 2006 ACTIVE branch2-isakmp-profile 198.51.100.254 192.0.2.254 QM_IDLE 2003 ACTIVE branch1-isakmp-profile IPv6 Crypto ISAKMP SA rtr7#
- IPsec SA
show crypto ipsec sa
とかでいろいろ出ますが長いので省略…。
経路の見え方
Branch1-HQ について、L3経路情報がどう見えるのか。
- Branch1(rtr1)
- トンネル張るための Internet 接続用セグメント (198.51.100.0/24)
- IPsec トンネル (169.254.1.0/30)
- HQ 側の内部セグメント (10.1.0.0/16) に対しては static route 設定したのでトンネル経由 (via. 169.254.1.1) で見えています。
rtr1#sh ip route (略) Gateway of last resort is 198.51.100.1 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 198.51.100.1 is directly connected, Vlan711 10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks S 10.1.0.0/16 [1/0] via 169.254.1.1 C 10.1.1.0/24 is directly connected, Vlan911 L 10.1.1.1/32 is directly connected, Vlan911 169.254.0.0/16 is variably subnetted, 2 subnets, 2 masks C 169.254.1.0/30 is directly connected, Tunnel1 L 169.254.1.2/32 is directly connected, Tunnel1 198.51.100.0/24 is variably subnetted, 2 subnets, 2 masks C 198.51.100.0/24 is directly connected, Vlan711 L 198.51.100.254/32 is directly connected, Vlan711 rtr1#
- HQ(rtr7), FDVRF
- Internet 接続用のセグメント (192.0.2.0/24) 以外は見えていません。このVRFからは Branch1 も Branch2 も何も見えない。
rtr7#sh ip route vrf fdvrf Routing Table: fdvrf (略) Gateway of last resort is 192.0.2.1 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 192.0.2.1 192.0.2.0/24 is variably subnetted, 2 subnets, 2 masks C 192.0.2.0/24 is directly connected, Vlan701 L 192.0.2.254/32 is directly connected, Vlan701 rtr7#
- HQ(rtr7), IVRF(branch1)
- Internet 接続用のセグメントとかは見えません。
- Static route を設定したので、Branch1 側にある内部セグメント (10.1.0.0/16) がトンネル経由 (via. 169.254.1.2) 経由で見えています。
rtr7#sh ip route vrf branch1-vrf (略) Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks S 10.1.0.0/16 [1/0] via 169.254.1.2 C 10.1.10.0/24 is directly connected, Vlan901 L 10.1.10.1/32 is directly connected, Vlan901 169.254.0.0/16 is variably subnetted, 2 subnets, 2 masks C 169.254.1.0/30 is directly connected, Tunnel1 L 169.254.1.1/32 is directly connected, Tunnel1 rtr7#
- HQ(rtr7), IVRF(branch2)
- Branch1同様。ここも Branch2 に関する情報だけが見えます。
rtr7#sh ip route vrf branch2-vrf Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks S 10.2.0.0/16 [1/0] via 169.254.2.2 C 10.2.10.0/24 is directly connected, Vlan902 L 10.2.10.1/32 is directly connected, Vlan902 169.254.0.0/16 is variably subnetted, 2 subnets, 2 masks C 169.254.2.0/30 is directly connected, Tunnel2 L 169.254.2.1/32 is directly connected, Tunnel2 rtr7#