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

ルート漏洩(1): VRF間ルート漏洩

ルート漏洩とルートターゲット

VRF 間で通信を実現させるためには、VRF が持っている経路情報を交換させることが必要になります。(これを ルート漏洩/Route leaking と呼びます。)

ルートの交換には MPBGP, Route Target (RT) 拡張コミュニティを使用します。…これもまた細かく書くときりがないので、第 1 回でもあげた参考資料を読んでもらうとして。ざっくり書くと

  • VRF は自分が持っている経路情報に RT コミュニティを設定して BGP の経路情報に載せる。(export)
  • VRF は指定した RT コミュニティを BGP の経路情報から自分の経路情報に取り込む。(import)

これだけ。

各 VRF が import/export する経路と RT コミュニティの付け方によって VRF 間でどのように通信できるかが制御できます。

論理構成

こんな感じで。

VRF 間の点線がルート漏洩を表します。ここでは、expvrf01 をハブ、expvrf02/03 をスポークとする Hub & Spoke 構成を作ります。ハブ-スポーク間は通信ができますが、スポーク同士 (expvrf02-expvrf03) は通信ができません。例えば、顧客の環境を VRF で収容する際、顧客向けの共有サービスを提供したいが、顧客間は相互に独立で通信させないようにしたい、というような状況が当てはまります。

ここでは VRF 同士のルート漏洩の話をします。GRT は独立。そこの話は次回で。

設定

おおまかな操作:

  • 各 VRF では、route-target で import/export する RT コミュニティ番号を設定します。
    • いままでのコンフィグで自分の分についてはすでに設定しています。
  • 各 VRF は、接続したい VRF の RT コミュニティ番号を import します。
    • VRF 双方で経路を交換できていれば(相互に互いの経路が見えていれば)お互いに通信できます。
  • 経路の交換は BGP プロセスが持つ経路情報の色づけ(コミュニティ)と選択によっておこなわれるので、そもそも、漏洩させたい経路は BGP プロセスに入れておく必要があります。
    • VRF
      • redistribute connected とかその辺は適宜設定します。(address-family ipv4 vrf の中)
    • BGPを使っている場合
      • 特に何もしなくても最初から BGP/vpnv4 に載るので大丈夫。
    • OSPF を使っている場合
      • OSPF と BGP 双方向で経路情報を再配布する必要があります。(OSPF で経路を配っている他の機材に経路を渡すため。)

ルータ設定:

  • expvrf01
    • expvrf02/03 の経路を import します。
ip vrf expvrf01
 rd 64601:1
 route-target export 64601:1
 route-target import 64601:1
 route-target import 64601:2
 route-target import 64601:3
!
router bgp 64601
 !
 address-family ipv4 vrf expvrf01
  redistribute connected
 exit-address-family
!
  • expvrf02
    • expvrf01 の経路を import します。
ip vrf expvrf02
 rd 64601:2
 route-target export 64601:2
 route-target import 64601:2
 route-target import 64601:1
!
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
 exit-address-family
!
  • expvrf03
    • expvrf01 の経路を import します。
    • OSPF から/へ経路の再配布をします。
ip vrf expvrf03
 rd 64601:3
 route-target export 64601:3
 route-target import 64601:3
 route-target import 64601:1
!
router bgp 64601
 !
 address-family ipv4 vrf expvrf03
  redistribute connected
  redistribute ospf 64601
 exit-address-family
!
router ospf 64601 vrf expvrf03
 router-id 0.0.0.3
 capability vrf-lite
 redistribute bgp 64601 subnets
 passive-interface default
 no passive-interface Vlan723
 network 10.0.0.3 0.0.0.0 area 0
 network 10.1.3.0 0.0.0.255 area 0
 network 10.2.3.0 0.0.0.255 area 0
!
確認
  • expvrf01
exprtr1#sh ip route vrf expvrf01

Routing Table: expvrf01
(略)
Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 19 subnets, 2 masks
C        10.0.0.1/32 is directly connected, Loopback1
B        10.0.0.2/32 is directly connected (expvrf02), 00:12:43, Loopback2
B        10.0.0.3/32 is directly connected (expvrf03), 00:07:48, Loopback3
B        10.0.0.12/32 [200/0] via 10.2.2.2 (expvrf02), 00:12:43
B        10.0.0.13/32 [20/2] via 10.2.3.2 (expvrf03), 00:07:48, Vlan723
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:12:43, Vlan802
L        10.1.2.1/32 is directly connected, Vlan802
B        10.1.3.0/24 is directly connected (expvrf03), 00:07:48, Vlan803
L        10.1.3.1/32 is directly connected, Vlan803
B        10.2.2.0/24 is directly connected (expvrf02), 00:12:43, Vlan722
L        10.2.2.1/32 is directly connected, Vlan722
B        10.2.3.0/24 is directly connected (expvrf03), 00:07:48, Vlan723
L        10.2.3.1/32 is directly connected, Vlan723
B        10.3.2.0/24 [200/0] via 10.2.2.2 (expvrf02), 00:12:43
B        10.3.3.0/24 [20/2] via 10.2.3.2 (expvrf03), 00:07:48, Vlan723
B        10.4.2.0/24 [200/0] via 10.2.2.2 (expvrf02), 00:12:43
B        10.4.3.0/24 [20/2] via 10.2.3.2 (expvrf03), 00:07:48, Vlan723
exprtr1#
  • expvrf02
exprtr1#sh ip route vrf expvrf02

Routing Table: expvrf02
(略)
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:12:53, Loopback1
C        10.0.0.2/32 is directly connected, Loopback2
B        10.0.0.12/32 [200/0] via 10.2.2.2, 01:14:05
B        10.1.1.0/24 is directly connected (expvrf01), 00:12:53, 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, 01:14:05
B        10.4.2.0/24 [200/0] via 10.2.2.2, 01:05:36
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:12:02, Loopback1
C        10.0.0.3/32 is directly connected, Loopback3
O        10.0.0.13/32 [110/2] via 10.2.3.2, 01:22:03, Vlan723
B        10.1.1.0/24 is directly connected (expvrf01), 00:12:02, 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, 01:22:03, Vlan723
O        10.4.3.0/24 [110/2] via 10.2.3.2, 01:04:29, Vlan723
exprtr1#
  • expvrf13/exprtr2
    • expvrf03 で、BGP → OSPF の経路再配布を行わないと、expvrf13 に expvrf01 の経路が伝わりません。(再配布している場合、このように OSPF external type 2 で広告されます。)
exprtr2#sh ip route vrf expvrf13

Routing Table: expvrf13
(略)
       E1 - OSPF external type 1, E2 - OSPF external type 2
(略)
Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 11 subnets, 2 masks
O E2     10.0.0.1/32 [110/1] via 10.2.3.1, 00:05:45, Vlan723
O        10.0.0.3/32 [110/2] via 10.2.3.1, 01:16:15, Vlan723
C        10.0.0.13/32 is directly connected, Loopback3
O E2     10.1.1.0/24 [110/1] via 10.2.3.1, 00:05:45, Vlan723
O        10.1.3.0/24 [110/2] via 10.2.3.1, 01:07:51, Vlan723
C        10.2.3.0/24 is directly connected, Vlan723
L        10.2.3.2/32 is directly connected, Vlan723
C        10.3.3.0/24 is directly connected, Vlan813
L        10.3.3.1/32 is directly connected, Vlan813
C        10.4.3.0/24 is directly connected, Vlan823
L        10.4.3.1/32 is directly connected, Vlan823
exprtr2#

経路情報から、以下のような通信が実現できます。

  • ハブ (expvrf01) からはスポークの経路が見えています。
    • 経路として見えているので、ハブからスポークへパケットを転送することができます。
  • スポーク (expvrf02/03) からはハブの経路が見えています。
    • 経路として見えているので、スポークからハブへパケットを転送することができます。
  • あるスポークから他のスポークの経路は見えません。
    • 経路として見えていないので、あるスポークから別のスポークへパケットを転送することはできません。
まとめ
  • RT コミュニティ設定 (route-tartget import/export) を利用することで、VRF が持っている経路情報を、VRF 同士で交換することができます。これをルート漏洩と言います。
  • VRF 間で相互に経路を交換できていれば、通信ができます。
    • Hub & Spoke 構成の場合:
      • ハブはすべてのスポークの経路をインポートします。
      • スポークはハブの経路をインポートします。
      • ハブと各スポークは相互に経路情報を交換するので、通信ができます。しかし、スポーク同士はお互いの経路情報を持たないので通信ができません。(スポーク同士は、経路情報的に、それぞれ互いに見えていません。)
  • GRT は VRF ではないので、この方法では GRT-VRF 間の通信はできません。(そもそも GRT は ipv4 AF として管理されているので別物。) GRT-VRF 間の通信は別な方法で実現する必要があります。それは次回やります。