bagpipe-bgp インストール~簡易動作確認 (original : 2015/11/08)
この記事は某所で 2015/11/08
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。
概要
本項でやること
- bagpipe-bgp をインストールして軽く動作確認するところまでです
- 一般的に OpenStack Neutron と組み合わせて使うようですが、ここでは OpenStack は登場しません
- OSS で手軽に EVPN を試せそう、というのがモチベーションです
環境情報
$ uname -a Linux as65000-l1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
手順
Python 各種パッケージインストール
必要なパッケージをインストール
- reauirements.txt を参照
OS パッケージで入れる例
$ sudo apt-get install python-daemon python-bottle python-netaddr python-pip
bagpipe-bgp インストール
- 公式の Installation に従う
$ cd $ git clone https://github.com/Orange-OpenSource/bagpipe-bgp.git $ cd bagpipe-bgp/ $ git show commit 216fee45fba40663dfd9b48bb31be74f5513f684 Author: Thomas Morin <thomas.morin@orange.com> Date: Fri Aug 28 17:00:53 2015 +0200 devstack plugin fix (dumb omission of "then" in a bash statement...) $ sudo python setup.py install $ ls -al /usr/local/bin/bagpipe-* -rwxr-xr-x 1 root root 175 Nov 8 01:28 /usr/local/bin/bagpipe-bgp -rwxr-xr-x 1 root root 177 Nov 8 01:28 /usr/local/bin/bagpipe-bgp-cleanup -rwxr-xr-x 1 root root 157 Nov 8 01:28 /usr/local/bin/bagpipe-fakerr -rwxr-xr-x 1 root root 168 Nov 8 01:28 /usr/local/bin/bagpipe-looking-glass -rwxr-xr-x 1 root root 166 Nov 8 01:28 /usr/local/bin/bagpipe-rest-attach $ bagpipe-bgp --help Usage: bagpipe-bgp [options] (see --help) Options: -h, --help show this help message and exit --config-file=CONFIGFILE Set BGP component configuration file path --log-file=LOGFILE Set logging configuration file path --no-daemon Do not daemonize
bagpipe-bgp service 登録(~自動起動設定)
$ cd bagpipe-bgp/ $ ./install_bagpipe_bgp.sh *** WARNING: This script must be run as root *** $ sudo ./install_bagpipe_bgp.sh $ sudo service bagpipe-bgp status BGP component is running.
- 自動起動したい場合は、サンプルが同梱されているので、これを配置すればよかろう(ここでは未実施)
$ ls -al bagpipe-bgp/etc/init.d/ total 16 drwxrwxr-x 2 kotetsu kotetsu 4096 Nov 8 01:25 . drwxrwxr-x 3 kotetsu kotetsu 4096 Nov 8 01:25 .. -rwxrwxr-x 1 kotetsu kotetsu 2518 Nov 8 01:25 bagpipe-bgp -rwxrwxr-x 1 kotetsu kotetsu 1545 Nov 8 01:25 bagpipe-fakerr
bagpipe-bgp 設定ファイルの編集
メイン設定ファイル (/etc/bagpipe-bgp/bgp.conf)
/etc/bagpipe-bgp/bgp.conf
- ネットワーク環境に合わせて
[BGP]
の項目を編集- iBGP しか使えないことに注意
$ ls -al /etc/bagpipe-bgp/ total 24 drwxr-xr-x 2 root root 4096 Nov 8 01:57 . drwxr-xr-x 83 root root 4096 Nov 8 01:57 .. -rw-r--r-- 1 root root 3099 Nov 8 01:57 bgp.conf -rw-rw-r-- 1 root root 3099 Nov 8 01:25 bgp.conf.template -rw-r--r-- 1 root root 1615 Nov 8 01:57 log.conf -rw-rw-r-- 1 root root 1615 Nov 8 01:25 log.conf.template $ cat /etc/bagpipe-bgp/bgp.conf [BGP] local_address=10.0.1.2 peers=10.0.1.1 my_as=65000 enable_rtc=False (略) $ diff /etc/bagpipe-bgp/bgp.conf /etc/bagpipe-bgp/bgp.conf.template 2,5c2,5 < local_address=10.0.1.2 < peers=10.0.1.1 < my_as=65000 < enable_rtc=False --- > local_address=192.168.100.177 > peers=192.168.0.101 > my_as=64512 > enable_rtc=True
log 出力設定ファイル (/etc/bagpipe-bgp/log.conf)
/etc/bagpipe-bgp/log.conf
[logger_engine]
だけ出力レベルを WARNING からDEBUG
に変更(様子を観察するため)- デフォルトでは
/var/log/bagpipe-bgp/bagpipe-bgp.log
に出力される
$ cat /etc/bagpipe-bgp/log.conf (略) [logger_engine] level=DEBUG propagate=0 qualname=bagpipe.bgp.engine handlers=rotatingFile parent=bgp (略) $ diff /etc/bagpipe-bgp/log.conf /etc/bagpipe-bgp/log.conf.template 25c25 < level=DEBUG --- > level=WARNING
bagpipe-bgp 起動~状態確認
ここからの例では起動の前に、適当な iBGP neighbor を用意しておきます。
起動
service
で普通に扱うだけ- 要 root 権限
$ sudo service bagpipe-bgp start Starting BGP component... $ sudo service bagpipe-bgp restart Restarting BGP component... stopping.........starting $ sudo service bagpipe-bgp status BGP component is running.
ログ確認
- デフォルトのログ設定ではさほど出力されないが、前述の通り
[logger_engine]
の level を DEBUG に変えたので、やたら出ている
$ more /var/log/bagpipe-bgp/bagpipe-bgp.log 2015-11-08 12:18:41,772 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Re-initiating 2015-11-08 12:18:41,773 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1 BGP FSM transitioned from 'OpenSent' to 'Idle' state 2015-11-08 12:18:41,773 BGP-10.0.1.1 bagpipe.bgp.engine.bgp_manager DEBUG push cleanup event for worker BGP-10.0.1.1 to RouteTableManager 2015-11-08 12:18:41,773 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager received event WorkerCleanupEvent:BGP-10.0.1.1 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager INFO Cleanup for worker BGP-10.0.1.1 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager INFO (we had no trace of Worker BGP-10.0.1.1 in _source2entries) 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager queue size: 0 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager waiting on queue 2015-11-08 12:18:51,788 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1 BGP FSM transitioned from 'Idle' to 'Connect' state 2015-11-08 12:18:51,788 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Initiate ExaBGP connection to 10.0.1.1 from 10.0.1.2 2015-11-08 12:18:51,790 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Instantiate ExaBGP Protocol 2015-11-08 12:18:51,791 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Send open: [OPEN version=4 asn=65000 hold_time=180 router_id=10.0.1.2 capabilities=[Multiprotocol IPv4 mpls-vpn L2VPN evpn, 4Bytes AS 65000]] 2015-11-08 12:18:51,792 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1 BGP FSM transitioned from 'Connect' to 'OpenSent' state 2015-11-08 12:18:51,792 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Wait for open... 2015-11-08 12:18:51,793 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Read message: OPEN version=4 asn=65000 hold_time=90 router_id=192.168.101.170 capabilities=[Multiprotocol L2VPN evpn, Route Refresh, 4Bytes AS 65000] 2015-11-08 12:18:51,793 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO changing thread name from BGP-10.0.1.1 to BGP-x192.168.101.170, based on the router-id advertized in Open (different from peerAddress == 10.0.1.1) 2015-11-08 12:18:51,793 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 WARNING Peer does not advertise (IPv4,mpls-vpn) capability 2015-11-08 12:18:51,794 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Family (L2VPN,evpn) successfully negotiated with peer 10.0.1.1 2015-11-08 12:18:51,795 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 WARNING Peer does not advertise (IPv4,rtc) capability 2015-11-08 12:18:51,795 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1/192.168.101.170 BGP FSM transitioned from 'OpenSent' to 'OpenConfirm' state 2015-11-08 12:18:51,795 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init sendKA timer (30s) 2015-11-08 12:18:51,796 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init Keepalive reception timer (90s) 2015-11-08 12:18:51,797 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Sending 19 bytes on socket to peer 10.0.1.1 2015-11-08 12:18:51,797 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Start receive loop 2015-11-08 12:18:51,798 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1/192.168.101.170 BGP FSM transitioned from 'OpenConfirm' to 'Established' state 2015-11-08 12:18:51,798 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.worker INFO Subscribe: Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170 2015-11-08 12:18:51,799 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.bgp_manager DEBUG bagpipe.bgp.engine.bgp_manager.Manager method _routeEventSubscribe called with arguments (Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170,) {} 2015-11-08 12:18:51,799 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager received event Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170 2015-11-08 12:18:51,799 RouteTableManager bagpipe.bgp.engine.route_table_manager INFO workerSubscribes: Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170 2015-11-08 12:18:51,800 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager queue size: 0 2015-11-08 12:18:51,800 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager waiting on queue 2015-11-08 12:18:51,800 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Keepalive received 2015-11-08 12:18:51,801 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init Keepalive reception timer (90s) 2015-11-08 12:18:51,800 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Received message: KEEPALIVE 2015-11-08 12:19:21,797 BGP-10.0.1.1/192.168.101.170:sendKATimer bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Trigger send KeepAlive 2015-11-08 12:19:21,798 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Sending 19 bytes on socket to peer 10.0.1.1 2015-11-08 12:19:21,798 BGP-10.0.1.1/192.168.101.170:sendKATimer bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init sendKA timer (30s) 2015-11-08 12:19:21,800 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Received message: KEEPALIVE 2015-11-08 12:19:21,800 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Keepalive received 2015-11-08 12:19:21,800 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init Keepalive reception timer (90s)
状態確認(bagpipe-looking-glass)
$ bagpipe-looking-glass bgp peers 10.0.1.1 protocol: state: Established hold_time: 90 last_transition_time: 2015-11-08 12:18:51 previous_state: (OpenConfirm) name: BGP-10.0.1.1/192.168.101.170 rtc: active: False enabled: False as_info: peer: 65000 local: 65000 internals: event queue length: 0 subscriptions: * match:L2VPN/evpn,* peeringAddresses: peerAddress: 10.0.1.1 localAddress: 10.0.1.2 routes: (...) active_families: * (L2VPN, evpn) logs: (...)
- bagpipe は Openstack Neutron components あたりとの連携して使うのが一般的のようで RESTAPI 制御も可能
- 適当に別のノードから突いた一例
$ curl -s http://192.168.101.171:8082/looking-glass/bgp/peers/10.0.1.1 | python -m json.tool
{ "active_families": [ "(L2VPN, evpn)" ], "as_info": { "local": 65000, "peer": 65000 }, "internals": { "event queue length": 0, "subscriptions": [ "match:L2VPN/evpn,*" ] }, "logs": { "href": "http://192.168.101.171:8082/looking-glass/bgp/peers/10.0.1.1/logs" }, "name": "BGP-10.0.1.1/192.168.101.170", "peeringAddresses": { "localAddress": "10.0.1.2", "peerAddress": "10.0.1.1" }, "protocol": { "hold_time": 90, "last_transition_time": "2015-11-08 12:18:51", "previous_state": "(OpenConfirm)", "state": "Established" }, "routes": { "href": "http://192.168.101.171:8082/looking-glass/bgp/peers/10.0.1.1/routes" }, "rtc": { "active": false, "enabled": false } }
おわり
- インストールしただけなので、特に…