概要

異なるVRF間で通信できるようにするためにVRFルートリークの設定を行います。MP-BGPを利用するとVRFルートリークの制御をより柔軟に行うことができます。MP-BGPによるVRFルートリークについて解説します。

関連記事

スタティックルートを利用したVRFルートリークについて、以下の記事で解説しています。

MP-BGPによるVRFルートリークの設定例を以下の記事にまとめています。

VRFルートリークのポイント

VRFルートリークのポイントは、「通信させたいネットワークのルート情報を異なるVRF間で共有する」ことです。通常、VRFのルーティングテーブルには他のVRFのルート情報は登録されません。VRFルートリークによって、VRFのルーティングテーブルに異なるVRFのルート情報を登録します。

具体的に以下のネットワーク構成で、VRF「AAA」の192.168.1.0/24とVRF「BBB」の172.16.1.0/24間のみ通信可能にする例を考えます。

図 VRFルートリークの例
図 VRFルートリークの例

大事なことは、ルーティングの原則です。「ルーティングテーブルに登録されているネットワーク宛ての通信はできる」ということです。そのために、VRF「AAA」とVRF「BBB」の両方のルーティングテーブルに通信させたい「192.168.1.0/24」と「172.16.1.0/24」のルート情報を登録すればOKです。つまり、VRF「AAA」とVRF「BBB」のルーティングテーブルで、「192.168.1.0/24」と「172.16.1.0/24」のルート情報を共有します。VRF「AAA」のルーティングテーブルにVRF「BBB」の「172.16.1.0/24」のルート情報を登録します。そして、VRF「BBB」のルーティングテーブルにVRF「AAA」の「192.168.1.0/24」のルート情報を登録します。

図 異なるVRF間で通信させたいネットワークのルート情報を共有する
図 異なるVRF間で通信させたいネットワークのルート情報を共有する

このようなVRF間で特定のルート情報を共有できるようにするために、MP-BGPを利用すると柔軟な制御ができます。

MP-BGPとは

さて、MP-BGPによるVRFルートリークについて考えるために、「MP-BGPとは」から話を進めましょう。

MP-BGPとは、MPLS-VPNを実現するためのPEルータ間で利用するルーティングプロトコルです。MP-BGPは、32ビットのIPv4アドレス以外のさまざまなアドレス情報(address-family)を扱えるようにしているBGPの拡張です。

MPLS-VPNにおいて、32ビットのIPv4アドレスにRD(Route Distinguisher)を付加した96ビットのVPNv4ルートを扱うためにMP-BGPを利用します。VPNv4ルートとすることで、MPLS-VPNを利用するユーザのアドレス範囲が重複していても問題ありません。

VPNv4ルート

VRFの32ビットのIPv4ルートを96ビットのVPNv4ルートに変換します。そのために、VRFの64ビットのRDを付加します。VPNv4ルートはBGPルートなので、AS_PATH、ORIGINなどさまざまなBGPアトリビュートも付加します。その中で重要なのがRoute Target(RT)です。RTはBGPの拡張コミュニティアトリビュートの一種です。RTによって、VPNv4ルートをどのVRFで扱うべきなのかを識別します。RTは64ビットの数値ですが、一般的に「<AS番号>:<任意の番号>」というフォーマットで表記します。

VRFには、Import RTとExport RTを設定します。VRF内のIPv4ルートをVPNv4ルートとして生成するには、VRF内のBGPへ再配送を行います。または、VRF内のBGPでnetworkコマンドを設定してもOKです。すると、VRF内のBGPルートにRDを付加してVPNv4ルートとしてMP-BGPテーブルに登録されます。このとき、Export RTが付加されます。

以下の図は、VPNv4ルートを生成する簡単な例です。VRF「AAA」内でOSPFルートとして「192.168.1.0/24」を学習していることを想定しています。VPNv4ルートとして生成するためには、VRF「AAA」でOSPFからBGPへ再配送します。すると、192.168.1.0/24はRDが付加されて「1:100:192.168.1.0/24」という96ビットのアドレスとして、MP-BGPテーブルに登録されます。そして、1:100のRTも付加されます。

図 VPNv4ルート
図 VPNv4ルート

そして、VRFのImport RTによってMP-BGPのVPNv4ルートをどのVRFで扱うべきかを識別します。Import RTに指定しているRTを持つVPNv4ルートをVRF内のBGPテーブルに登録します。

以下の図は、Import RTの考え方の例です。ローカルで生成したVPNv4ルートだとわかりづらいので、他のMP-BGPネイバーから「1:100:192.168.100.0/24 RT 1:100」というVPNv4ルートを受信しているという例です。他のMP-BGPネイバーから受信したVPNv4ルートはMP-BGPテーブルに登録されます。そして、RT 1:100が付加されていると、Import RT 1:100のVRF「AAA」のルートとして扱います。32ビットの192.168.100.0/24としてVRF「AAA」のBGPテーブルに登録されます。

図 Import RT
図 Import RT

この例で192.168.100.0/24をVRF「AAA」で扱うのはRDが1:100だからではありません。RTが1:100だからです。この点を勘違いしないように注意してください。また、例として他のMP-BGPネイバーから受信したVPNv4ルートを考えていますが、ローカルで生成したVPNv4ルートでも同じです。

RDとRTは役割が違う

RDとRTを同じ値に設定していることが多いのですが、RDとRTは全く役割が違っているので注意してください。RDは重複アドレスを扱えるようにするために、32ビットのIPv4アドレスを96ビットのVPNv4アドレスへ拡張するためのものです。そして、RTによってVPNv4アドレスをどのVRFで扱うかを制御します。

MPLS-VPNでユーザの拠点を単純にフルメッシュで接続するだけなら、何も考えずにRDとRTを同じ値にしておけば大丈夫です。フルメッシュではなくて、エクストラネットを設定したいとか、特定のルートだけをハブ&スポークにしたいという場合に、RTを細かく制御します。

なお、RTは1つだけでなく複数付加できます。そして、VRFに対してImport/Export RTを複数設定できます。

MP-BGPによるVRFルートリークの仕組み

VRFルートリークのポイントをあらためて振り返ります。

「通信させたいネットワークのルート情報を異なるVRF間で共有すること」

そのための仕組みは次の通りです。

  1. 共有させたいルートに追加のRTを付加する
  2. ルートを共有させたいVRFにImport RTに追加のRTも設定する

これだけです。簡単ですね?では、具体的に考えましょう。

図 VRFルートリークの例
図 VRFルートリークの例

VRF「AAA」とVRF「BBB」のルーティングテーブルで「192.168.1.0/24」と「172.16.1.0/24」を共有したいので、この2つのルートに追加でRTを付加します。値は何でもいいのですが、「100:100」とします。そして、VRF「AAA」とVRF「BBB」のImport RTの設定に「100:100」も追加します。

VRF名RDImport RTExport RT
AAA1:1001:100
100:100
1:100
100:100(192.168.1.0/24のみ追加)
BBB2:1002:100
100:100
2:100
100:100(172.16.1.0/24のみ追加)
表 VRFルートリーク VRFの設定例

こうした設定をすると、R1でMP-BGPテーブルに登録されるVPNv4ルートは以下の図のようになります。

図 VRFルートリーク VPNv4ルートの生成
図 VRFルートリーク VPNv4ルートの生成

VRF「AAA」の「192.168.1.0/24」とVRF「BBB」の「172.16.1.0/24」に追加で共通のRT「100:100」を付加しています。RT「100:100」はVRF「AAA」とVRF「BBB」のImport RTになっています。そのため、192.168.1.0/24のルートがVRF「BBB」のBGPテーブルに登録されます。また、172.16.1.0/24のルートがVRF「AAA」のBGPテーブルに登録されます。そして、それらのルートはBGPルートとしてルーティングテーブルに登録されます。

つまり、VRF「AAA」とVRF「BBB」で「192.168.1.0/24」と「172.16.1.0/24」のルートが共有されていることになります。

 図 VRFルートリーク Import RT
図 VRFルートリーク Import RT

MP-BGPによるVRFルートリークの設定と確認

MP-BGPによるVRFルートリークの設定として、MP-BGPに関する設定コマンドとVRFに関する設定コマンドを解説します。

MP-BGPに関する設定

MP-BGPのVPNv4ルートを生成します。MP-BGPのVRFで適切なルーティングプロセスから再配送します。または、networkコマンドを利用します。

MP-BGPの設定

(config)#router bgp <AS>
(config-router)#bgp router-id <router-id>
(config-router)#address-family ipv4 vrf <vrf-name>
(config-router-af)#redstirbitute <routing-process>
(config-router-af)#network <network> mask <subnetmask>

<AS> : AS番号
<router-id> : BGPルータID
<vrf-name> : VRF名
<routing-process> : 再配送元のルーティングプロセス
<network> : ネットワークアドレス
<subnetmask> : サブネットマスク

なお、MPLS-VPNを構築するときにはMPLSやMP-BGPネイバーの設定も必要です。単体のルータでVRFルートリークを行うだけなら、MPLSやMP-BGPネイバーは設定しなくても大丈夫です。

VRFに関する設定

VRFでRDおよび適切なImport RT/Export RTを設定します。グローバルコンフィグレーションモードで次のコマンドを入力します。

VRFの設定

(config)#ip vrf <vrf-name>
(config-vrf)#rd <RD>
(config-vrf)#route-target import <RT>
(config-vrf)#route-target export <RT>
(config-vrf)#export map <route-map-name>

<vrf-name> : VRF名
<RD> : RD
<RT> : RT
<route-map-name> : ルートマップ名

インタフェースにVRFを割り当てるための設定は省略しています。route-target import/exportは複数設定可能です。また、特定のルートに対して追加のRTを付加するために、export mapコマンドでルートマップを関連付けます。ルートマップによって、追加のRTを付加するルートの条件と、付加するRTを指定します。ルートマップで追加のRTを設定するためのコマンドは次の通りです。

ルートマップ RTの付加

(config)#route-map <map-name> {permit|deny} [<seq>]
(config-route-map)#match <condition>
(config-route-map)#set extcommunity rt <RT> [additive]

<map-name> : ルートマップ名
<seq> : シーケンス番号
<condition> : 追加のRTを付加するルートの条件
<RT> : RT

additiveを付けないとRTは上書きされます。RTを「追加」するならadditiveを付けてください。

確認コマンド

以下は、MP-BGPのVPNv4ルートおよびVRFの設定を確認するための主な確認コマンドです。

コマンド内容
#show bgp vpnv4 unicast allすべてのVRFのVPNv4ルートを表示します。
#show bgp vpnv4 unicast vrf <vrf-name>指定したVRFのVPNv4ルートを表示します。
#show ip route vrf <vrf-name>VRFのルーティングテーブルを表示します。
#show ip vrf [detail]VRFの情報を表示します。detailをつけると詳細情報です。
#show route-mapルートマップの条件とアクションを表示します。
表 VRFルートリーク(MP-BGP) 主な確認コマンド

show bgp vpnv4 unicast all

show bgp vpnv4 unicast allコマンドですべてのVRFのVPNv4ルートを表示します。

show bgp vpnv4 unicast all

R1#show bgp vpnv4 unicast all
BGP table version is 27, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:100 (default for vrf AAA)
*> 172.16.0.0/24    0.0.0.0                  0         32768 ?
*> 172.16.1.0/24    172.16.0.3          409600         32768 ?
*> 192.168.0.0      0.0.0.0                  0         32768 ?
*> 192.168.1.0      192.168.0.2             11         32768 ?
*> 192.168.2.0      192.168.0.2             11         32768 ?
Route Distinguisher: 2:100 (default for vrf BBB)
*> 172.16.0.0/24    0.0.0.0                  0         32768 ?
*> 172.16.1.0/24    172.16.0.3          409600         32768 ?
*> 172.16.2.0/24    172.16.0.3          409600         32768 ?
*> 192.168.0.0      0.0.0.0                  0         32768 ?
*> 192.168.1.0      192.168.0.2             11         32768 ?

プレフィクスを指定すると、付加されているRTもわかります。

show bgp vpnv4 unicast all <prefix>

R1#show bgp vpnv4 unicast all 192.168.1.0
BGP routing table entry for 1:100:192.168.1.0/24, version 19
Paths: (1 available, best #1, table AAA)
  Not advertised to any peer
  Local
    192.168.0.2 from 0.0.0.0 (1.1.1.1)
      Origin incomplete, metric 11, localpref 100, weight 32768, valid, sourced, best
      Extended Community: RT:1:100 RT:100:100
        OSPF DOMAIN ID:0x0005:0x000000010200 OSPF RT:0.0.0.0:2:0
        OSPF ROUTER ID:1.1.1.1:0
      mpls labels in/out 23/nolabel
BGP routing table entry for 2:100:192.168.1.0/24, version 22
Paths: (1 available, best #1, table BBB)
  Not advertised to any peer
  Local, imported path from 1:100:192.168.1.0/24
    192.168.0.2 from 0.0.0.0 (1.1.1.1)
      Origin incomplete, metric 11, localpref 100, weight 32768, valid, external, best
      Extended Community: RT:1:100 RT:100:100
        OSPF DOMAIN ID:0x0005:0x000000010200 OSPF RT:0.0.0.0:2:0
        OSPF ROUTER ID:1.1.1.1:0

show bgp vpnv4 unicast vrf <vrf-name>

show bgp vpnv4 unicast vrfコマンドでVRFごとのVPNv4ルートを表示します。

show bgp vpnv4 unicast vrf

R1#show bgp vpnv4 unicast vrf AAA
BGP table version is 27, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:100 (default for vrf AAA)
*> 172.16.0.0/24    0.0.0.0                  0         32768 ?
*> 172.16.1.0/24    172.16.0.3          409600         32768 ?
*> 192.168.0.0      0.0.0.0                  0         32768 ?
*> 192.168.1.0      192.168.0.2             11         32768 ?
*> 192.168.2.0      192.168.0.2             11         32768 ?

show ip route vrf <vrf-name>

show ip route vrfコマンドでVRFのルーティングテーブルを表示します。

show ip route vrf

R1#show ip route vrf AAA

Routing Table: AAA
Codes: 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

Gateway of last resort is not set

     172.16.0.0/24 is subnetted, 2 subnets
B       172.16.0.0 is directly connected, 01:37:26, FastEthernet0/1
B       172.16.1.0 [20/409600] via 172.16.0.3 (BBB), 01:37:26, FastEthernet0/1
C    192.168.0.0/24 is directly connected, FastEthernet0/0
O    192.168.1.0/24 [110/11] via 192.168.0.2, 01:47:55, FastEthernet0/0
O    192.168.2.0/24 [110/11] via 192.168.0.2, 01:47:55, FastEthernet0/0

show ip vrf [detail]

show ip vrfでVRFの情報を表示します。detailをつけて詳細を表示するとImport RT/Export RTもわかります。import map/export mapで関連付けているルートマップ名も確認できます。

show ip vrf [detail]

R1#show ip vrf
  Name                             Default RD          Interfaces
  AAA                              1:100               Fa0/0
  BBB                              2:100               Fa0/1
R1#show ip vrf detail
VRF AAA; default RD 1:100; default VPNID 
  Interfaces:
    Fa0/0
  Connected addresses are not in global routing table
  Export VPN route-target communities
    RT:1:100
  Import VPN route-target communities
    RT:100:100               RT:1:100
  No import route-map
  Export route-map: ROUTE-LEAK-EX
  VRF label distribution protocol: not configured
  VRF label allocation mode: per-prefix
VRF BBB; default RD 2:100; default VPNID 
  Interfaces:
    Fa0/1
  Connected addresses are not in global routing table
  Export VPN route-target communities
    RT:2:100
  Import VPN route-target communities
    RT:100:100               RT:2:100
  No import route-map
  Export route-map: ROUTE-LEAK-EX
  VRF label distribution protocol: not configured
  VRF label allocation mode: per-prefix

show route-map

show route-mapコマンドでimport map/export mapで関連付けているルートマップの内容を表示します。

show route-map

R1#show route-map
route-map ROUTE-LEAK-EX, permit, sequence 10
  Match clauses:
    ip address (access-lists): 1
  Set clauses:
    extended community RT:100:100 additive
  Policy routing matches: 0 packets, 0 bytes
route-map ROUTE-LEAK-EX, permit, sequence 100
  Match clauses:
  Set clauses:
  Policy routing matches: 0 packets, 0 bytes

必要ならmatch条件で関連付けているACLやプレフィクスリストも確認してください。

まとめ

  • MP-BGPを利用するとVRFルートリークの制御をより柔軟に行うことができます。
  • VRFルートリークのポイントは、「通信させたいネットワークのルート情報を異なるVRF間で共有すること」です。
  • MP-BGPによるVRFルートリークの仕組みは以下の通りです。
    • 共有させたいルートに追加のRTを付加する
    • ルートを共有させたいVRFにImport RTに追加のRTも設定する
  • VRFのexport mapの設定によって、特定のルートのみに追加のRTを付加できます。

IPルーティング応用