LGTM

Looks Good To Me

Time Attack: bgpsimple vs exabgp

お手軽フルルート環境に興味が出て,どの程度お手軽にできるのか試しました.

(参考: Other OSS BGP implementations · Exa-Networks/exabgp Wiki · GitHub)

をざっと見て

  • MRT から経路注入できる
  • eBGP で渡りそうなPath Attribute を付けられる
  • 手数が少ない *1

ので選ぶと,bgpsimple / exabgp が候補になります.

bgpsimple,Google Code にしかないっぽいんだけど 大丈夫か...

フルルート広告の所要時間が気になる

bgpsimple はbgpdump でMRT table dump をテキスト化すれば入力できるし,exabgp はmrtparser で設定ファイルを出力できます.両方お手軽なんですが,経路広告の所要時間が気になるので計測してみました.

環境

経路受信側は別Hypervisor のfirefly.ボトルネックにならないよう,経路はすべてreject する設定.

結果

bgpsimple exabgp
ピアが上がるまで 数秒 3'59"
フルルート広告し終わるまで 2'39" 1'15"
clear bgp 後,フルルート広告し終わるまで 2'34" 2'57"

bgpsimple のほうがトータル速そう.exabgp は設定ファイルをload → parse するのに4分もかかるため,全体として2倍遅いです.

注意

bgpsimple を使うときはholdtimer を長く

bgpsimple は経路を広告し終わるまでKEEPALIVE メッセージを送らないため,経路広告が終わるまえにHold Timer Expire する可能性が高い.

exabgp は適宜KEEPALIVE してくれます.

bgpsimple は,経路リストの全エントリーについて広告

bgpdump -m によってMRTをテキスト変換してbgpsimple に入力しますが,もとのMRT には複数neighbor 分の経路が保存されています.そのため,テキスト変換された経路リストには同じprefix の経路が複数含まれている場合があります.これを順次UPDATE メッセージとして送信すると,対向のfirefly では後に受け取ったpath だけがAdj-RIBs-In に残ります.

ムダですね.

exabgp はMRT ファイル上で先に現れた経路のみ広告

mrtparser の仕様により,prefix が同じであれば先に読まれたpath のみUPDATE メッセージとして送信します.ムダはありませんが,bgpsimple で経路広告した場合と比べて 対向のAdj-RIBs-In の中身が変わってくることに注意です.

*1:たとえばeggpd はerlang でフルルート分の設定を書けば要件を満たすが,変換コードを書かないといけないのでパス