目次
概要
BGPではあるネットワークアドレスに対するルート情報を複数受信することがとても多くなっています。 同じネットワークアドレスに対する複数のBGPルートを受信すると、ベストパス(最適ルート)を決めて、ルーティングテーブルに登録します。また、ベストパスとなったルート情報のみを他のネイバーへアドバタイズします。
どのような順序でBGPルートのパスアトリビュートを評価して、ベストパスを決定するかについて、詳しく図解します。
BGPとIGPでのベストパス選択
あるネットワークへのルートが複数あっても、原則として、1つの最適ルート(ベストパス)のみをルーティングテーブルに登録します。これは、OSPFなどのIGPでもBGPでも同じです。
OSPFなどのIGPでは、ベストパスの選択はメトリックに基づいて行います。メトリックの算出方法はさまざまですが、結局は1つの数値です。メトリックが最小となっているルート情報をベストパスとします。
一方、BGPではベストパスの選択はパスアトリビュートに基づいて行います。BGPのルート情報に付加されているパスアトリビュートは1つだけではありません。さまざまなパスアトリビュートに基づいて、柔軟にベストパスを決められることが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ルートを受信したときに、以下の順序でルートに付加されているパスアトリビュートを評価して、ベストパスを決定します。
以下のプロセスの中には、パスアトリビュートによらないベストパスの決定もあります。あるプロセスでベストパスが決まったら、それ以降のプロセスは見ません。
- 最大の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ルートを優先する
以降で、それぞれのプロセスについてもう少し詳しく見ていきます。なお、説明の都合上、それぞれの項目のアトリビュートのみに注目します。しかし、BGPルートには1つではなく、いろんなアトリビュートが付加されていることを忘れないでください。また、図中のBGPテーブルにおいて、ベストパスをCiscoの表記に合わせて「>」で表します。
ベストパスを選択するときのアトリビュートを評価する順序を暗記する必要はありません。必要なときにこのページなどを参照してください。もし、CCNPやCCIEを受験するときには暗記してください。
最大のWEIGHTを持つBGPルートを優先する
WEIGHTアトリビュートはCisco独自です。BGPルートに付加されているわけではなく、ルータローカルでWEIGTHアトリビュートを付加できます。WEIGTHを付加するような設定を行っている場合、WEIGHTアトリビュートが最大のBGPルートをベストパスとします。
最大のLOCAL_PREFを持つBGPルートを優先する
WEIGHTの次にLOCAL_PREFアトリビュートを見ます。LOCAL_PREFアトリビュートは、他のASのネットワークへルーティングするときの出口となるルータを決めるときに利用します。LOCAL_PREFアトリビュートが最大のBGPルートをベストパスとして決定します。
関連記事
ローカルで生成したBGPルートを優先する
ローカルで生成したBGPルートとは、networkコマンドやaggregate-addressコマンドの設定によってBGPルートとして生成したものです。他のBGPネイバーから受信したBGPルートよりも、そのルータ自身で生成したBGPルートを優先します。
関連記事
Cisco IOSにおいてローカルで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ルートを優先してベストパスとして決定します。
最小のORIGINを持つBGPルートを優先する
ORIGINアトリビュートには、3つの値があります。
- 0 (IGP)
- 1 (EGP)
- 2 (Incomplete)
最小のORIGINアトリビュートのBGPルートがベストパスに決まります。
ただ、ORIGINアトリビュートでベストパスが決まることはほとんどありません。基本的にBGPルートに付加するORIGINアトリビュートは0、すなわちIGPになるからです。
普通はベストパスを決めるときにORIGINで決まるようなことはありませんが、CCIEのラボ試験では、ORIGINでベストパスにさせるような条件が出題されることもあります。
最小のMEDを持つBGPルートを優先する
MEDは、隣のASから自ASのネットワークへルーティングするときの入り口となるルータを決めるために利用するアトリビュートです。OSPFなどのIGPでのメトリックに相当するアトリビュートで、値が小さい方が優先されます。
なお、ここでは詳細について割愛していますが、MEDの評価にはさまざまな条件があります。
関連記事
IBGPルートよりもEBGPルートを優先する
IBGPネイバーから受信したBGPルートよりもEBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。
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ルートを優先します。
EBGPルートのとき、先に受信したルートを優先する
EBGPネイバーから受信しているBGPルートの場合、先に受信しているルートを優先してベストパスとして決定します。
最小のルータIDのBGPネイバーから受信したBGPルートを優先する
BGPルータにも、OSPFと同じように各ルータを識別するためのルータIDがあります。ルータIDが最小のBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。
最小のCLUSTER_LISTを持つBGPルートを優先する
CLUSTER_LISTは、ルートリフレクタを構成しているときに付加されるパスアトリビュートです。CLUSTER_LISTには、ルートリフレクタのルータIDが含まれています。CLUSTER_LISTのルータIDが最小のルートをベストパスとして決定します。
最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する
同じルータとIPアドレスを変えて複数の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の仕組み
- BGPの概要 ~AS間でルート情報を交換~
- BGPの動作
- BGPの基本設定と確認コマンド
- BGPピアグループ(Peer Group) ~ネイバーの設定をまとめよう~
- BGPネイバーの状態
- BGPコンフェデレーションの設定
- BGPコンフェデレーションの設定例
- BGPネイバー認証
- BGP Well Known Mandatory アトリビュート -ORIGIN/AS_PATH/NEXT_HOP-
- 図解!BGPベストパス選択アルゴリズム
- BGP 基本的な設定についての演習[Cisco]
- BGPの基本的な設定についての演習 ~トラブルシュート~
- BGP KEEPALIVEタイマ/ホールドタイムの設定
- BGPルート 最小送信間隔の設定
- BGPルートダンプニング
- マルチホーム – インターネット接続の冗長化 –
- マルチホームAS BGPルートフィルタのポイント
- マルチホームAS ベストパス選択のポイント
- マルチホームAS IGPとBGPの連携のポイント
- マルチホームAS BGPの設定例
- IP-VPNでのBGPの利用 設定例
- BGPルートフィルタの種類
- BGPルートフィルタ -ディストリビュートリスト-
- BGPルートフィルタ -ディストリビュートリスト設定例-
- BGPルートフィルタ -プレフィクスリスト-
- BGPルートフィルタ -プレフィクスリスト設定例-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)設定例-
- BGPルートフィルタ -ルートマップ(route-map)-
- BGPルートフィルタ -ルートマップ(route-map)設定例-
- BGP neighbor allowas-inコマンド
- BGP neighbor as-overrideコマンド
- BGPルート RIB Failure
- BGPルート アドミニストレイティブディスタンスの制御
- BGPルートの負荷分散
- BGPルート 条件付き生成
- BGPルート 条件付きアドバタイズ
- BGP ルート集約 自動集約
- BGPルート集約 networkコマンドによる集約
- BGPルート集約 networkコマンドによる集約 設定例
- BGP ルート集約 aggregate-addressコマンドによる集約
- aggregate-addressコマンドのオプション summary-only
- aggregate-addressコマンドのオプション attribute-map
- aggregate-addressコマンドのオプション as-set
- aggregate-addressコマンドのオプション advertise-map
- aggregate-addressコマンド as-set/attribute-map/advertise-map 設定例
- BGP選択型集約の概要
- BGP選択型集約 suppress-map
- BGP選択型集約 unsuppress-map
- BGP 選択型集約 suppress-map/unsuppress-map 設定例
- BGP local-as ~ネイバーに他のASのように見せる~
- BGP neighbor remove-private-ASコマンド
- bgp fast external-fallover
- BGP プレフィクス数の制限
- BGP COMMUNITYアトリビュートの使い方
- BGP Well-known COMMUNITYのルートフィルタ設定例
- BGP プライベートCOMMUNITYによるルート制御の設定例
- [演習]BGP応用 Part1:BGP基本設定
- [演習]BGP応用 Part2:ルート集約
- [演習]BGP応用 Part3:ポリシーベースルーティング
- [演習]BGP応用 Part4:トラブルシューティング
- BGP 設定ミスの切り分けと修正 Part1
- BGP 設定ミスの切り分けと修正 Part2
- BGP 設定ミスの切り分けと修正 Part3
- BGP 設定ミスの切り分けと修正 Part4
- BGP 設定ミスの切り分けと修正 Part5
- BGP 設定ミスの切り分けと修正 Part6
- BGP 設定ミスの切り分けと修正 Part7
- IPv6 BGPの設定例 Part1
- IPv6 BGPの設定例 Part2
- 2021年10月4日 Facebookに何が起こったか?
- IPv4 BGPネイバーでのIPv6プレフィックスの交換