ネットワーク技術

BGP4 経路選択

経路選択の決定ルーチン

同じ宛先へ複数のBGPルートが存在する場合、以下の順でルート属性を評価して最適パスを決定します。

  1. Next-Hopが不明な場合はルートを無視する。
  2. 同期していないIBGPルートは無視する。
  3. Weightが最大のルートを優先する。
  4. Local Priferenceが最大のルートを優先する。
  5. ローカルを生成元とするルートを優先する。
  6. AS_PATH属性が最短のルートを優先する。
    • bgp bestpath as-path igoreを設定している場合、このステップを無視する。
    • as-setオプションを使って集約している場合、ASエントリの数に関係なく1としてカウントされる。
    • コンフェデレーション サブAS番号はAS_PATH長の決定には使われない。
  7. Originが最小のルートを優先する。
    • IGP > EGP > Incomplete
  8. MEDが最小のルートを優先する。
    • bgp always-compare-medを設定している場合、すべてのパスのMED値を比較する。このコマンドはAS内のすべてのBGPルーターで設定する必要がある。
    • bgp bestpath med confedを設定している場合、AS-PATH属性にASコンフェデレーションシーケンスが含まれているルートについてのみ、MED値が比較される。
    • MED値のないプリフィックスを受信した場合、MED値に0が割り当てられる。
    • bgp bestpath med missing-as-worstを設定している場合、MED値のないプリフィックスに4,294,967,294が割り当てられる。
  9. IBGPよりEBGPを優先する。
  10. 最も近いIGP隣接ルータのルートを優先する。
  11. 最も古いルートを優先する。
  12. 最小ルータIDを持つルータから受信したパスを優先する。

異なるASのMED値を比較する

BGPは最適パスを決定する際、初期設定では別々のASからアドバタイズされたMED値を比較しません。別々のASからアドバタイズされたMED値を比較するためには「bgp always-compare-med」コマンドを使用します。

以下の構成で、R4はプリフィックス172.16.1.0/24をR3とR5からアドバタイズされます。R3とR5はプリフィックス172.16.1.0/24をR4へアドバタイズする際、MED値をそれぞれ200と100に設定しています。最適パスを決定するためにはMED値が最小のルートを優先しますが、R4はR3のルートを最適パスとして決定します。この理由は、異なるASからアドバタイズを受けているためMED値の比較をせず、ルータIDが小さい方を選択したためです。

R1~5は以下のように設定しています。

R4のBGPテーブルを表示させると、MED値が200にもかかわらず、AS65003経由の経路を最適パスに選択していることを確認することができます。

R3とR5のルータIDはshow ip bgp neighborsコマンドで確認することができます。

では次に、R4のBGP設定を変更し、異なるASのMED値を比較できるようにします。

R4の設定を変更後、R4のBGPテーブルを表示させMED値の比較により最適パスが選択されていることを確認します。

MED値のないプリフィックスへ自動的にMED値を付与する

BGPは学習したプリフィックスにMED値が設定されていなければMED値を0に設定します。以下の図ではR4は172.16.1.0/24をR3とR5から学習しています。R3はプリフィックス172.16.1.0/24のMED値を200に設定してR4へアドバタイズしていますが、R5はMED値を設定していません。R4は異なるASのMED値を比較するように設定しているため、MED値を比較した結果R5を最適パスに選択します。

R3,R4,R5は以下のように設定しています。

R4のBGPテーブルを表示させると、MED値を比較した結果R5を最適パスに選択していることが判ります。

次に、R4の設定を変更して、未設定のMEDが最大限のMED値となるようにします。

R4のBGPテーブルを表示させ、MED値の比較によりMED値の小さいR3が最適パスとして選択されていることを確認します。

最適パスの選択時にAS_PATH属性を無視する

以下の図で、R4はプリフィックス172.16.31.0/24をR3とR5から学習しています。R4はAS_PATH属性が最短のR5経由のルートを最適ルートに決定します。

R3,R4,R5は以下ように設定しています。

R4のBGPテーブルを表示させ、最適パスを確認します。AS_PATH属性が最短の経路を選択していることが判ります。

最適パスの選択時にAS_PATH属性を無視させると、ルータIDが小さい方を最適パスに選択します。そこで、AS_PATH属性を無視する設定を入れる前に、R3とR5のルータIDを表示させてR5よりR3のルータIDが小さいことを確認します。

次に、R4のBGP設定を変更し、最適パスが変化することを確認します。

BGPテーブルを表示させ、AS_PATH属性を無視して最適パスが変わったことを確認します。

コンフェデレーション内のMED比較

以下の図の構成で、R2はR1とR3からプリフィックス172.16.1.0/24のアドバタイズを受信しています。そして、ルータIDを比較し、R1がR3よりも小さなルータIDであるためR1の経路を最適パスに決定します。

R1,R2,R3は以下のように設定しています。

R2のBGPテーブルを表示させ、R1を最適パスに選択していることを確認します。

R2のBGPテーブルを表示させ、R1を最適パスに選択していることを確認します。

次に、R1の設定を変更し、MED値を200に設定してR2へアドバタイズさせます。R2は異なるASから学習したMED値を比較しないため、最適パスは変化しないはずです。

R2のBGPテーブルを表示させ、最適パスの選択が変化しないことを確認します。

この時点ではMED値が最適パスの決定に使われていないことを確認することができました。次に、R2の設定を変更して、異なるASのMED値を比較するようにします。

R2のBGPテーブルを表示させ、MEDを比較して最適パスの決定がされたことを確認します。