ルータ2台で始めるVRF入門(7)
ルート漏洩(3): GRT-VRF間ルート漏洩(2)
1年弱くらい前に6回シリーズでルータ2台で始めるVRF入門という記事を書いていたのですが、今回はその続編です。きっかけは、
@stereocat BGP Support for IP Prefix Export from a VRF Table into the Global Table
2012-12-07 22:39:08 via Silver Bird to @stereocat
第4回: ルート漏洩(2): GRT-VRF間ルート漏洩では、GRT/VRF 間でのルート漏洩の話を取り上げたのですが、このときは GRT の経路を VRF へインポートする、という片方向の経路設定しかできず、GRT-VRF 間で通信できるようにする、というのは非常にやりにくい状態ですよ、という話をしていました。しかし、IOS 15.2(4)S より "BGP Support for IP Prefix Export from a VRF Table into the Global Table" という機能が実装されているそうなのです(2012/07/25)。
せっかくシリーズここまでVRFの話を取り上げてきたわけで、これは試しておかねばなるまい、と。……というのと、12月に Cisco892J の中古が出ていたので買っちゃったんだよね…これはこれで活用する必要があるだろうということもあり、ちょっと試してみました。この記事は ルータ2台で始めるVRF入門 第4回: ルート漏洩(2): GRT-VRF間ルート漏洩 の続きになります。
復習(GRT-VRF間ルート漏洩)
まず、第4回で試してみた、GRTの経路をVRFへインポートする、というところまで持っていきます。(詳細は第4回記事参照)
設定(exprtr01)
- BGP
router bgp 64601 bgp router-id 10.0.0.0 bgp log-neighbor-changes no bgp default ipv4-unicast ! address-family ipv4 redistribute connected redistribute static exit-address-family ! address-family ipv4 vrf expvrf01 redistribute connected exit-address-family ! address-family ipv4 vrf expvrf02 bgp router-id 10.0.0.2 redistribute connected neighbor 10.2.2.2 remote-as 64601 neighbor 10.2.2.2 update-source Vlan722 neighbor 10.2.2.2 activate exit-address-family ! address-family ipv4 vrf expvrf03 redistribute connected redistribute ospf 64601 exit-address-family !
- VRF(expvrf01: Hub-VRF)
ip vrf expvrf01 rd 64601:1 import ipv4 unicast map GRT_MAP route-target export 64601:1 route-target import 64601:1 route-target import 64601:2 route-target import 64601:3 ! ip prefix-list GRT_PREFIX seq 5 permit 10.1.0.0/24 ip prefix-list GRT_PREFIX seq 10 permit 10.2.0.0/24 ip prefix-list GRT_PREFIX seq 15 permit 10.3.0.0/24 ip prefix-list GRT_PREFIX seq 20 permit 10.0.0.0/28 le 32 ! route-map GRT_MAP permit 10 match ip address prefix-list GRT_PREFIX !
設定(exprtr02)
GRT 部分は static routing を使っています。以前の記事では、expvrf01,VLAN801(10.1.1.1) → exprtr02(GRT),VLAN810(10.3.0.1) に ICMP 撃ってみて片側にしか行かない、というのを見ていたのですが、これだけだと実はダメです。exprtr01(GRT)で仮に expvrf01 の経路情報を持っていても、exprtr02(GRT) では expvrf01 の経路に対する Next Hop を解決できないんだよね。
なので、expvrf02(GRT) にはあらかじめデフォルトルートを設定しておく必要があります。
exprtr2#sh run | inc ip route ip route 0.0.0.0 0.0.0.0 10.2.0.1 ip route 10.0.0.0 255.255.255.255 10.2.0.1 ip route 10.1.0.0 255.255.255.0 10.2.0.1 ip route vrf mgmt 0.0.0.0 0.0.0.0 192.168.250.1 exprtr2#
確認(経路)
- expvrf01(GRT)の経路 : 他のVRFの経路は入ってこない
exprtr1#sh ip route (略) Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks C 10.0.0.0/32 is directly connected, Loopback0 S 10.0.0.10/32 [1/0] via 10.2.0.2 C 10.1.0.0/24 is directly connected, Vlan800 L 10.1.0.1/32 is directly connected, Vlan800 C 10.2.0.0/24 is directly connected, Vlan720 L 10.2.0.1/32 is directly connected, Vlan720 S 10.3.0.0/24 [1/0] via 10.2.0.2 exprtr1#
- expvrf01 (Hub-VRF) の経路 : GRTの経路も入ってくる
exprtr1#sh ip route vrf expvrf01 Routing Table: expvrf01 (略) Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 26 subnets, 2 masks B 10.0.0.0/32 is directly connected, 00:03:53, Loopback0 C 10.0.0.1/32 is directly connected, Loopback1 B 10.0.0.2/32 is directly connected (expvrf02), 00:13:53, Loopback2 B 10.0.0.3/32 is directly connected (expvrf03), 00:13:25, Loopback3 B 10.0.0.10/32 [20/0] via 10.2.0.2, 00:03:53 B 10.0.0.12/32 [200/0] via 10.2.2.2 (expvrf02), 00:13:53 B 10.0.0.13/32 [20/2] via 10.2.3.2 (expvrf03), 00:13:25, Vlan723 B 10.1.0.0/24 is directly connected, 00:03:53, Vlan800 L 10.1.0.1/32 is directly connected, Vlan800 C 10.1.1.0/24 is directly connected, Vlan801 L 10.1.1.1/32 is directly connected, Vlan801 B 10.1.2.0/24 is directly connected (expvrf02), 00:13:53, Vlan802 L 10.1.2.1/32 is directly connected, Vlan802 B 10.1.3.0/24 is directly connected (expvrf03), 00:13:25, Vlan803 L 10.1.3.1/32 is directly connected, Vlan803 B 10.2.0.0/24 is directly connected, 00:03:53, Vlan720 L 10.2.0.1/32 is directly connected, Vlan720 B 10.2.2.0/24 is directly connected (expvrf02), 00:13:53, Vlan722 L 10.2.2.1/32 is directly connected, Vlan722 B 10.2.3.0/24 is directly connected (expvrf03), 00:13:25, Vlan723 L 10.2.3.1/32 is directly connected, Vlan723 B 10.3.0.0/24 [20/0] via 10.2.0.2, 00:03:53 B 10.3.2.0/24 [200/0] via 10.2.2.2 (expvrf02), 00:13:53 B 10.3.3.0/24 [20/2] via 10.2.3.2 (expvrf03), 00:13:25, Vlan723 B 10.4.2.0/24 [200/0] via 10.2.2.2 (expvrf02), 00:13:53 B 10.4.3.0/24 [20/2] via 10.2.3.2 (expvrf03), 00:13:25, Vlan723 exprtr1#
- exprtr2(GRT)の経路 : デフォルトルートを設定しておく
exprtr2#sh ip route (略) Gateway of last resort is 10.2.0.1 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 10.2.0.1 10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks S 10.0.0.0/32 [1/0] via 10.2.0.1 C 10.0.0.10/32 is directly connected, Loopback0 S 10.1.0.0/24 [1/0] via 10.2.0.1 C 10.2.0.0/24 is directly connected, Vlan720 L 10.2.0.2/32 is directly connected, Vlan720 C 10.3.0.0/24 is directly connected, Vlan810 L 10.3.0.1/32 is directly connected, Vlan810 exprtr2#
確認(ICMP)
この状態で expvrf01 → exprtr02(GRT) へ icmp 撃って片方向にしか経路情報が見えていないので、通信ができないことを確認します。
- exprtr1
exprtr1#ping vrf expvrf01 Protocol [ip]: Target IP address: 10.3.0.1 Repeat count [5]: Datagram size [100]: Timeout in seconds [2]: Extended commands [n]: y Source address or interface: vlan801 Type of service [0]: Set DF bit in IP header? [no]: Validate reply data? [no]: Data pattern [0xABCD]: Loose, Strict, Record, Timestamp, Verbose[none]: Sweep range of sizes [n]: Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.3.0.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 *Jan 6 11:54:36.827: ICMP: dst (10.1.1.1) host unreachable sent to 10.3.0.1. *Jan 6 11:54:38.827: ICMP: dst (10.1.1.1) host unreachable sent to 10.3.0.1. *Jan 6 11:54:40.827: ICMP: dst (10.1.1.1) host unreachable sent to 10.3.0.1. *Jan 6 11:54:42.831: ICMP: dst (10.1.1.1) host unreachable sent to 10.3.0.1. *Jan 6 11:54:44.831: ICMP: dst (10.1.1.1) host unreachable sent to 10.3.0.1. Success rate is 0 percent (0/5) exprtr1#
- exprtr2
exprtr2# *Jan 6 11:48:34.851: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:48:34.851: ICMP: dst (10.3.0.1) host unreachable rcv from 10.2.0.1 *Jan 6 11:48:36.847: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:48:36.847: ICMP: dst (10.3.0.1) host unreachable rcv from 10.2.0.1 *Jan 6 11:48:38.847: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:48:38.847: ICMP: dst (10.3.0.1) host unreachable rcv from 10.2.0.1 *Jan 6 11:48:40.851: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:48:40.851: ICMP: dst (10.3.0.1) host unreachable rcv from 10.2.0.1 *Jan 6 11:48:42.851: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:48:42.851: ICMP: dst (10.3.0.1) host unreachable rcv from 10.2.0.1 exprtr2#
復習のまとめ
- import map で GRT が持っている経路情報を VRF にインポートすることはできましたが、その逆はできていませんでした。
- そのため、GRT-VRF間で、ルート漏洩による通信を行う事ができませんでした*1。
IP Prefix Export from a VRF Table into the Global Table 実験
設定
VRF 上で import ipv4 の逆、"export ipv4" コマンドが使えるようになりました。使い方もほぼ同様。試しに、expvrf01 の持つ経路を GRT にエクスポートするように設定してみます。
- exprtr1
! ip prefix-list VRF1_PREFIX seq 5 permit 10.1.1.0/24 ip prefix-list VRF1_PREFIX seq 10 permit 10.0.0.0/28 le 32 ! route-map VRF1_MAP permit 10 match ip address prefix-list VRF1_PREFIX ! ip vrf expvrf01 export ipv4 unicast map VRF1_MAP !
これだけ。
確認(経路)
- expvrf01
- 変化がないので省略
- exprtr01(GRT)
- expvrf01の持つ経路情報(10.1.1.X)が現れます。
exprtr1#sh ip route Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP a - application route + - replicated route, % - next hop override Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 10 subnets, 2 masks C 10.0.0.0/32 is directly connected, Loopback0 B 10.0.0.1/32 is directly connected, 00:00:06, Loopback1 S 10.0.0.10/32 [1/0] via 10.2.0.2 C 10.1.0.0/24 is directly connected, Vlan800 L 10.1.0.1/32 is directly connected, Vlan800 B 10.1.1.0/24 is directly connected, 00:00:06, Vlan801 L 10.1.1.1/32 is directly connected, Vlan801 C 10.2.0.0/24 is directly connected, Vlan720 L 10.2.0.1/32 is directly connected, Vlan720 S 10.3.0.0/24 [1/0] via 10.2.0.2 exprtr1#
- exprtr2
- 変化がないので省略
確認(ICMP)
GRT/VRF 間で相互に経路情報が見えるようになるので、普通に ICMP が通るようになります。
- exprtr1
exprtr1#ping vrf expvrf01 Protocol [ip]: Target IP address: 10.3.0.1 Repeat count [5]: Datagram size [100]: Timeout in seconds [2]: Extended commands [n]: y Source address or interface: vlan801 Type of service [0]: Set DF bit in IP header? [no]: Validate reply data? [no]: Data pattern [0xABCD]: Loose, Strict, Record, Timestamp, Verbose[none]: Sweep range of sizes [n]: Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.3.0.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms exprtr1# *Jan 6 11:56:53.555: ICMP: echo reply rcvd, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 2 *Jan 6 11:56:53.555: ICMP: echo reply rcvd, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 2 *Jan 6 11:56:53.555: ICMP: echo reply rcvd, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 2 *Jan 6 11:56:53.559: ICMP: echo reply rcvd, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 2 *Jan 6 11:56:53.559: ICMP: echo reply rcvd, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 2 exprtr1#
- exprtr2
exprtr2# *Jan 6 11:50:51.575: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:50:51.575: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:50:51.575: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:50:51.579: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 *Jan 6 11:50:51.579: ICMP: echo reply sent, src 10.3.0.1, dst 10.1.1.1, topology BASE, dscp 0 topoid 0 exprtr2#
まとめ
- IOS 15.2(4)S から、"BGP Support for IP Prefix Export from a VRF Table into the Global Table" という feature が実装されています。
- "export map" コマンドが使えるようになります。
- "export map" コマンドを使うことで、VRFテーブルにある経路情報を、GRTへ漏洩させることができます。
- VRF/GRT 間の経路情報は import/export map コマンドで交換できます。これにより、GRT-VRF 間でルート漏洩による通信を行うことができるようになります。