Slide 1

Slide 1 text

SONiCで設定する FRRouting June 28, 2019 Masaru OKI @masaru0714

Slide 2

Slide 2 text

FRRouting? ● https://frrouting.org/ ● Quaggaを基にした IP routing protocol suite ● BGP, IS-IS, LDP, OSPF, PIM, RIPに対応。 ● 対応OSはLinux, FreeBSD, NetBDS, OpenBSD. ● 最新バージョンは7.1 (2019年6月18日リリース) 2

Slide 3

Slide 3 text

SONiCで使われるFRRouting ● SONiC自体は、複数のRouting softwareから任意のものを選択できる。 ○ Quagga ○ FRRouting ○ goBGP ● ビルド時に決定されるため、配布されるバイナリはいずれか一つを含む。 ● 2019年5月に、無指定時のRouting softwareがFRRoutingに切り替わった。 ○ 以前はQuaggaだった ● 2019年6月25日時点で、SONiCで使われているFRRoutingのバージョンは7.0.1 3

Slide 4

Slide 4 text

configコマンドとshowコマンド ● config bgpコマンドがあるが、セッションの start, stopを指定するのみ。 ● 設定更新はconfig_db.jsonへ記述してconfig reload ● 参照はいろいろ ○ show bgp ○ show ip route ○ show ip protocol ○ show runningconfiguration bgp 4

Slide 5

Slide 5 text

SONiCにおけるBGP初期設定フロー 1. JSON形式の設定を読み込みSONiCのConfig DBにデータを格納する 2. テンプレート内の変数をDB内のデータに置き換え、結果を bgpd.confとして出力する 3. FRR bgpdがbgpd.confを読む Config DB config_db.json bgpd.conf.j2 sonic-cfggen bgpd.conf 5

Slide 6

Slide 6 text

JSON形式設定とbgpd.confの関係 JSON “DEVICE_METADATA”: { “localhost”: { “bgp_asn”: “ 65100” } }, “BGP_NEIGHBOR”: { “10.0.0.1”: { “asn”: “65200”, “name”: “Tokyo”, “keepalive”: 30, “holdtime”: 120” } bgpd.conf router bgp 65100 neighbor 10.0.0.1 remote-as 65200 neighbor 10.0.0.1 description “ Tokyo” neighbor 10.0.0.1 timers 30 120 自分のASN neighborのASN 6

Slide 7

Slide 7 text

参照されるJSONキー一覧 ● DEVICE_METADATA-localhost ○ hostname ○ bgp_asn ○ type - ToRRouterかその他 ○ default_bgp_status - upかdown ○ deployment_id ○ docker_routing_config_mode ● LOOPBACK_INTERFACE-Loopback0 ○ IP address ● VLAN_INTERFACE-(vlanX) ○ IP address ● BGP_NEIGHBOR-(neighbor_address) ○ asn ○ name ○ keepalive ○ holdtime ○ admin_status - upかdown ○ rrclient ○ nhopself ● BGP_PEER_RANGE-(group) ○ name ○ peer_asn ○ src_address ○ ip_range 7

Slide 8

Slide 8 text

bgpd.conf.j2 ● Jinja2テンプレートフォーマットで書かれている。 ● SONiCが動いているホストだと ○ bgp docker の /usr/share/sonic/templates/bgp.conf.j2 ● ソースコード ○ sonic-buildimage/dockers/docker-fpm-frr/bgpd.conf.j2 8

Slide 9

Slide 9 text

1. JSON形式の設定を読み込みSONiCのConfig DBにデータを格納する 2. DBにsubscribeしていたbgpcfgdがデータを読む ○ 読むデータは現在 bgp_asnとneighbor asn, name, admin_statusのみ ○ neighborの削除には対応。追加の場合は上記設定のみが反映される 3. データの内容をvtyshコマンドを使いbgpdに叩き込む SONiCにおけるBGP設定変更フロー 9 bgpcfgd Config DB config_db.json vtysh bgpd config reload

Slide 10

Slide 10 text

SONiCでのBGP制限事項 bgpd.conf.j2を見る限り、FRRoutingで対応しているうち(少なくとも)下記ができない ● VRFには対応しない (router bgp行は1つのみ) ● distance指定には対応しない ● aggregate-address指定には対応しない ● router-idはLoopback0につけられたIPアドレスで固定 ● bestpathはas-path multipath-relaxで固定 ● redistribute指定に対応しない ● as-path access-listに対応しない bgpd.conf.j2に記述を追加し、JSON形式の設定を書き、bgpcfgdを変更すれば、拡張可能。 10

Slide 11

Slide 11 text

BGP以外のプロトコルは? ● SONiCでは現状、BGP以外すべて未対応。 ● bgp dockerをまねて? 同居させる形で? 用意すればおそらく拡張可能。 ● テンプレートとJSON記述を用意すればBGPと同じように動かせるはず。 11

Slide 12

Slide 12 text

まとめ ● SONiCではFRRoutingを使っている ● JSON形式でBGPの設定を記述し、bgpd.confに変換して動かす ● SONiCの設定はFRRoutingの機能の一部のみを対象としている ● 現状対応していない機能についても拡張は (おそらく)容易に可能 12