GoBGP の基本的な使い方
GoBGP は Go 言語で実装された BGP デーモンです。VIRL 上でネットワーク機器と組み合わせて使うと BGP の検証をする際に便利です。今回は簡単な使い方をメモしておきます。
検証環境
構成
今回は VIRL で以下の構成を作りました。Go 言語や GoBGP をインターネットから取得する為、Linux はインターネットに出られるようにしてあります。
Linux の設定
以下の通り、アドレスを設定しておきます。
| sudo ip addr add 192.168.1.100/24 dev eth1
sudo ip link set up dev eth1
sudo ip addr add 192.168.2.100/24 dev eth2
sudo ip link set up dev eth2
|
尚、後述しますが GoBGP は AS65001 で動作させます。
R1 の設定
AS 65001 で設定し、GoBGP とは iBGP Peer を張らせます。
| hostname R1
!
interface GigabitEthernet0/1
ip address 192.168.1.1 255.255.255.0
no shutdown
!
router bgp 65001
bgp router-id 192.168.99.1
neighbor 192.168.1.100 remote-as 65001
!
end
|
R2 の設定
AS 65001 で設定し、GoBGP とは eBGP Peer を張らせます。
| hostname R2
!
interface GigabitEthernet0/1
ip address 192.168.2.2 255.255.255.0
no shutdown
!
router bgp 65002
bgp router-id 192.168.99.2
neighbor 192.168.2.100 remote-as 65001
!
end
|
Go 言語のインストール
GoBGP は Go 言語で実装されているので、まず初めに Go 言語をインストールします。apt で Go 言語 (golang) をインストールすると GoBGP のインストールに失敗する為、apt は使わないことにします。予め、必要となる環境変数を ~/.profile に設定しておきます。
| export GOPATH=$HOME/golang
export PATH=$PATH:$GOPATH/bin:/usr/local/go/bin
|
.profile の変更を反映しておきます。
公式サイトから Go 言語をダウンロード&展開します。
| curl -k -O https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
sudo tar -C /usr/local -zxvf go1.6.linux-amd64.tar.gz
mkdir ~/golang
|
GoBGP のインストール
GoBGP は「デーモン部分の gobgpd」と「CLI 部分の gobgp」に分かれており、両者間は gRPC で通信するそうです。GoBGP をインストールするには git が必要になります。
| sudo apt-get update
sudo apt-get -y install git
go get github.com/osrg/gobgp/gobgpd
go get github.com/osrg/gobgp/gobgp
|
gobgpd のインストールには若干、時間がかかりました。「VIRL 上の環境」ということもあると思いますが、今回の環境では 2 分 20 秒程かかりました。
| $ time go get github.com/osrg/gobgp/gobgpd
real 2m19.468s
user 0m38.765s
sys 0m5.465s
$ time go get github.com/osrg/gobgp/gobgp
real 0m5.699s
user 0m4.300s
sys 0m0.436s
|
尚、現時点で Go 言語を apt-get でインストールすると 1.2.1 がインストールされました。この状態で gobgpd をインストールしようとすると、エラーになってしまいました。
| $ go version go1.2.1 linux/amd64
$ go get github.com/osrg/gobgp/gobgpd
# golang.org/x/net/http2/hpack
golang/src/golang.org/x/net/http2/hpack/huffman.go:14: undefined: sync.Pool
|
GoBGP の設定ファイル
~/golang/bin/gobgpd.conf に GoBGP の設定ファイルを以下の内容で新規作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13 | [global.config]
as = 65001
router-id = "192.168.99.100"
[[neighbors]]
[neighbors.config]
neighbor-address = "192.168.1.1"
peer-as = 65001
[[neighbors]]
[neighbors.config]
neighbor-address = "192.168.2.2"
peer-as = 65002
|
GoBGP の起動
これで用意 OK です。GoBGP を起動します。
| cd ~/golang/bin
sudo ./gobgpd -f gobgpd.conf
|
実際の起動ログは以下の通りです。
| $ sudo ./gobgpd -f gobgpd.conf
[sudo] password for cisco:
{"level":"info","msg":"gobgpd started","time":"2016-04-03T07:56:28Z"}
{"level":"info","msg":"finished reading the config file","time":"2016-04-03T07:56:28Z"}
{"level":"info","msg":"Peer 192.168.1.1 is added","time":"2016-04-03T07:56:28Z"}
{"level":"info","msg":"Peer 192.168.2.2 is added","time":"2016-04-03T07:56:28Z"}
{"Key":"192.168.1.1","State":4,"Topic":"Peer","level":"info","msg":"Peer Up","time":"2016-04-03T07:56:31Z"}
{"Key":"192.168.2.2","State":4,"Topic":"Peer","level":"info","msg":"Peer Up","time":"2016-04-03T07:56:40Z"}
|
経路を追加する
経路の追加例は以下の通りです。追加した経路はすぐにアップデートされます。
| gobgp global rib add -a ipv4 10.0.1.0/24 community 111:222 med 333 origin igp local-pref 444
|
R1 で受信経路を確認します。GoBGP から指定した属性を受信出来ています。
| R1# show ip bgp 10.0.1.0/24
BGP routing table entry for 10.0.1.0/24, version 26
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
Local
192.168.1.100 from 192.168.1.100 (192.168.99.100)
Origin IGP, metric 333, localpref 444, valid, internal, best
Community: 111:222
rx pathid: 0, tx pathid: 0x0
|
同様に、R2 で受信経路を確認します。GoBGP から指定した属性を受信出来ています。こちらは eBGP なので LocalPref が無視されています。
| R2# show ip bgp 10.0.1.0/24
BGP routing table entry for 10.0.1.0/24, version 26
Paths: (1 available, best #1, table default)
Flag: 0x820
Not advertised to any peer
Refresh Epoch 1
65001
192.168.2.100 from 192.168.2.100 (192.168.99.100)
Origin IGP, metric 333, localpref 100, valid, external, best
Community: 111:222
rx pathid: 0, tx pathid: 0x0
|
経路を削除する
経路の削除は以下の通りです。
| gobgp global rib del -a ipv4 10.0.1.0/24
|
参考