LGTM

Looks Good To Me

フルルート入れるのにgobgp を使ってみる

「どの程度お手軽にフルルートを注入できるか?」の続編です.

2015/08/12 追記 : gobgp の不具合,修正されました

codeout.hatenablog.com

今回 gobgp のコミッターさんから「mrt 実装しましたー,もしお時間あったら試してみてください!」と連絡もらったので 試しました.

MRT TABLE_DUMP からフルルートを注入してみます.

gobgp ?

BGP Daemon のGo 実装です. 速そうだしガンガン機能が足されていて 注目のbgpd.

  • Go なので,マルチコアをうまく使ってくれそう
  • gobgpd (サーバー) とgobgp (CLI) で構成されている
  • サーバー <-> CLI 間はgrpc
  • MRT から経路生成できるし,MRT Dump もできる
  • 経路フィルター書けたり,VRF つくれたり,RPKI できたり,route server できたり,EVPN できたりしそう (未確認)
  • ドキュメント

特にサーバーはgrpc を話すので,「手軽にクライアント作れるかもしれないな」とも思ってます.

bgpsimple vs. gobgp

フルルート注入スピードについて,bgpsimple *1と比べてみると

bgpsimple gobgpd
ピアが上がるまで 0'00" 0'07"
フルルート広告し終わるまで 2'42" 1'43"
clear bgp 後,フルルート広告し終わるまで 3'12" 1'24"

gobgp めっちゃ速い!!!

bgpsimple がシングルスレッドなのに対し,gobgpd はマルチスレッドで CPU バウンドな処理と相性よさそう.実際にマルチコアをうまく使ってくれます.

環境

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

gobgp の長所

  • 速い!!!
  • CLI から多少コントロールできる
  • MRT を読んで一旦RIB に格納しているため,経路広告前にbest path selection が走っている
    • 経路の整合性が取れていて,受信側の負荷が下がる
  • MRT を直接入力できる (bgpdump 不要)

gobgp の短所

  • 不具合ありそう
    • eBGP UPDATE メッセージにLP 属性が入っている
    • eBGP UPDATE メッセージのAS_PATH 属性に,自分のAS が入っていない

    見つけた不具合はすぐ修正してもらえました.ありがとうございます

  • サポートOS が少ないかも?

    UNIX 系OS のうち,TCP-MD5 がきちんと実装されているのはLinux くらいだが

    • gobgp「TCP-MD5 サポートのためにLinux 以外は一旦忘れます」
    • 他bgpd「TCP-MD5 は動かないかもしれないけど,他のOS もサポートします」

個人的にはデバッグのためOSX で動くとうれしいが,Linux も手に入りやすい部類だと思う.上記の不具合が解決したら 積極的に使っていきたい.

*1:bgpsimple はMRT から経路生成するならお手軽で便利なので,イチオシだったbgpd