SDN開発エンジニアを目指した活動ブログ

〜SDNなオープンソース製品を実際に使って試してみる〜

Ryu SDN FrameworkのBGP機能を試してみた(2) 〜InterAS接続編 その1〜

前回は、BGP/MPLS VPN網のエッジルータ適用でのコントロールプレーンの挙動を確認しました。しかし、実際にエッジルータ適用を想定した場合には、OSPFルーティングドメインへの参加や、トンネルMPLSラベル制御を含めたデータプレーン連携の実装が必要不可欠となります。現段階では、Ryu BGP実装状況での対応は困難そうです。よって、別の方式を検討してみます。

f:id:ttsubo:20140823171252j:plain

今回は、Ryu SDN FrameworkのBGPルーティング機能(以下、Ryu BGP)として、「InterAS MPLS VPN」による相互接続形態を検証してみます。

◆InterAS MPLS VPNとは ...

もともと、BGP/MPLS VPN網でのバックボーン内でのテナント分離手法として、「mp-BGP」が使われております。
BGP/MPLS VPN網との相互接続の場合にも、「mp-BGP」を使って、VPNv4アドレスファミリーを前提としたテナント分離情報を共有することが可能となります。なお、InterAS MPLS VPN相互接続には、複数の形態が選択可能です。rfc 4364によると、option a)〜c)までの3種類が規定されているようです。
a) VRF-to-VRF connections at the AS (Autonomous System) border routers.
b) EBGP redistribution of labeled VPN-IPv4 routes from AS to neighboring AS.
c) Multi-hop EBGP redistribution of labeled VPN-IPv4 routes between source and destination ASes, with EBGP redistribution of labeled IPv4 routes from AS to neighboring AS.

最近では、option d)なるものも提案されているみたいです。
技術詳細は、過去のCisco講演スライドなどを参考にしてください。

http://www.cisco.com/web/SK/expo2009/docs/C3_InterAS_MPLSSolutions_StefanKollar.pdf

◆Ryu BGP検証環境

InterAS MPLS VPN網では、ASBRなるエッジルータの役割が非常に重要となります。
Ryu BGPでのASBR/PE機能を有するエッジルータ適用を想定したOptionBモデルを構築します。実際のBGP/MPLS VPN網は、GNS3によるCiscoエミュレータソフトを活用しました。
f:id:ttsubo:20140823171312j:plain

(1) Ryu BGPでの実装コード

Ryu公式ドキュメントでの、API仕様やサンプルコードを参考に、検証用のサンプルコードを準備しました。

RyuBGP1側の実装コード(sampleBGP_for_InterAS-MPLS-VPN-in-RyuBGP1.py )
import eventlet
import time

eventlet.monkey_patch()

import logging
import sys
logging.basicConfig(level=logging.INFO)

from ryu.services.protocols.bgp.bgpspeaker import BGPSpeaker

def dump_remote_best_path_change(event):
    print 'the best path changed:', event.remote_as, event.prefix,\
        event.nexthop, event.is_withdraw

if __name__ == "__main__":
    speaker = BGPSpeaker(as_number=65001, router_id='10.0.0.7',
                         best_path_change_handler=dump_remote_best_path_change, ssh_console=True,
                         label_range=(1000,1999))

    speaker.neighbor_add('192.168.100.101', 65010, enable_ipv4=True, enable_vpnv4=True)
    speaker.neighbor_add('172.16.0.102', 65002, enable_ipv4=True, enable_vpnv4=True)
    speaker.vrf_add('65010:101', ['65010:101'], ['65010:101'])
    eventlet.sleep(5)
    speaker.prefix_add('192.168.103.0/30', next_hop='0.0.0.0', route_dist='65010:101')

    while True:
        eventlet.sleep(5)
RyuBGP2側の実装コード(sampleBGP_for_InterAS-MPLS-VPN-in-RyuBGP2.py )
import eventlet
import time

eventlet.monkey_patch()

import logging
import sys
logging.basicConfig(level=logging.DEBUG)

from ryu.services.protocols.bgp.bgpspeaker import BGPSpeaker

def dump_remote_best_path_change(event):
    print 'the best path changed:', event.remote_as, event.prefix,\
        event.nexthop, event.is_withdraw

if __name__ == "__main__":
    speaker = BGPSpeaker(as_number=65002, router_id='10.0.0.8',
                         best_path_change_handler=dump_remote_best_path_change, ssh_console=True,
                         label_range=(2000,2999))

    speaker.neighbor_add('192.168.101.101', 65010, enable_ipv4=True, enable_vpnv4=True)
    speaker.neighbor_add('172.16.0.101', 65001, enable_ipv4=True, enable_vpnv4=True)
    speaker.vrf_add('65010:101', ['65010:101'], ['65010:101'])
    eventlet.sleep(5)
    speaker.prefix_add('192.168.104.0/30', next_hop='0.0.0.0', route_dist='65010:101')

    while True:
        eventlet.sleep(5)

◆InterAS MPLS VPN検証結果

今回の検証観点は、
1. Ryu BGPでの最適パス選定が正しく動作できること
2. ASBR〜RyuBGP間でのリンク切断時には、BGPピア断を検出して、ルーティング迂回経路が構築できること
3. ASBR〜RyuBGP間でのリンク復旧時には、BGPピア開設を検出して、ルーティング経路が再構築できること

1. Ryu BGPでの最適パス選定の動作

既存のBGP/MPLS VPN網とのOptionBによる相互接続により、Ryu BGP上でのBGPテーブルが正しく構築されることを確認します。
f:id:ttsubo:20140823175303j:plain

(1) RyuBGP1上のBGP経路結果

RyuBGP1でのBGP経路情報を確認してみました。rib上ではASパス長での最適パス選定が実施された様子が確認できました。さらに、ribでの最適パス選定結果が、vrf上のルーティングテーブルに注入されている様子が確認できます。
Ryu BGPでの最適パス計算における選定理由が、showコマンド結果で把握できる特徴があります。
これから、BGP技術知識を深めたい場合の学習教材としての活用には、最適な選択肢だと思います。
なお、Ryu BGP1〜CE3間のコネク区間のスタティック経路を設定sる際には、MPLSラベルとして1000番台をアサインするようにしております。

bgpd> show rib vpnv4
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
 *>  65010:101:192.168.103.0/30       [1000]   172.16.0.101         AS Path                       65001 ?
 *                                    [30]     192.168.101.101                                    65010 65001 ?
 *   65010:101:192.168.202.0/24       [31]     172.16.0.101                                       65001 65010 65012 i
 *>                                   [32]     192.168.101.101      AS Path                       65010 65012 i
 *   65010:101:192.168.201.0/24       [32]     172.16.0.101                                       65001 65010 65011 i
 *>                                   [33]     192.168.101.101      AS Path                       65010 65011 i
 *   65010:101:192.168.2.0/30         [29]     172.16.0.101                                       65001 65010 ?
 *>                                   [29]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.1/32          [33]     172.16.0.101                                       65001 65010 65011 ?
 *>                                   [34]     192.168.101.101      AS Path                       65010 65011 ?
 *>  65010:101:192.168.104.0/30       [2000]   0.0.0.0              Only Path                     ?
 *   65010:101:192.168.1.0/30         [28]     172.16.0.101                                       65001 65010 ?
 *>                                   [28]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.2/32          [30]     172.16.0.101                                       65001 65010 65012 ?
 *>                                   [31]     192.168.101.101      AS Path                       65010 65012 ?

bgpd> show vrf all
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
VPN: ('65010:101', 'ipv4')
 *>  192.168.202.0/24                 None     192.168.101.101      Only Path                     65010 65012 i
 *>  10.10.10.1/32                    None     192.168.101.101      Only Path                     65010 65011 ?
 *>  192.168.104.0/30                 None     0.0.0.0              Only Path                     ?
 *>  10.10.10.2/32                    None     192.168.101.101      Only Path                     65010 65012 ?
 *>  192.168.201.0/24                 None     192.168.101.101      Only Path                     65010 65011 i
 *>  192.168.1.0/30                   None     192.168.101.101      Only Path                     65010 ?
 *>  192.168.103.0/30                 None     172.16.0.101         Only Path                     65001 ?
 *>  192.168.2.0/30                   None     192.168.101.101      Only Path                     65010 ?
bgpd>
(2) RyuBGP2上のBGP経路結果

RyuBGP2でのBGP経路情報を確認してみました。rib上ではASパス長での最適パス選定が実施された様子が確認できました。さらに、ribでの最適パス選定結果が、vrf上のルーティングテーブルに注入されている様子が確認できます。なお、Ryu BGP2〜CE4間のコネク区間のスタティック経路を設定sる際には、MPLSラベルとして、2000番台をアサインするようにしております。

bgpd> show rib vpnv4
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
 *>  65010:101:192.168.103.0/30       [1000]   172.16.0.101         AS Path                       65001 ?
 *                                    [30]     192.168.101.101                                    65010 65001 ?
 *   65010:101:192.168.202.0/24       [31]     172.16.0.101                                       65001 65010 65012 i
 *>                                   [32]     192.168.101.101      AS Path                       65010 65012 i
 *   65010:101:192.168.201.0/24       [32]     172.16.0.101                                       65001 65010 65011 i
 *>                                   [33]     192.168.101.101      AS Path                       65010 65011 i
 *   65010:101:192.168.2.0/30         [29]     172.16.0.101                                       65001 65010 ?
 *>                                   [29]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.1/32          [33]     172.16.0.101                                       65001 65010 65011 ?
 *>                                   [34]     192.168.101.101      AS Path                       65010 65011 ?
 *>  65010:101:192.168.104.0/30       [2000]   0.0.0.0              Only Path                     ?
 *   65010:101:192.168.1.0/30         [28]     172.16.0.101                                       65001 65010 ?
 *>                                   [28]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.2/32          [30]     172.16.0.101                                       65001 65010 65012 ?
 *>                                   [31]     192.168.101.101      AS Path                       65010 65012 ?

bgpd> show vrf all
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
VPN: ('65010:101', 'ipv4')
 *>  192.168.202.0/24                 None     192.168.101.101      Only Path                     65010 65012 i
 *>  10.10.10.1/32                    None     192.168.101.101      Only Path                     65010 65011 ?
 *>  192.168.104.0/30                 None     0.0.0.0              Only Path                     ?
 *>  10.10.10.2/32                    None     192.168.101.101      Only Path                     65010 65012 ?
 *>  192.168.201.0/24                 None     192.168.101.101      Only Path                     65010 65011 i
 *>  192.168.1.0/30                   None     192.168.101.101      Only Path                     65010 ?
 *>  192.168.103.0/30                 None     172.16.0.101         Only Path                     65001 ?
 *>  192.168.2.0/30                   None     192.168.101.101      Only Path                     65010 ?
bgpd>
(3) BGP/MPLS VPN網でのBGP経路結果

BGP/MPLS VPN網でのBGP経路情報を確認してみました。

ASBR3でのルーティング確認

ASBR3>show bgp vpnv4 unicast all
BGP table version is 24, local router ID is 10.0.0.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>  192.168.103.0/30 192.168.100.102                        0 65001 ?
 *>i 192.168.104.0/30 10.0.0.6                 0    100      0 65002 ?
 *                    192.168.100.102                        0 65001 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i


ASBR3>show bgp vpnv4 unicast all labels 
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        33/28
   10.10.10.2/32    10.0.0.4        30/28
   192.168.1.0/30   10.0.0.1        28/29
   192.168.2.0/30   10.0.0.4        29/29
   192.168.103.0/30 192.168.100.102 35/1000
   192.168.104.0/30 10.0.0.6        36/37
                    192.168.100.102 36/2000
   192.168.201.0    10.0.0.1        32/30
   192.168.202.0    10.0.0.4        31/30

ASBR4でのルーティング確認

ASBR4>show bgp vpnv4 unicast all
BGP table version is 20, local router ID is 10.0.0.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *   192.168.103.0/30 192.168.101.102                        0 65002 65001 ?
 *>i                  10.0.0.3                 0    100      0 65001 ?
 *>  192.168.104.0/30 192.168.101.102                        0 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

ASBR4>show bgp vpnv4 unicast all labels 
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        34/28
   10.10.10.2/32    10.0.0.4        31/28
   192.168.1.0/30   10.0.0.1        28/29
   192.168.2.0/30   10.0.0.4        29/29
   192.168.103.0/30 192.168.101.102 30/1000
                    10.0.0.3        30/35
   192.168.104.0/30 192.168.101.102 37/2000
   192.168.201.0    10.0.0.1        33/30
   192.168.202.0    10.0.0.4        32/30

RR1でのルーティング確認

RR1#show bgp vpnv4 unicast all
BGP table version is 22, local router ID is 10.0.0.7
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>i 192.168.103.0/30 10.0.0.3                 0    100      0 65001 ?
 *>i 192.168.104.0/30 10.0.0.6                 0    100      0 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

RR1#show bgp vpnv4 unicast all labels 
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        nolabel/28
   10.10.10.2/32    10.0.0.4        nolabel/28
   192.168.1.0/30   10.0.0.1        nolabel/29
   192.168.2.0/30   10.0.0.4        nolabel/29
   192.168.103.0/30 10.0.0.3        nolabel/35
   192.168.104.0/30 10.0.0.6        nolabel/37
   192.168.201.0    10.0.0.1        nolabel/30
   192.168.202.0    10.0.0.4        nolabel/30

2."ASBR3〜RyuBGP1間"のリンク切断時の動作結果

既存のBGP/MPLS VPN網とのOptionBによる相互接続において、対向ASBRからのmp-eBGPピアが切断した場合に、Ryu BGP上でのBGPテーブルが正しく構築されることを確認します。
f:id:ttsubo:20140823181549j:plain

(1) RyuBGP1上のBGP経路結果

"ASBR3〜RyuBGP1間"でのリンク断の障害を発生させた上で、RyuBGP1でのBGP経路情報を確認してみました。ASBR3からのBGP経路広告が途絶したことにより、rib上では最適パス選定が再実施された様子が確認できました。

bgpd> 
bgpd> show rib vpnv4
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
 *>  65010:101:192.168.103.0/30       [1000]   0.0.0.0              Only Path                     ?
 *>  65010:101:192.168.104.0/30       [2000]   172.16.0.102         Only Path                     65002 ?
 *>  65010:101:192.168.1.0/30         [28]     172.16.0.102         Only Path                     65002 65010 ?
 *>  65010:101:192.168.2.0/30         [29]     172.16.0.102         Only Path                     65002 65010 ?
 *>  65010:101:10.10.10.2/32          [31]     172.16.0.102         Only Path                     65002 65010 65012 ?
 *>  65010:101:192.168.202.0/24       [32]     172.16.0.102         Only Path                     65002 65010 65012 i
 *>  65010:101:192.168.201.0/24       [33]     172.16.0.102         Only Path                     65002 65010 65011 i
 *>  65010:101:10.10.10.1/32          [34]     172.16.0.102         Only Path                     65002 65010 65011 ?
(2) RyuBGP2上のBGP経路結果

"ASBR3〜RyuBGP1間"でのリンク断の障害を発生させた上で、RyuBGP2でのBGP経路情報を確認してみました。ASBR3からのBGP経路広告が途絶したことにより、rib上では最適パス選定が再実施された様子が確認できました。

bgpd> show rib vpnv4
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
 *>  65010:101:192.168.103.0/30       [1000]   172.16.0.101         Only Path                     65001 ?
 *   65010:101:192.168.202.0/24       [31]     172.16.0.101                                       65001 65010 65012 i
 *>                                   [32]     192.168.101.101      AS Path                       65010 65012 i
 *   65010:101:192.168.201.0/24       [32]     172.16.0.101                                       65001 65010 65011 i
 *>                                   [33]     192.168.101.101      AS Path                       65010 65011 i
 *   65010:101:192.168.2.0/30         [29]     172.16.0.101                                       65001 65010 ?
 *>                                   [29]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.1/32          [33]     172.16.0.101                                       65001 65010 65011 ?
 *>                                   [34]     192.168.101.101      AS Path                       65010 65011 ?
 *>  65010:101:192.168.104.0/30       [2000]   0.0.0.0              Only Path                     ?
 *   65010:101:192.168.1.0/30         [28]     172.16.0.101                                       65001 65010 ?
 *>                                   [28]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.2/32          [30]     172.16.0.101                                       65001 65010 65012 ?
 *>                                   [31]     192.168.101.101      AS Path                       65010 65012 ?
 
(3) BGP/MPLS VPN網でのルーティング動作確認

BGP/MPLS VPN網でのBGP経路情報を確認してみました。

ASBR3でのルーティング確認

ASBR3>show bgp vpnv4 unicast all
BGP table version is 30, local router ID is 10.0.0.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>i 192.168.103.0/30 10.0.0.6                 0    100      0 65002 65001 ?
 *>i 192.168.104.0/30 10.0.0.6                 0    100      0 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

ASBR3>show bgp vpnv4 unicast all labels
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        33/28
   10.10.10.2/32    10.0.0.4        30/28
   192.168.1.0/30   10.0.0.1        28/29
   192.168.2.0/30   10.0.0.4        29/29
   192.168.103.0/30 10.0.0.6        35/30
   192.168.104.0/30 10.0.0.6        36/37
   192.168.201.0    10.0.0.1        32/30
   192.168.202.0    10.0.0.4        31/30

ASBR4でのルーティング確認

ASBR4>show bgp vpnv4 unicast all        
BGP table version is 25, local router ID is 10.0.0.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>  192.168.103.0/30 192.168.101.102                        0 65002 65001 ?
 *>  192.168.104.0/30 192.168.101.102                        0 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

ASBR4>show bgp vpnv4 unicast all labels 
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        34/28
   10.10.10.2/32    10.0.0.4        31/28
   192.168.1.0/30   10.0.0.1        28/29
   192.168.2.0/30   10.0.0.4        29/29
   192.168.103.0/30 192.168.101.102 30/1000
   192.168.104.0/30 192.168.101.102 37/2000
   192.168.201.0    10.0.0.1        33/30
   192.168.202.0    10.0.0.4        32/30

RR1でのルーティング確認

RR1#show bgp vpnv4 unicast all
BGP table version is 28, local router ID is 10.0.0.7
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>i 192.168.103.0/30 10.0.0.6                 0    100      0 65002 65001 ?
 *>i 192.168.104.0/30 10.0.0.6                 0    100      0 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

RR1#show bgp vpnv4 unicast all labels
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        nolabel/28
   10.10.10.2/32    10.0.0.4        nolabel/28
   192.168.1.0/30   10.0.0.1        nolabel/29
   192.168.2.0/30   10.0.0.4        nolabel/29
   192.168.103.0/30 10.0.0.6        nolabel/30
   192.168.104.0/30 10.0.0.6        nolabel/37
   192.168.201.0    10.0.0.1        nolabel/30
   192.168.202.0    10.0.0.4        nolabel/30

3."ASBR3〜RyuBGP1間"のリンク復旧時の動作結果

既存のBGP/MPLS VPN網とのOptionBによる相互接続において、対向ASBRからのmp-eBGPピア断から回復した場合に、Ryu BGP上でのBGPテーブルが正しく構築されることを確認します。
f:id:ttsubo:20140823181619j:plain

(1) RyuBGP1上のBGP経路結果

"ASBR3〜RyuBGP1間"でのリンク断を回復させた上で、RyuBGP1でのBGP経路情報を確認してみました。ASBR3からのBGP経路広告が再開したことにより、rib上では最適パス選定が再実施された様子が確認できました。

bgpd> show rib vpnv4
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
 *>  65010:101:192.168.103.0/30       [1000]   0.0.0.0              Only Path                     ?
 *>  65010:101:192.168.104.0/30       [2000]   172.16.0.102         AS Path                       65002 ?
 *                                    [36]     192.168.100.101                                    65010 65002 ?
 *>  65010:101:192.168.1.0/30         [28]     192.168.100.101      AS Path                       65010 ?
 *                                    [28]     172.16.0.102                                       65002 65010 ?
 *>  65010:101:192.168.2.0/30         [29]     192.168.100.101      AS Path                       65010 ?
 *                                    [29]     172.16.0.102                                       65002 65010 ?
 *>  65010:101:10.10.10.2/32          [30]     192.168.100.101      AS Path                       65010 65012 ?
 *                                    [31]     172.16.0.102                                       65002 65010 65012 ?
 *>  65010:101:192.168.202.0/24       [31]     192.168.100.101      AS Path                       65010 65012 i
 *                                    [32]     172.16.0.102                                       65002 65010 65012 i
 *>  65010:101:192.168.201.0/24       [32]     192.168.100.101      AS Path                       65010 65011 i
 *                                    [33]     172.16.0.102                                       65002 65010 65011 i
 *>  65010:101:10.10.10.1/32          [33]     192.168.100.101      AS Path                       65010 65011 ?
 *                                    [34]     172.16.0.102                                       65002 65010 65011 ?
(2) RyuBGP2上のBGP経路結果

"ASBR3〜RyuBGP1間"でのリンク断を回復させた上で、RyuBGP2でのBGP経路情報を確認してみました。ASBR3からのBGP経路広告が再開したことにより、rib上では最適パス選定が再実施された様子が確認できました。

bgpd> show rib vpnv4
Status codes: * valid, > best
Origin codes: i - IGP, e - EGP, ? - incomplete
     Network                          Labels   Next Hop             Reason          Metric LocPrf Path
 *>  65010:101:192.168.103.0/30       [1000]   172.16.0.101         AS Path                       65001 ?
 *                                    [30]     192.168.101.101                                    65010 65001 ?
 *   65010:101:192.168.202.0/24       [31]     172.16.0.101                                       65001 65010 65012 i
 *>                                   [32]     192.168.101.101      AS Path                       65010 65012 i
 *   65010:101:192.168.201.0/24       [32]     172.16.0.101                                       65001 65010 65011 i
 *>                                   [33]     192.168.101.101      AS Path                       65010 65011 i
 *   65010:101:192.168.2.0/30         [29]     172.16.0.101                                       65001 65010 ?
 *>                                   [29]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.1/32          [33]     172.16.0.101                                       65001 65010 65011 ?
 *>                                   [34]     192.168.101.101      AS Path                       65010 65011 ?
 *>  65010:101:192.168.104.0/30       [2000]   0.0.0.0              Only Path                     ?
 *   65010:101:192.168.1.0/30         [28]     172.16.0.101                                       65001 65010 ?
 *>                                   [28]     192.168.101.101      AS Path                       65010 ?
 *   65010:101:10.10.10.2/32          [30]     172.16.0.101                                       65001 65010 65012 ?
 *>                                   [31]     192.168.101.101      AS Path                       65010 65012 ?
(3) BGP/MPLS VPN網でのルーティング動作確認

BGP/MPLS VPN網でのBGP経路情報を確認してみました。

ASBR3でのルーティング確認

ASBR3>show bgp vpnv4 unicast all
BGP table version is 47, local router ID is 10.0.0.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>  192.168.103.0/30 192.168.100.102                        0 65001 ?
 *>i 192.168.104.0/30 10.0.0.6                 0    100      0 65002 ?
 *                    192.168.100.102                        0 65001 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

ASBR3>show bgp vpnv4 unicast all labels
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        33/28
   10.10.10.2/32    10.0.0.4        30/28
   192.168.1.0/30   10.0.0.1        28/29
   192.168.2.0/30   10.0.0.4        29/29
   192.168.103.0/30 192.168.100.102 35/1000
   192.168.104.0/30 192.168.100.102 36/2000
                    10.0.0.6        36/37
   192.168.201.0    10.0.0.1        32/30
   192.168.202.0    10.0.0.4        31/30

ASBR4でのルーティング確認

ASBR4>show bgp vpnv4 unicast all
BGP table version is 45, local router ID is 10.0.0.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>i 192.168.103.0/30 10.0.0.3                 0    100      0 65001 ?
 *                    192.168.101.102                        0 65002 65001 ?
 *>  192.168.104.0/30 192.168.101.102                        0 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

ASBR4>show bgp vpnv4 unicast all labels
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        34/28
   10.10.10.2/32    10.0.0.4        31/28
   192.168.1.0/30   10.0.0.1        28/29
   192.168.2.0/30   10.0.0.4        29/29
   192.168.103.0/30 10.0.0.3        30/35
                    192.168.101.102 30/1000
   192.168.104.0/30 192.168.101.102 37/2000
   192.168.201.0    10.0.0.1        33/30
   192.168.202.0    10.0.0.4        32/30

RR1でのルーティング確認

RR1#show bgp vpnv4 unicast all        
BGP table version is 52, local router ID is 10.0.0.7
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65010:101
 *>i 10.10.10.1/32    10.0.0.1                 0    100      0 65011 ?
 *>i 10.10.10.2/32    10.0.0.4                 0    100      0 65012 ?
 *>i 192.168.1.0/30   10.0.0.1                 0    100      0 ?
 *>i 192.168.2.0/30   10.0.0.4                 0    100      0 ?
 *>i 192.168.103.0/30 10.0.0.3                 0    100      0 65001 ?
 *>i 192.168.104.0/30 10.0.0.6                 0    100      0 65002 ?
 *>i 192.168.201.0    10.0.0.1                 0    100      0 65011 i
 *>i 192.168.202.0    10.0.0.4                 0    100      0 65012 i

RR1#show bgp vpnv4 unicast all labels 
   Network          Next Hop      In label/Out label
Route Distinguisher: 65010:101
   10.10.10.1/32    10.0.0.1        nolabel/28
   10.10.10.2/32    10.0.0.4        nolabel/28
   192.168.1.0/30   10.0.0.1        nolabel/29
   192.168.2.0/30   10.0.0.4        nolabel/29
   192.168.103.0/30 10.0.0.3        nolabel/35
   192.168.104.0/30 10.0.0.6        nolabel/37
   192.168.201.0    10.0.0.1        nolabel/30
   192.168.202.0    10.0.0.4        nolabel/30

◆おわりに

今回、InterAS MPLS VPN構成におけるBGP経路選定が正しく動作していることが確認できました。この検証モデルの特徴としては、前回と比べてBGP/MPLS VPN網内のOSPFルーティング制御およびトンネルMPLSラベル制御に全く関与せずとも、既存BGP/MPLS VPN上のVRFテーブルとルーティング共有が図れることです。なお、今回は、RyuBGPを2台構成としましたが、さらなるRyuBGP追加を行う場合は、BGPフルメッシュ構成を含めたトポロジ拡張を考慮すべきです。次回は、このトピックを扱いたいと思います。