kakkotetsu

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 各種パッケージインストール

  • 必要なパッケージをインストール

  • OS パッケージで入れる例

$ sudo apt-get install python-daemon python-bottle python-netaddr python-pip

bagpipe-bgp インストール

$ 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
    }
}

おわり

  • インストールしただけなので、特に…