概要

BGPではあるネットワークアドレスに対するルート情報を複数受信することがとても多くなっています。 同じネットワークアドレスに対する複数のBGPルートを受信すると、ベストパス(最適ルート)を決めて、ルーティングテーブルに登録します。また、ベストパスとなったルート情報のみを他のネイバーへアドバタイズします。

どのような順序でBGPルートのパスアトリビュートを評価して、ベストパスを決定するかについて、詳しく図解します。

BGPとIGPでのベストパス選択

あるネットワークへのルートが複数あっても、原則として、1つの最適ルート(ベストパス)のみをルーティングテーブルに登録します。これは、OSPFなどのIGPでもBGPでも同じです。

OSPFなどのIGPでは、ベストパスの選択はメトリックに基づいて行います。メトリックの算出方法はさまざまですが、結局は1つの数値です。メトリックが最小となっているルート情報をベストパスとします。

一方、BGPではベストパスの選択はパスアトリビュートに基づいて行います。BGPのルート情報に付加されているパスアトリビュートは1つだけではありません。さまざまなパスアトリビュートに基づいて、柔軟にベストパスを決められることがBGPの大きな特徴です。

図 IGPとBGPでのベストパスの決定
図 IGPとBGPでのベストパスの決定

等コストロードバランスまたは不等コストロードバランスによって、あるネットワーク宛ての複数のルートをルーティングテーブルに登録することもできます。

関連記事

OSPFなどのIGPでのメトリックについて、以下の記事も合わせてご覧ください。

BGPルートに付加されるパスアトリビュートについて、以下の記事も合わせてご覧ください。

BGPベストパス選択プロセス

前提

ベストパスを決める前に、前提として受信したBGPルート情報が有効でなければいけません。受信したBGPルートを利用するには、以下の条件を満足していなければいけません。

  • NEXT_HOPアトリビュートのIPアドレスに到達可能であること
  • 同期が有効なとき、同期の条件を満足していること

現在のCisco IOSでは、BGPの同期はデフォルトで無効です。また、同期を有効にしなければいけないようなBGPの構成を取ることはまずないので、同期についての条件は特に意識しなくても大丈夫です。1点目のNEXT_HOPアトリビュートのIPアドレスに到達可能かどうかをしっかりと確認してください。

AS_PATHによってループとみなされていないことも前提です。ただ、AS_PATHでループとみなされていると、そもそもBGPルートを破棄するのでBGPテーブルには格納されません。

ベストパス選択プロセス

同じネットワークアドレスに対する複数のBGPルートを受信したときに、以下の順序でルートに付加されているパスアトリビュートを評価して、ベストパスを決定します。

以下のプロセスの中には、パスアトリビュートによらないベストパスの決定もあります。あるプロセスでベストパスが決まったら、それ以降のプロセスは見ません。

  1. 最大のWEIGHTを持つBGPルートを優先する
  2. 最大のLOCAL_PREFを持つBGPルートを優先する
  3. ローカルで生成したBGPルートを優先する
  4. 最短のAS_PATHを持つBGPルートを優先する
  5. 最小のORIGINを持つBGPルートを優先する
  6. 最小のMEDを持つBGPルートを優先する
  7. IBGPルートよりもEBGPルートを優先する
  8. NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する
  9. EBGPルートのとき、先に受信したルートを優先する
  10. 最小のルータIDのBGPネイバーから受信したBGPルートを優先する
  11. 最小のCLUSTER_LISTを持つBGPルートを優先する
  12. 最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する

以降で、それぞれのプロセスについてもう少し詳しく見ていきます。なお、説明の都合上、それぞれの項目のアトリビュートのみに注目します。しかし、BGPルートには1つではなく、いろんなアトリビュートが付加されていることを忘れないでください。また、図中のBGPテーブルにおいて、ベストパスをCiscoの表記に合わせて「>」で表します。

ベストパスを選択するときのアトリビュートを評価する順序を暗記する必要はありません。必要なときにこのページなどを参照してください。もし、CCNPやCCIEを受験するときには暗記してください。

最大のWEIGHTを持つBGPルートを優先する

WEIGHTアトリビュートはCisco独自です。BGPルートに付加されているわけではなく、ルータローカルでWEIGTHアトリビュートを付加できます。WEIGTHを付加するような設定を行っている場合、WEIGHTアトリビュートが最大のBGPルートをベストパスとします。

図 WEIGHT
図 WEIGHT

最大のLOCAL_PREFを持つBGPルートを優先する

WEIGHTの次にLOCAL_PREFアトリビュートを見ます。LOCAL_PREFアトリビュートは、他のASのネットワークへルーティングするときの出口となるルータを決めるときに利用します。LOCAL_PREFアトリビュートが最大のBGPルートをベストパスとして決定します。

図 LOCAL_PREF
図 LOCAL_PREF

ローカルで生成したBGPルートを優先する

ローカルで生成したBGPルートとは、networkコマンドやaggregate-addressコマンドの設定によってBGPルートとして生成したものです。他のBGPネイバーから受信したBGPルートよりも、そのルータ自身で生成したBGPルートを優先します。

最短のAS_PATHを持つBGPルートを優先する

AS_PATHには、BGPルートが経由してきたAS番号がリストされています。AS_PATHの長さとは、含まれているAS番号の数です。たとえば、以下の図では、R2から受信したBGPルート192.168.1.0/24のAS_PATHの長さは「2」です。R3から受信したBGPルート192.168.1.0/24のAS_PATHの長さは「3」です。つまり、経由してきたASの数が最も少ないBGPルートを優先してベストパスとして決定します。

図 AS_PATH
図 AS_PATH

最小のORIGINを持つBGPルートを優先する

ORIGINアトリビュートには、3つの値があります。

  • 0 (IGP)
  • 1 (EGP)
  • 2 (Incomplete)

最小のORIGINアトリビュートのBGPルートがベストパスに決まります。

図 ORIGIN
図 ORIGIN

ただ、ORIGINアトリビュートでベストパスが決まることはほとんどありません。基本的にBGPルートに付加するORIGINアトリビュートは0、すなわちIGPになるからです。

普通はベストパスを決めるときにORIGINで決まるようなことはありませんが、CCIEのラボ試験では、ORIGINでベストパスにさせるような条件が出題されることもあります。

最小のMEDを持つBGPルートを優先する

MEDは、隣のASから自ASのネットワークへルーティングするときの入り口となるルータを決めるために利用するアトリビュートです。OSPFなどのIGPでのメトリックに相当するアトリビュートで、値が小さい方が優先されます。

図 MED
図 MED

なお、ここでは詳細について割愛していますが、MEDの評価にはさまざまな条件があります。

IBGPルートよりもEBGPルートを優先する

IBGPネイバーから受信したBGPルートよりもEBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

図 IBGPルートよりもEBGPルートを優先
図 IBGPルートよりもEBGPルートを優先

NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する

BGPルートがルーティングテーブルに登録されるときに、ネクストホップはNEXT_HOPアトリビュートのIPアドレスです。NEXT_HOPアトリビュートのIPアドレスは、必ずしも直接接続されているネットワークのIPアドレスとは限りません。NEXT_HOPアトリビュートのIPアドレスへルーティングするために、ルーティングテーブルを再帰的に検索することもあります。IBGPネイバーから受信したBGPルートの場合、たいてい、ルーティングテーブルの再帰検索が必要です。

再帰的にNEXT_HOPアトリビュートのIPアドレスを検索するときのIGPメトリックの値が最小となるBGPルートを優先してベストパスとして決定します。つまり、NEXT_HOPアトリビュートのIPアドレスへ最短で到達できるBGPルートを優先します。

図 NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する
図 NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する

EBGPルートのとき、先に受信したルートを優先する

EBGPネイバーから受信しているBGPルートの場合、先に受信しているルートを優先してベストパスとして決定します。

最小のルータIDのBGPネイバーから受信したBGPルートを優先する

BGPルータにも、OSPFと同じように各ルータを識別するためのルータIDがあります。ルータIDが最小のBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

図 ルータID
図 ルータID

最小のCLUSTER_LISTを持つBGPルートを優先する

CLUSTER_LISTは、ルートリフレクタを構成しているときに付加されるパスアトリビュートです。CLUSTER_LISTには、ルートリフレクタのルータIDが含まれています。CLUSTER_LISTのルータIDが最小のルートをベストパスとして決定します。

最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する

同じルータとIPアドレスを変えて複数のBGPネイバーを確立することもできます。そして、ここまでのプロセスでベストパスが決定できなかったときには、最小のIPアドレスのBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

図 最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する
図 最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する

たいていはMEDまでで決まるように

以上のようにあるネットワークアドレスについてのBGPルートを複数受信したときに、さまざまなパスアトリビュートによってベストパスを決定します。ただ、ベストパスを決めるために、こうしたプロセスの後ろの方まで評価するようなことはしません。ベストパスを決定するために、よく使うパスアトリビュートとして以下があげられます。

  • LOCAL_PREF
  • AS_PATH
  • MED

MEDまででベストパスが決まるようにパスアトリビュートを調整してください。パスアトリビュートの調整を行うために、Ciscoルータではルートマップを利用します。

関連記事

BGPの設定を考えるにあたってとても重要なルートマップについて、以下の記事もあわせてご覧ください。

まとめ

ポイント

  • BGPでは、パスアトリビュートによって柔軟にベストパスを決定できます。
  • ベストパスを決定するプロセスは以下の通りです。

  • 最大のWEIGHTを持つBGPルートを優先する
  • 最大のLOCAL_PREFを持つBGPルートを優先する
  • ローカルで生成したBGPルートを優先する
  • 最短のAS_PATHを持つBGPルートを優先する
  • 最小のORIGINを持つBGPルートを優先する
  • 最小のMEDを持つBGPルートを優先する
  • IBGPルートよりもEBGPルートを優先する
  • NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する
  • EBGPルートのとき、先に受信したルートを優先する
  • 最小のルータIDのBGPネイバーから受信したBGPルートを優先する
  • 最小のCLUSTER_LISTを持つBGPルートを優先する
  • 最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する

  • ベストパスを決定するときによく利用するパスアトリビュートは「LOCAL_PREF」「MED」「AS_PATH」です。

BGPの仕組み