シナプスの技術部ネットワーク課の福山と申します。
IX上の各AS向けBGPピア設定は共通する部分がいくつかあります。
シナプスではこれまでピアしていただいている各AS毎に、ほとんど同じ設定を入れて来ましたが、共通する部分を定義した上で、その定義を各AS毎に継承させることが出来ないかと考え検証してみました。
検証環境
Juniper MX204 Junos: 21.4R3-S2.3
通常のBGPピア設定
今回IX-A上で、AS64501とAS64502とBGPピアすることを前提とします。
AS64501向け設定
set protocols bgp group AS64501-IX-A type external set protocols bgp group AS64501-IX-A description AS64501 set protocols bgp group AS64501-IX-A import IX-A-IN set protocols bgp group AS64501-IX-A family inet unicast prefix-limit maximum 1000 set protocols bgp group AS64501-IX-A family inet unicast prefix-limit teardown 80 set protocols bgp group AS64501-IX-A family inet unicast prefix-limit teardown idle-timeout forever set protocols bgp group AS64501-IX-A export IX-A-OUT set protocols bgp group AS64501-IX-A remove-private set protocols bgp group AS64501-IX-A peer-as 64501 set protocols bgp group AS64501-IX-A neighbor 192.0.2.1
AS64502向け設定
set protocols bgp group AS64502-IX-A type external set protocols bgp group AS64502-IX-A description AS64502 set protocols bgp group AS64502-IX-A import IX-A-IN set protocols bgp group AS64502-IX-A family inet unicast prefix-limit maximum 1000 set protocols bgp group AS64502-IX-A family inet unicast prefix-limit teardown 80 set protocols bgp group AS64502-IX-A family inet unicast prefix-limit teardown idle-timeout forever set protocols bgp group AS64502-IX-A export IX-A-OUT set protocols bgp group AS64502-IX-A remove-private set protocols bgp group AS64502-IX-A peer-as 64502 set protocols bgp group AS64502-IX-A neighbor 192.0.2.2
各設定とも10行あります。また「AS64501向け設定」と「AS64502向け設定」で以下の部分(7行)が同じであることが分かります。
set protocols bgp group AS6450x-IX-A type external set protocols bgp group AS6450x-IX-A import IX-A-IN set protocols bgp group AS6450x-IX-A family inet unicast prefix-limit maximum 1000 set protocols bgp group AS6450x-IX-A family inet unicast prefix-limit teardown 80 set protocols bgp group AS6450x-IX-A family inet unicast prefix-limit teardown idle-timeout forever set protocols bgp group AS6450x-IX-A export IX-A-OUT set protocols bgp group AS6450x-IX-A remove-private
グループにまとめて継承させる
共通設定を「groups」でまとめて「apply-groups」で設定を適用して継承させます。
共通設定
共通設定をまとめた設定グループ「IX-A」を作成します。
ピアグループの階層指定にワイルドカードを使うことができるので、どのピアグループにもマッチするよう「*」でワイルドカード指定しています。
set groups IX-A protocols bgp group <*> type external set groups IX-A protocols bgp group <*> import IX-A-IN set groups IX-A protocols bgp group <*> family inet unicast prefix-limit maximum 1000 set groups IX-A protocols bgp group <*> family inet unicast prefix-limit teardown 80 set groups IX-A protocols bgp group <*> family inet unicast prefix-limit teardown idle-timeout forever set groups IX-A protocols bgp group <*> export IX-A-OUT set groups IX-A protocols bgp group <*> remove-private
ピアグループの階層に「apply-groups IX-A」で設定を適用することで共通設定が継承されます。
改めて、AS64501とAS64502向けの設定を考えます。
AS64501向け設定
set protocols bgp group AS64501-IX-A apply-groups IX-A ←ここで共通設定 IX-A を継承させる set protocols bgp group AS64501-IX-A description AS64501 set protocols bgp group AS64501-IX-A peer-as 64501 set protocols bgp group AS64501-IX-A neighbor 192.0.2.1
AS64502向け設定
set protocols bgp group AS64502-IX-A apply-groups IX-A ←ここで共通設定 IX-A を継承させる set protocols bgp group AS64502-IX-A description AS64502 set protocols bgp group AS64502-IX-A peer-as 64502 set protocols bgp group AS64502-IX-A neighbor 192.0.2.2
これまで10行あった設定が4行になりました。
継承されているか確認
先に共通設定を設定したあと、AS64501向け設定を追加し、コミット(設定を反映)する前に以下のコマンドでピアグループ名を指定して確認してみます。
「##」でコメントされているものが継承される設定です。
[edit] root# show protocols bgp group AS64501-IX-A | display inheritance brief ## 'external' was inherited from group 'IX-A' type external; description AS64501; ## 'IX-A-IN' was inherited from group 'IX-A' import IX-A-IN; ## 'inet' was inherited from group 'IX-A' family inet { ## 'unicast' was inherited from group 'IX-A' unicast { ## 'prefix-limit' was inherited from group 'IX-A' prefix-limit { ## '1000' was inherited from group 'IX-A' maximum 1000; ## 'teardown' was inherited from group 'IX-A' teardown { ## '80' was inherited from group 'IX-A' 80; ## 'idle-timeout' was inherited from group 'IX-A' ## 'forever' was inherited from group 'IX-A' idle-timeout forever; } } } } ## 'IX-A-OUT' was inherited from group 'IX-A' export IX-A-OUT; ## 'remove-private' was inherited from group 'IX-A' remove-private; peer-as 64501; neighbor 192.0.2.1;
継承された共通設定を変更
継承された共通設定を個別のピア設定では変更したい場合もあると思うので試してみました。
「prefix-limit」を変更
共通設定では「prefix-limit maximum」を「1000」にしています。
AS64501向け設定に「prefix-limit maximum」を「500」にする設定を追加してみます。
設定追加
[edit] root# set protocols bgp group AS64501-IX-A family inet unicast prefix-limit maximum 500
確認
[edit] root# show protocols bgp group AS64501-IX-A | display inheritance brief ## 'external' was inherited from group 'IX-A' type external; description AS64501; ## 'IX-A-IN' was inherited from group 'IX-A' import IX-A-IN; family inet { unicast { prefix-limit { maximum 500; ## 'teardown' was inherited from group 'IX-A' teardown { ## '80' was inherited from group 'IX-A' 80; ## 'idle-timeout' was inherited from group 'IX-A' ## 'forever' was inherited from group 'IX-A' idle-timeout forever; } } } } ## 'IX-A-OUT' was inherited from group 'IX-A' export IX-A-OUT; ## 'remove-private' was inherited from group 'IX-A' remove-private; peer-as 64501; neighbor 192.0.2.1;
「prefix-limit maximum」が「500」に上書きされています。
ルーティングポリシーを変更
共通設定ではOUT側のルーティングポリシー「IX-A-OUT」を設定しています。
AS64501向け設定にOUT側のルーティングポリシーを「IX-A-OUT2」にする設定を追加してみます。
※事前にルーティングポリシー「IX-A-OUT2」は作成しておきます。
設定追加
[edit] root# set protocols bgp group AS64501-IX-A export IX-A-OUT2
確認
[edit] root# show protocols bgp group AS64501-IX-A | display inheritance brief ## 'external' was inherited from group 'IX-A' type external; description AS64501; ## 'IX-A-IN' was inherited from group 'IX-A' import IX-A-IN; ## 'inet' was inherited from group 'IX-A' family inet { ## 'unicast' was inherited from group 'IX-A' unicast { ## 'prefix-limit' was inherited from group 'IX-A' prefix-limit { ## '1000' was inherited from group 'IX-A' maximum 1000; ## 'teardown' was inherited from group 'IX-A' teardown { ## '80' was inherited from group 'IX-A' 80; ## 'idle-timeout' was inherited from group 'IX-A' ## 'forever' was inherited from group 'IX-A' idle-timeout forever; } } } } ## 'IX-A-OUT' was inherited from group 'IX-A' export [ IX-A-OUT2 IX-A-OUT ]; ←IX-A-OUT2が追加されている ## 'remove-private' was inherited from group 'IX-A' remove-private; peer-as 64501; neighbor 192.0.2.1;
「export [ IX-A-OUT2 IX-A-OUT ]」となっており、「IX-A-OUT2」は上書きではなく、追加されています。
グループでBGPピアをまとめてシャットダウン
共通設定のBGP設定をシャットダウンすることで継承されたBGPピア先をまとめてシャットダウンできるか確認してみました。
シャットダウン前
root> show bgp summary <<抜粋>> Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped... 192.0.2.1 64501 20 21 0 3 5:53 Establ inet.0: 5/5/5/0 192.0.2.2 64502 20 21 0 3 5:49 Establ inet.0: 5/5/5/0
シャットダウン
[edit] root# set groups IX-A protocols bgp group <*> shutdown [edit] root# commit commit complete
シャットダウン後
root> show bgp summary <<抜粋>> Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped... 192.0.2.1 64501 74 82 0 4 5 Idle 192.0.2.2 64502 74 82 0 4 5 Idle
共通設定が継承されたBGPピア先をまとめてシャットダウンできました。
まとめ
- BGPピア設定をグループにまとめることでコンフィグを短くすることができました。新しいピアを追加設定する時や運用管理の面で省力化が図れそうです。
- 継承された共通設定を個別のピア設定でさらに変更できますが、設定項目によっては「上書きされる場合」 と「共通設定を維持しつつ、さらに個別の設定が追加される場合」 があるので、コミット前の確認を十分する必要があると感じました。
- グループでBGPピアをまとめてシャットダウンすることができるので、うまく活用すれば中継回線やルータメンテナンスの時に便利だと感じました。
- 今後Cisco IOS XRで同様の検証もしてみたいと思います。