ルータ2台で始めるVRF入門(5)

経路情報のフィルタリング(OSPF再配布/BGP neighbor route-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) もやっぱりあるので、それはまた次回見ていく。