LoginSignup
37
34

More than 5 years have passed since last update.

インターネットのフルルートをGoBGPで注入してみた

Last updated at Posted at 2016-05-02

インターネットのフルルート(59万経路)をGoBGPに注入してみました。
Ubuntu16.04上でGoBGPを動かし、Route Views Archive Projectで公開されているMRT形式のダンプデータを注入します。
本記事は@codeoutさんのフルルート入れるのにgobgp を使ってみるを参考にしています。

関連投稿
その1:インターネットのフルルートをGoBGPで注入してみた(本記事)
その2:インターネットのフルルートをGoBGPからVyOSに注入してみた

はじめに

GoBGPはフロントエンドのgobgpとバックエンドのgobgpdの2つの実行ファイルがあります。
gobgpdはBGPの処理をするデーモンとして動作します。gobgpはgobgpdをユーザが操作するツールとして動作します。gobgpでBGPのピアの状態を確認や経路を注入します。

今回は下図のように、フルルートをgobgp経由でgobgpdに注入します。

diagram.svg.png
図. 仕組み

環境

BGPのフルルート注入は下記の環境で実施しました。

  • Intel NUC, NUC5i5RY(Core i5-5250U)
  • Oracle VM VirtualBox 5.0.18
    • 仮想マシンのメモリに4GB割当(gobgpdで結構メモリ使います)
  • Ubuntu 16.04 LTS(ubuntu-16.04-server-amd64.iso)
  • Golang 1.6
  • GoBGP v1.6

Screenshot from 2016-05-03 08-41-07.png
図. Oracle VM VirtualBox上の仮想マシンの設定

GoBGPのインストール

GoBGPのGetting Startedを参考にインストールします。
Ubuntu16.04の場合、golangのインストールだけでOKです。

# Go言語を使っていない場合はgolang-1.6をインストール
$ sudo apt update
$ sudo apt install golang-go

# GOPATHで外部ライブラリのインストール場所を指定($HOME/go)
$ echo 'export GOPATH=$HOME/go' >> ~/.bashrc
$ echo 'export PATH=$GOPATH/bin:$PATH' >> ~/.bashrc
$ source ~/.bashrc

# GoBGPのインストール(時間かかる)
$ go get github.com/osrg/gobgp/gobgpd
$ go get github.com/osrg/gobgp/gobgp

# Bash用の補完スクリプトの読み込み
$ wget https://raw.githubusercontent.com/osrg/gobgp/master/tools/completion/gobgp-completion.bash
$ wget https://raw.githubusercontent.com/osrg/gobgp/master/tools/completion/gobgp-static-completion.bash
$ wget https://raw.githubusercontent.com/osrg/gobgp/master/tools/completion/gobgp-dynamic-completion.bash
$ source gobgp-completion.bash

GoBGPデーモンの起動

AS65000でGoBGPデーモン(gobgpd)を起動します。ルータIDは192.168.0.1を設定しています。今回はフルルートを読み込むだけで、BGPピアの設定はしていません。

# 設定ファイル作成
$ cat <<EOF > gobgpd.conf
[global.config]
  as = 65000
  router-id = "192.168.0.1"
EOF

# GoBGPデーモンを起動
$ sudo $HOME/go/bin/gobgpd -f gobgpd.conf
{"level":"info","msg":"gobgpd started","time":"2016-05-02T23:32:43+09:00"}
{"level":"info","msg":"finished reading the config file","time":"2016-05-02T23:32:43+09:00"}

MRTデータのダウンロード

BGPのフルルートはRoute Views Archive Projectで公開されています。MRT形式のダンプデータ(MRTデータ)のアーカイブ形式で公開されています。

今回は最新のMRTデータをダウンロードします。サイズが最も小さいDIXIE (NSPIXP), Tokyo, Japanのダンプデータを使用します。

MRT format RIBs and UPDATEs from DIXIE (WIDE)から2016.05/RIBS/rib.20160502.1400.bz2(7.1MB)をダウンロードします(UTC表記のため、JSTでは2016/5/2 21:00のデータとなります)。bzip2形式で圧縮されており、展開前は7.1MB、展開後は66MBです。

# ダウンロード
$ wget http://archive.routeviews.org/route-views.wide/bgpdata/2016.05/RIBS/rib.20160502.1400.bz2

# GoBGPで読み込むため展開
$ bzip2 -d rib.20160502.1400.bz2

フルルートの注入

gobgpコマンドでMRTデータを注入します。59万経路の注入には90秒程度かかり、gobgpdのみで2GB程度のメモリを消費します。

# コマンドの補完を効くように補完スクリプトを読み込む
$ source gobgp-completion.bash

# MRTデータをGoBGPデーモンに注入します。90秒程度
$ gobgp mrt inject global rib.20160502.1400

gobgp global ribコマンドでは、IPプレフィックスの検索のみサポートされています。MRTデータを生成しているBGPルータのピア数は2のため、ベストパス以外も表示されます。IPプレフィックスと、ASパス、アトリビュートが表示されます。ネクストホップはMRTデータを生成したルータのものになります。

# 8.8.8.8のIPアドレス形式で検索
$ gobgp global rib 8.8.8.8
    Network             Next Hop             AS_PATH              Age        Attrs
*>  8.8.8.0/24          202.249.2.169        2497 15169           00:04:03   [{Origin: i}]
*   8.8.8.0/24          202.249.2.169        7500 2497 15169      00:04:03   [{Origin: i}]

# 202.248.0.0/16のIPプレフィックス形式で検索
$ gobgp global rib 202.248.0.0/16
    Network             Next Hop             AS_PATH              Age        Attrs
*>  202.248.0.0/16      202.249.2.169        2497 2510            00:03:51   [{Origin: i}]
*   202.248.0.0/16      202.249.2.110        7500 2516 2510       00:03:51   [{Origin: i}]

# BGPテーブルを表示(時間がかかります)
$ gobgp global rib | head -n20
    Network             Next Hop             AS_PATH                         Age        Attrs
*>  1.0.4.0/24          202.249.2.169        7500 2497 4637 1221 38803 56203 00:30:31   [{Origin: i}]
*   1.0.4.0/24          202.249.2.169        2497 4637 1221 38803 56203      00:30:31   [{Origin: i}]
*>  1.0.5.0/24          202.249.2.169        7500 2497 4637 1221 38803 56203 00:30:31   [{Origin: i}]
*   1.0.5.0/24          202.249.2.169        2497 4637 1221 38803 56203      00:30:31   [{Origin: i}]
*>  1.0.6.0/24          202.249.2.169        7500 2497 4637 1221 38803 56203 56203 56203 00:30:31   [{Origin: i}]
*   1.0.6.0/24          202.249.2.169        2497 4637 1221 38803 56203 56203 56203      00:30:31   [{Origin: i}]
*>  1.0.38.0/24         202.249.2.169        2497 10026 24155      00:30:31   [{Origin: i}]
*   1.0.38.0/24         202.249.2.169        7500 2497 10026 24155 00:30:31   [{Origin: i}]
*>  1.0.64.0/18         202.249.2.169        2497 7670 7670 7670 18144 00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 18144, Address: 219.118.225.188}}]
*   1.0.64.0/18         202.249.2.110        7500 2516 7670 18144      00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 18144, Address: 219.118.225.188}}]
*>  1.0.128.0/17        202.249.2.169        2497 38040 9737      00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 9737, Address: 203.113.12.254}}]
*   1.0.128.0/17        202.249.2.169        7500 2497 38040 9737 00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 9737, Address: 203.113.12.254}}]
*>  1.0.128.0/18        202.249.2.169        2497 38040 9737      00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 9737, Address: 203.113.12.254}}]
*   1.0.128.0/18        202.249.2.169        7500 2497 38040 9737 00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 9737, Address: 203.113.12.254}}]
*>  1.0.128.0/19        202.249.2.169        2497 38040 9737      00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 9737, Address: 203.113.12.254}}]
*   1.0.128.0/19        202.249.2.169        7500 2497 38040 9737 00:30:31   [{Origin: i} {AtomicAggregate} {Aggregate: {AS: 9737, Address: 203.113.12.254}}]
*>  1.0.128.0/24        202.249.2.169        2497 38040 9737 23969      00:30:31   [{Origin: i}]
*   1.0.128.0/24        202.249.2.169        7500 2497 38040 9737 23969 00:30:31   [{Origin: i}]
*>  1.0.129.0/24        202.249.2.169        7500 2497 38040 9737 23969 00:30:31   [{Origin: i}]

gobgpdのメモリ消費

topの結果、gobgpdプロセスでは、2.5GB程度のメモリを消費していることがわかります。

Screenshot from 2016-05-02 23-47-30.png
図. top画面

おわりに

今回はGoBGPにフルルートを注入しました。メモリはかなり消費しますが、動作が早いのが利点です。

現状のままでは、IPプレフィックスからOrigin ASを検索することぐらいしかできません。

追記:BGPピアにフルルートを広報する記事を書きました。
インターネットのフルルートをGoBGPからVyOSに注入してみた

37
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
34