Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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