【MED】BGPの経路制御はどう使い分けるか?【AS_PATH】
ネットワークインフラの世界でBGPは重要なプロトコル。
DNSと並んで、BGPはインターネットの根幹を成す仕組みです。
一方で、よくBGPは難しいと言われます。
書籍やネット情報だけでは、具体的な使い方がイメージしにくいのが実態。
この記事ではBGPの「MED」と「AS_PATH」による経路制御の具体的な使い分けをまとめました。
目次
BGPの経路選択の基本
優先順位 | パスアトリビュート (パス属性) |
1 | WEIGHT |
2 | LOCAL_PREF |
3 | LOCAL |
4 | AS_PATH |
5 | ORIGIN |
6 | MED |
7 | Peer Type |
8 | IGP Metric |
9 | Oldest Path |
10 | Router-ID |
BGPの経路制御における最適経路は、上記のパスアトリビュート(パス属性)の優先順位に従って決定されます。
その中でも、ネットワーク設計には「MED」と「AS_PATH」がよく使われます。
では、これら2つは一体どのように使い分けて設計するのでしょうか?
結論としては、次の様に使い分けます。
MEDは、隣接する単一のASに対する経路制御に用いる。
AS_PATHは、隣接する複数の異なるASに対する経路制御に用いる。
次からは、AS_PATHとMEDの挙動について簡易なネットワーク図を元に具体的に見ていきます。
MEDによる経路制御
通常状態
上図のネットワークは、「3つのAS間」を「ルーター4台」によるBGPルーティングの冗長構成。
なお、簡略化のためにIPアドレスその他の情報は割愛しています。
各機器の関係性は以下一覧となります。
送信元 | 宛先 | 宛先から受け取るMED値 | 経路の主/副 |
ルーターA | ルーターC | 100 | 主系 |
ルーターA | ルーターD | 200 | 副系 |
ルーターB | ルーターC | 200 | 副系 |
ルーターB | ルーターD | 100 | 主系 |
この構成に基づくと、最適経路は上図ピンク色の矢印となります。通常時は「ルーター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 | ルーターC | 64514 | なし | 主系 |
ルーターA | ルーターD | 64515 64515 | 64515 | 副系 |
ルーターB | ルーターD | 64515 | なし | 主系 |
ルーターB | ルーターC | 64514 64514 | 64514 | 副系 |
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による経路制御は、十分に理解を深めて下さい。