BMP活用による
SDN時代のオーバレイNW監視手法の提案
2015.7.24
@ttsubo
【BGP/MPLS-VPN編】
2
自己紹介
⚫ SDN/NFV技術に興味を持ったNWエンジニア
⚫ SDN時代にふさわしいNWエンジニアを目指して、
 Python/Golang等を勉強中
⚫ Ryu SDN Frameworkの、BGPSpeakerを
 使いはじめて、BGPプログラミングの面白さに
 目覚めつつあります。
@ttsubo
3
1. オーバレイNWとは
オーバーレイ・ネットワーク(overlay network)
とは、 あるコンピュータネットワークの上に構築さ
れた別のコンピュータネットワークのことである。
オーバーレイ・ネットワーク上のノードは、下位ネッ
トワークのトポロジーを意識せずに通信することが
できる。
∼Wikipediaより∼
オーバレイな階層ネットワーク概念
4
IPネットワーク
D-Plane
C-Plane
CE3CE1
C/D-Plane概念を適用してネットワーク抽象化
最近のトレンド
として、オーバレイ側の
D­Planeが自動構築できる
ように、C-Planeが配備
されつつある
5
⚫ GRE/MPLS/VxLAN等の通信プロト
 コル技術が一般化
⚫ L2VPN閉域ネットワーク制御として
 EVPN/VxLANがHotTopic!
⚫ L3VPN閉域ネットワーク制御として  
 BGP/MPLS-VPNは、実用化技術として
 成熟の域
2. オーバレイNW事例
今回、BGP/MPLS-VPNに着目
6LDP(OSPF)面
CE3CE1
BGP面
・BGPピア間の通信経路は、OSPFにより解決
・BGPのNEXTHOPへの到達性がシングルホップで対応できるよう
 LDPによるMPLSトンネルを自動生成
RR RR
CE3CE1
BGP/LDP面による階層化構造を構成
BGP/MPLS-VPNでのC-Planeの特徴
7MPLS面
CE3CE1
CE3CE1
・BGPパス選定経路に関わるNEXT_HOPへの到達性は、
 LDP等により自動生成されたMPLSトンネルにより解決
D-Plane
BGP/MPLS-VPNでのD-Planeの特徴
8
BGP経路情報の伝搬状況をリアルタ
イムに監視する手法が存在しないた
め、Edge/Core構成が大規模にな
るほど、通信経路を確認作業が煩雑
になる。
3. 技術課題
従来の監視手法(CLI, SNMP, Ping)に加えて、
もっと、BGP経路制御の監視手法を、高度化したい
9
BGP経路追加での開通作業フロー
・独立した各作業フローを実施する必要があった
・ユーザ/通信事業者との責任分界点があいまい
通信事業者ユーザ ユーザ
(2)BGP
経路確認
(3)ping
(疎通確認)
BGP mpBGP mpBGP BGP
Ping
(1)BGP
経路追加
10
不測な事態が発生した場合..
・包括的な原因特定の監視手法が存在しない
・BGP/MPLS等のプロトコル知識を修得した高スキル者
 の対応が必要
通信事業者ユーザ ユーザ
(1)BGP
経路追加
(2)BGP
経路確認
(3)ping
(疎通確認)
BGP mpBGP
Ping
疎通NG
mpBGP
Ping
11
4. BGP監視技術の候補
IETF会合では、BGP監視手法として、
以下の技術提案されている
(1) BGP-LS
(2) BMP
今回、BMPに注目
North-Bound Distribution of Link-State and
TE Information using BGP
(draft-ietf-idr-ls-distribution-11)
BGP Monitoring Protocol(draft-ietf-grow-bmp-11)
12
BMPによるBGP経路監視
BMP 
Server
BGP mpBGP mpBGP BGP
BGP
経路追加
BMP
Client
BMP
Client
mpBGP
BG
P
BMP Client機能を有する各BGPルータでは、受信したBGP
UPDATEメッセージにより、adj-RIB-inの経路情報の更新を
契機として、同UPDATEメッセージをBMP Serverに通知す
ることが可能となる。
BMP
Client
mpBGP
13
5. BMP Serverの評価
BGP/MPLS-VPN網への適用を想定
して、オープンソース版BMP Server
機能を試してみた。
(1) OpenBMP
(2) RyuBMP
OpenBMP is an open source project that implements draft-ietf-grow-
bmp-08. BMP protocol version 3 is defined in draft 08, while versions 1
and 2 are defined in the previous revisions of the draft.
JunOS 10.4 implements the older versions of BMP. Cisco IOS XE 3.12,
IOS XR, and JunOS 13.3 implement version 3 (draft 07).
Ryu BMP Server is a simple BMP server. Now it supports BMPv3. It is
implemented using Ryu SDN Framework. Tested with Cisco ASR1000
(IOS-XE 3.13S) and Juniper MX960 (JUNOS 13.3R1.8).
14
C-Plane
CE3CE1 BGP m
pB
G
P
mpBGP BGP
m
p
B
G
P
m
p
B
G
P
BMP Server
ASBR1
(CSR1000v)
ASBR2
(CSR1000v)
PE3
(CSR1000v)
mpBGP
mpBGP
mpBGP
BMP Server評価環境
BGP/MPLS-VPN面でのEdgeルータ3箇所にて、CSR1000vの
BMP Client機能を有効にした上で、C-Planeで伝搬されるBGP/
mpBGPメッセージをBMP Serverに通知できるよう評価環境を
構築した
15BGP/MPLS-VPN面
192.168.203.0/24192.168.201.0/24
192.168.202.0/24
PE3#show bgp vpnv4 unicast all
BGP table version is 19, local router ID is 10.0.1.2
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: 65000:1 (default for vrf customerA)
*>i 192.168.101.0/30 10.0.1.1 0 100 0 65001 ?
*>i 192.168.102.0/30 10.0.1.1 0 100 0 65001 ?
*> 192.168.103.0/30 0.0.0.0 0 32768 ?
*>i 192.168.201.0 10.0.1.1 0 100 0 65001 65002 i
*>i 192.168.202.0 10.0.1.1 0 100 0 65001 65003 i
*> 192.168.203.0 192.168.103.2 0 0 65004 i
ちなみに、PE3でのBGP経路情報を確認してみると..
PE3ASBR1
ASBR2
16
OpenBMP評価結果 http://www.openbmp.org/
Web-UIは、まだリリースされていない模様。
BMPメッセージは、MySQL上で 参照可能。
mysql> select RouterIP,PeerName,PeerIP,PeerASN from v_peers;
+---------------+---------------+---------------+---------+
| RouterIP | PeerName | PeerIP | PeerASN |
+---------------+---------------+---------------+---------+
| 192.168.100.1 | 192.168.0.2 | 192.168.0.2 | 65000 |
| 192.168.100.1 | 10.0.0.7 | 10.0.0.7 | 65001 |
| 192.168.100.2 | 10.0.0.7 | 10.0.0.7 | 65001 |
| 192.168.100.2 | 192.168.1.2 | 192.168.1.2 | 65000 |
| 192.168.100.3 | 10.0.1.5 | 10.0.1.5 | 65000 |
| 192.168.100.3 | 192.168.103.2 | 192.168.103.2 | 65004 |
+---------------+---------------+---------------+---------+
6 rows in set (0.00 sec)
mysql> select RouterName,PeerName,Prefix,PrefixLen,Origin,Origin_AS,MED,LocalPref,NH,AS_Path from v_routes;
+---------------+---------------+---------------+-----------+--------+-----------+------+-----------+---------------+---------+
| RouterName | PeerName | Prefix | PrefixLen | Origin | Origin_AS | MED | LocalPref | NH | AS_Path |
+---------------+---------------+---------------+-----------+--------+-----------+------+-----------+---------------+---------+
| 192.168.100.3 | 192.168.103.2 | 192.168.203.0 | 24 | igp | 0 | 0 | 0 | 192.168.103.2 | 65004 |
+---------------+---------------+---------------+-----------+--------+-----------+------+-----------+---------------+---------+
1 row in set (0.00 sec)
実際に、動かしてみて…
C-Planeで伝搬されるBMPメッセージを受信できるようだが、
mpBGPにより伝搬されたUPDATEメッセージは参照不可。
すわなち、vpnv4アドレス情報を保持できていない…
BGP UPDATEメッセージ
のみ参照可能
17
RyuBMP評価結果 http://osrg.github.io/bmp/
Ryu SDN Framework上で動作可能なため、独自機能の拡
張が図りやすい。なお、WebUI/DBは存在しない。
2015 Jul 19 11:57:30 | 192.168.100.3 | 65000,10.0.1.5 |
BMPRouteMonitoring={'path_attributes': {'ORIGIN': '?', 'MP_REACH_NLRI': {'nexthop':
'10.0.1.1', 'nlri': [{'prefix': '192.168.101.0/30', 'label_list': [25], 'route_dist':
'65000:1'}, {'prefix': '192.168.102.0/30', 'label_list': [26], 'route_dist': '65000:1'}]},
'AS_PATH': [[65001]], 'MULTI_EXIT_DISC': 0, 'LOCAL_PREF': 100, 'EXTENDED_COMMUNITIES':
['65000:1']}, 'received_time': '1970/01/01 09:00:00', 'message_type': 'BGP_Update'}
2015 Jul 19 11:57:30 | 192.168.100.3 | 65000,10.0.1.5 |
BMPRouteMonitoring={'path_attributes': {'ORIGIN': 'i', 'MP_REACH_NLRI': {'nexthop':
'10.0.1.1', 'nlri': [{'prefix': '192.168.201.0/24', 'label_list': [27], 'route_dist':
'65000:1'}]}, 'AS_PATH': [[65001, 65002]], 'MULTI_EXIT_DISC': 0, 'LOCAL_PREF': 100,
'EXTENDED_COMMUNITIES': ['65000:1']}, 'received_time': '1970/01/01 09:00:00', 'message_type':
'BGP_Update'}
2015 Jul 19 11:57:59 | 192.168.100.3 | 65004,10.10.10.3 | BMPRouteMonitoring={'message_type':
'BGP_Update', 'received_time': '1970/01/01 09:00:00', 'path_attributes': {'ORIGIN': 'i',
'MULTI_EXIT_DISC': 0, 'NEXT_HOP': '192.168.103.2', 'AS_PATH': [[65004]]}, 'NLRI': [{'prefix':
'192.168.203.0/24'}]}
実際に、動かしてみて…
C-Planeで伝搬されるBMPメッセージからBGP/mpBGP
により伝搬されたUPDATEメッセージを任意に抽出可能。
BGPメッセージParser活用により
出力イメージを自由に加工できる
18
6. UseCase End-End開通監視
RyuBMP活用により、BGP経路追加
に伴うEnd-End開通監視ツールの
プロトタイプを作ってみた。
(1) BGP経路確認の自動化
adj-RIB-in情報の更新に伴い、BMPメッセージ伝搬された
Edgeルータに対して、BGP経路情報を確認する。
(2) End-End経路診断の自動化
BGP経路追加によるBMPメッセージ受信を契機に、事前に
エントリしておいたEnd-End経路診断パターンを実行して
疎通性を確認する。
19
BGP mpBGP mpBGP BGP
Ping
(1)BGP
経路追加
End-End開通監視ツール
RyuBMP
BGP
経路確認
ping
(疎通確認)
End-End開通監視ツール構成
mpBGP
mpBGP
20
7. End-End開通監視ツールの簡易デモ
BGP経路追加に伴うEnd-End開通監視
ツールは、以下のslideshareをベースに、
動作イメージを確認することができる。
http://www.slideshare.net/ToshikiTsuboi/sdn-lab-robot-framework
21
$	
  git	
  clone	
  https://github.com/ttsubo/docker-­‐simpleRouter.git	
  
$	
  cd	
  docker-­‐simpleRouter	
  
$	
  git	
  checkout	
  TestAutomation	
  
$	
  git	
  branch	
  
*	
  TestAutomation	
  
	
  	
  master
1. docker-simpleRouterを入手する
$	
  ./simpleRouter.sh	
  install
2. dockerをインストールする
3. 再度ログイン後に、dockerバージョンを確認する
$	
  docker	
  version
$	
  docker	
  pull	
  ttsubo/simple-­‐router:latest	
  
$	
  docker	
  pull	
  ttsubo/pc-­‐term:latest	
  
$	
  docker	
  pull	
  ttsubo/test-­‐server:latest	
  
$	
  docker	
  images
4. Dockerイメージを入手する
$	
  sudo	
  pip	
  install	
  robotframework	
  
$	
  sudo	
  pip	
  install	
  robotframework-­‐requests	
  
$	
  sudo	
  pip	
  install	
  robotframework-­‐sshlibrary	
  
$	
  sudo	
  pip	
  install	
  requests
5. Robot Frameworkパッケージ関係を入手する
$	
  ./simpleRouter.sh	
  start
6. simpleRouterプログラムを起動する
$	
  docker	
  ps
7. Dockerコンテナの起動状況を確認する
→ 約5分程度したら起動完了
(1) End-End開通監視ツールのデモ環境
22
(2) BGP経路追加(Static route登録)
BGP6のdockerコンテナ上からルーティング情報 172.16.0.0/24 を追加する。
には、 pybot Tests/test1_create_route.robot を起動するのみ。
$ cd Robot_Framework/
$ pybot Tests/test1_create_route.robot
==============================================================================
Test1 Create Route
==============================================================================
(1-1) Create prefix(172.16.0.0/24) in vrf(65010:101) in Router(BGP6) | PASS |
------------------------------------------------------------------------------
(1-2) Check previous prefix in RoutingTable in Peer Router(BGP4) | PASS |
------------------------------------------------------------------------------
(1-3) check reachability from pc1(192.168.1.102) to pc2(172.16.0.101) | PASS |
------------------------------------------------------------------------------
Test1 Create Route | PASS |
3 critical tests, 3 passed, 0 failed
3 tests total, 3 passed, 0 failed
PC2 PC1
AS65010 AS65011
BGP6 BGP4
BGP4
BGP1
BGP2
BGP3
192.168.2.101 192.168.1.102
172.16.0.0/24
BGP経路追加
RyuBMP
bmp
23
$ docker exec -it TestServer bash
root@TestServer:~# cd Test_automation/
root@TestServer:~/Test_automation# tail -f Test_result.txt
2015/07/23 04:57:58 [1] [OK] [adj_rib_in_changed]
2015/07/23 05:27:00 [2] [OK] [adj_rib_in_changed]
(3) End-End開通確認ツール動作結果
TestServerのdockerコンテナ上から、ツール動作結果を確認する。
root@TestServer:~/Test_automation# cd rest-client/
root@TestServer:~/Test_automation/rest-client# ./get_event.sh 2
..snip
-------------------------------------
Event Infomation
-------------------------------------
event_id [2]
event_time [2015/07/23 05:27:00]
event_type [adj_rib_in_changed]
peer_bgp_id [10.0.0.1]
peer_as [65010]
received_time [2015/07/23 05:26:59]
vpnv4_prefix [65010:101:172.16.0.0/24]
nexthop [192.168.101.101]
BGP経路追加を実施して、しばらくすると、
イベントID:2 の行が出力される。
イベントID:2 の詳細を確認する。
.. cont
24
-------------------------------------
Ping Result [OK]
-------------------------------------
$ ping -c 5 172.16.0.101 -I 192.168.1.102
PING 172.16.0.101 (172.16.0.101) from 192.168.1.102 : 56(84) bytes of data.
64 bytes from 172.16.0.101: icmp_seq=1 ttl=64 time=25.7 ms
64 bytes from 172.16.0.101: icmp_seq=2 ttl=64 time=27.3 ms
64 bytes from 172.16.0.101: icmp_seq=3 ttl=64 time=24.8 ms
64 bytes from 172.16.0.101: icmp_seq=4 ttl=64 time=21.0 ms
64 bytes from 172.16.0.101: icmp_seq=5 ttl=64 time=21.2 ms
--- 172.16.0.101 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 21.057/24.049/27.315/2.488 ms
-------------------------------------
show Neighbor Result
-------------------------------------
bgpd> show neighbor received-routes 192.168.101.101 all
Status codes: x filtered
Origin codes: i - IGP, e - EGP, ? - incomplete
Timestamp Network Labels Next Hop Metric LocPrf Path
2015/07/23 04:57:56 192.168.2.101/32 None 192.168.101.101 100 None [65010] ?
2015/07/23 05:26:59 172.16.0.0/24 None 192.168.101.101 100 None [65010] ?
-------------------------------------
show Rib Result
-------------------------------------
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.1.102/32 [300] 192.168.105.102 Only Path 100 ?
*> 65010:101:192.168.2.101/32 [600] 192.168.101.101 Only Path 100 65010 ?
*> 65010:101:172.16.0.0/24 [601] 192.168.101.101 Only Path 100 65010 ?
イベントID:2 の詳細を確認する。つづき
← End-Endでping疎通結果が確認できる
← BGP1にて、BGP4から受信したBGP経路情報が
  確認できる
← BGP1にて、保持しているBGP経路情報が
  確認できる
25
将来は、アンダーレイにおけるリンクステートの変化を
監視できるBGP-LSとの連携を視野に入れたBMP(BGP
Monitoring Protocol)での一元管理を目指していきたい。
IPネットワーク
D-Plane
C-Plane
CE3CE1
リンクステートの変化を
監視できるBGP-LS
メッセージ連携
おわりに

BMP活用による SDN時代のオーバレイNW監視手法の提案