ルータ2台で始めるVRF入門(5)
経路情報のフィルタリング(OSPF再配布/BGP neighbor route-map)
- 第1回: VRF 基礎の基礎
- 第2回: VRF とダイナミックルーティング
- 第3回: ルート漏洩(1): VRF間ルート漏洩
- 第4回: ルート漏洩(2): GRT-VRF間ルート漏洩
- 第5回: 経路情報のフィルタリング(OSPF再配布/BGP neighbor route-map)
- 第6回: 経路情報のフィルタリング(VRF import/export map)
経路フィルタリング
RT コミュニティ設定で経路の import/export するのは基本的に、RTを設定するVRFが持っている経路全体に対する操作になる。実際やっていくと、一部の経路については import/export したくない、という要件がでてきたりするので、特定の経路だけ漏洩させるためのフィルタリング手法を見ていく。
論理構成
前回と同様。
ただし、
- expvrf02-expvrf12, expvrf03-expvrf13 のスポーク VRF とその先については特に変更しない(相互にすべてアクセス可能)が、以下の経路についてはハブ VRF expvrf01 に経路を渡さないようにして、ハブからのアクセスを一部制限する。
- expvrf12 のセグメント 10.4.2.0/24 は expvrf01 には渡さない。
- expvrf13 のセグメント 10.3.3.0/24 は expvrf01 には渡さない。
設定
まずは素直に考えつく方法として
- expvrf02 は neighbor からもらう経路の一部をフィルタリングする
- expvrf03 は bgp に再配布する経路の一部をフィルタリングする
を試す。
- expvrf02
router bgp 64601 ! 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 neighbor 10.2.2.2 route-map MAP_EXPVRF02_ROUTE in exit-address-family ! ip access-list standard ACL_EXPVRF02_ROUTE permit 10.3.2.0 0.0.0.255 ! route-map MAP_EXPVRF02_ROUTE permit 10 match ip address ACL_EXPVRF02_ROUTE !
- expvrf03
router bgp 64601 ! address-family ipv4 vrf expvrf03 redistribute connected redistribute ospf 64601 route-map MAP_EXPVRF03_ROUTE exit-address-family ! ip access-list standard ACL_EXPVRF03_ROUTE permit 10.4.3.0 0.0.0.255 ! route-map GRT_MAP permit 10 match ip address prefix-list GRT_PREFIX !
確認
- expvrf01
- 10.4.2.0/24, 10.3.3.0/24 が見えなくなった。
exprtr1#sh ip route vrf expvrf01 Routing Table: expvrf01 (略) Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 20 subnets, 2 masks B 10.0.0.0/32 is directly connected, 00:43:58, Loopback0 C 10.0.0.1/32 is directly connected, Loopback1 B 10.0.0.2/32 is directly connected (expvrf02), 00:43:58, Loopback2 B 10.0.0.3/32 is directly connected (expvrf03), 00:43:58, Loopback3 B 10.0.0.10/32 [20/0] via 10.2.0.2, 00:43:58 B 10.1.0.0/24 is directly connected, 00:43:58, 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:43:58, Vlan802 L 10.1.2.1/32 is directly connected, Vlan802 B 10.1.3.0/24 is directly connected (expvrf03), 00:43:58, Vlan803 L 10.1.3.1/32 is directly connected, Vlan803 B 10.2.0.0/24 is directly connected, 00:43:58, Vlan720 B 10.2.2.0/24 is directly connected (expvrf02), 00:43:58, Vlan722 L 10.2.2.1/32 is directly connected, Vlan722 B 10.2.3.0/24 is directly connected (expvrf03), 00:43:58, 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:43:58 B 10.3.2.0/24 [200/0] via 10.2.2.2 (expvrf02), 00:43:47 B 10.4.3.0/24 [20/2] via 10.2.3.2 (expvrf03), 00:43:58, Vlan723 exprtr1#
- expvrf02
- Neighbor でフィルタしているので 10.4.2.0 が見えない。そもそも expvrf02 側にはいっていないから漏洩先 (expvrf01) にも見えない。
exprtr1#sh ip route vrf expvrf02 Routing Table: expvrf02 (略) Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 9 subnets, 2 masks B 10.0.0.1/32 is directly connected (expvrf01), 00:44:43, Loopback1 C 10.0.0.2/32 is directly connected, Loopback2 B 10.1.1.0/24 is directly connected (expvrf01), 00:44:43, Vlan801 L 10.1.1.1/32 is directly connected, Vlan801 C 10.1.2.0/24 is directly connected, Vlan802 L 10.1.2.1/32 is directly connected, Vlan802 C 10.2.2.0/24 is directly connected, Vlan722 L 10.2.2.1/32 is directly connected, Vlan722 B 10.3.2.0/24 [200/0] via 10.2.2.2, 00:44:32 exprtr1#
- expvrf03
exprtr1#sh ip route vrf expvrf03 Routing Table: expvrf03 (略) Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 11 subnets, 2 masks B 10.0.0.1/32 is directly connected (expvrf01), 00:46:07, Loopback1 C 10.0.0.3/32 is directly connected, Loopback3 O 10.0.0.13/32 [110/2] via 10.2.3.2, 00:46:31, Vlan723 B 10.1.1.0/24 is directly connected (expvrf01), 00:46:07, Vlan801 L 10.1.1.1/32 is directly connected, Vlan801 C 10.1.3.0/24 is directly connected, Vlan803 L 10.1.3.1/32 is directly connected, Vlan803 C 10.2.3.0/24 is directly connected, Vlan723 L 10.2.3.1/32 is directly connected, Vlan723 O 10.3.3.0/24 [110/2] via 10.2.3.2, 00:46:31, Vlan723 O 10.4.3.0/24 [110/2] via 10.2.3.2, 00:46:31, Vlan723 exprtr1#
- expvrf03 の方についてはやりたいこと (expvrf03 のルーティングテーブルは変更せずに、expvrf01 に漏洩させる経路を減らす) ができているのでよいとして、expvrf02 については、neighbor から受け取る経路にフィルタをかけると当然自分自身のルーティングテーブルにも経路が入らないわけでこれだとよろしくないのだ。
- OSPF の場合、VRFローカルの経路は OSPF でやって、漏洩させる経路は BGP への再配布で制御することのができる。しかし、BGP の場合はもらった経路はそのまま BGP vpnv4 に入ってしまうわけで、自分が持つ経路と漏洩させる経路を扱うのに、もらう段階で削ってしまってはいけないわけだ。これについては vrf 設定で import map を使う方法と export map を使う方法が考えられる。
まとめ
- VRF とルート漏洩の関する経路フィルタリングとして、まずシンプルに、通常のダイナミックルーティングと同様に以下の 2 方式がある。
- Neighbor からもらうときにフィルタをかける
- 再配布をするときにフィルタをかける
- ただし、neighbor でフィルタをかける方法は、そもそも BGP ipv4 vrf AF へそもそも経路が入らないという状態になるので、自分 VRF には経路を乗せたいが、漏洩先には経路を渡したくない、みたいな制御はできない。
- BGP + OSPF のようにプロトコルを分けて経路情報を管理している場合は、再配布の際にフィルタリングできるので、ローカルの自 VRF がもつ情報と、ルート漏洩させるために BGP に入れる経路と、でそれぞれ制御することができる。
- で、ルート漏洩に関してはそれ用の機能 (import/export map) もやっぱりあるので、それはまた次回見ていく。