【MED】BGPの経路制御はどう使い分けるか?【AS_PATH】

2023-01-06

ネットワークインフラの世界でBGPは重要なプロトコル。

DNSと並んで、BGPはインターネットの根幹を成す仕組みです。

一方で、よくBGPは難しいと言われます。

書籍やネット情報だけでは、具体的な使い方がイメージしにくいのが実態。

この記事ではBGPの「MED」と「AS_PATH」による経路制御の具体的な使い分けをまとめました。

BGPの経路選択の基本

優先順位パスアトリビュート
(パス属性)
1WEIGHT
2LOCAL_PREF
3LOCAL
4AS_PATH
5ORIGIN
6MED
7Peer Type
8IGP Metric
9Oldest Path
10Router-ID

BGPの経路制御における最適経路は、上記のパスアトリビュート(パス属性)の優先順位に従って決定されます。

その中でも、ネットワーク設計には「MED」「AS_PATH」がよく使われます。

では、これら2つは一体どのように使い分けて設計するのでしょうか?

結論としては、次の様に使い分けます。

MEDは、隣接する単一のASに対する経路制御に用いる。

AS_PATHは、隣接する複数の異なるASに対する経路制御に用いる。

次からは、AS_PATHとMEDの挙動について簡易なネットワーク図を元に具体的に見ていきます。

MEDによる経路制御

通常状態

上図のネットワークは、「3つのAS間」を「ルーター4台」によるBGPルーティングの冗長構成。

なお、簡略化のためにIPアドレスその他の情報は割愛しています。

各機器の関係性は以下一覧となります。

送信元宛先宛先から受け取るMED値経路の主/副
ルーターAルーターC100主系
ルーターAルーターD200副系
ルーターBルーターC200副系
ルーターBルーターD100主系

この構成に基づくと、最適経路は上図ピンク色の矢印となります。通常時は「ルーターA⇔C間」、「ルーターB⇔D間」でBGPによる優先経路として通信が行われます。

これは、各ルーターから受信するMED値のより小さい方が優先されるためです。

片系に障害発生

ではもし上図のように「ルーターB⇔D間」で何らかの通信障害が発生したら、トラフィックにはどんな影響があるでしょうか?

結果として、MED200の冗長経路として設定されていた「ルーターB⇔C間の経路」が自動的に最適経路となります。

ルーターBは引き続き通信が継続できます。

このように、外部ネットワークとの冗長構成には一般にBGPが利用されます。

障害復旧

次に、「ルーターB⇔D間」の障害が復旧したらどうなるでしょうか?

結果としては、「ルーターBが受け取る最小のMED値」が再度100に戻るため、ルーターD向けの経路が自動的に最適経路に復帰します。

このように「BGPによるダイナミックルーティング」と「MED値を用いた冗長構成による経路制御」を行うことで、ネットワークの耐障害性を高めています。

隣接ASが異なる場合のMED

上図のネットワークは若干構成を変更。

4つのAS間をルーター4台によるBGPの冗長構成で接続しています。

MED値も各経路の主/副の関係性も前項と同じとなる想定で設定します。

果たして、この構成で前項と同様の経路制御が実現可能となるでしょうか?

その回答としては「No」となります。

BGPの仕様としてMEDは隣接する「単一のAS」に対して経路制御に用いるパスアトリビュートだからです。

上図の構成でルーターBは、AS64515からMED100を受け取り、AS64514からMED200を受け取ります。

このため、経路制御においてMEDは有効に機能することは無く、優先経路も冗長化できません。

BGPと言えば「MEDで経路制御するもの」思われがち。

この仕様を見落として設計しないように注意しましょう。

AS_PATHによる経路制御

それでは、隣接する「複数の異なるAS」に対する経路制御は一体どうすればいいのでしょうか?

結論としては、「AS_PATH」と「AS_PATHプリペンド機能」を使います。

これはMEDよりも優先度の高いパスアトリビュートです。

通常状態

上図の構成図における各機器のAS_PATHの設定と経路制御情報は下表となります。なお、簡略化のためにIPアドレスやその他の情報は割愛し簡略化しています。

送信元宛先宛先から受け取る
AS_PATH属性

AS_PATHプリペンド
経路の主/副
ルーターAルーターC64514なし主系
ルーターAルーターD64515 6451564515副系
ルーターBルーターD64515なし主系
ルーターBルーターC64514 6451464514副系

AS_PATHプリペンドとは、対向機器に伝達する本来のAS_PATHに対し、その経路を劣後させることを目的としてダミーのAS番号を付加する機能です。

それにより、優先経路と冗長経路の制御が可能となります。

上表で言うと、「ルーターDからルーターA宛てのAS_PATH」に対して、ルーターDが自身のAS番号をもう1つ付加しています。

これによって、「ルーターA⇔C間のAS_PATH」が1つに対して、「ルーターA⇔D間」のAS_PATHが2つで劣後するため、後者の経路が副系として冗長経路として認識されるわけです。

AS_PATHプリペンドの設定追加により、想定通りの経路制御が実現されます。

障害発生

ここで、「ルーターA⇔C間」に障害が発生したらどうなるでしょうか?

AS_PATHプリペンドにより劣後していた副系の「ルーターA⇔D間」の経路に自動で切り替わります。

障害復旧

そして障害が復旧すれば、自動で優先経路に切り戻ります。

このように隣接するASが異なる場合には、AS_PATHとAS_PATHプリペンドによる経路制御を行うことで、想定通りのネットワークトラフィックの実現が可能となります。

まとめ

この記事では、BGPの基本と具体的な経路制御についてご紹介しました。

BGPは一般的に大規模なネットワーク間の接続に使われるため、高い耐障害性が要求されます。

ネットワークの規模や利用者が増えるほど、障害等の影響は甚大なものとなるからです。

よって、冗長経路の確保と障害発生時のフェイルオーバーやフェイルバックには、細心の注意を払った設計と検証が必要となります。

特に、実務でも非常によく使われるMEDとAS_PATHによる経路制御は、十分に理解を深めて下さい。