Upload
toshiki-tsuboi
View
233
Download
6
Embed Size (px)
Citation preview
2
自己紹介
⚫ SDN/NFV技術に興味を持ったNWエンジニア ⚫ SDN時代にふさわしいNWエンジニアを目指して、 Python/Golang等を勉強中 ⚫ Ryu SDN Frameworkの、BGPSpeakerを 使いはじめて、BGPプログラミングの面白さに 目覚めつつあります。
@ttsubo
3
1. オーバレイNWとは
オーバーレイ・ネットワーク(overlay network)とは、 あるコンピュータネットワークの上に構築された別のコンピュータネットワークのことである。 オーバーレイ・ネットワーク上のノードは、下位ネットワークのトポロジーを意識せずに通信することができる。
~Wikipediaより~
オーバレイな階層ネットワーク概念
4IPネットワーク
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
BGP
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).
14C-Plane
CE3CE1 BGP mpBGP
mpBGP BGP
mpBGP
mpBGPBMP 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 allBGP table version is 19, local router ID is 10.0.1.2Status 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, ? - incompleteRPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight PathRoute 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 install2. 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経路情報が 確認できる