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

今回は、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エミュレータソフトを活用しました。

(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テーブルが正しく構築されることを確認します。

(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テーブルが正しく構築されることを確認します。

(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テーブルが正しく構築されることを確認します。

(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/30ASBR4でのルーティング確認
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/30RR1でのルーティング確認
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