BGP で同じ宛先への eBGP 経路を複数受け取り、属性がすべて同じだった場合、Cisco ルータは既定で「先に受信した経路」をベストパスにします。この記事では、bgp bestpath compare-routerid を設定して、ルータ ID の小さい方をベストパスにする動きを確認します。
- 既定の動作(先に受信した eBGP 経路が優先される)を確認する
bgp bestpath compare-routeridを設定する- ルータ ID の小さい経路がベストパスになることを確認する
BGP のベストパス選択の優先順位
Cisco ルータの BGP は、次の順番で経路を比べ、差がついた時点でベストパスを決めます。
| 順番 | 優先する経路 |
|---|---|
| 1 | Weight が最も大きい |
| 2 | Local Preference が最も大きい |
| 3 | 自分で生成した(network、aggregate-address、再配布) |
| 4 | AS_PATH が最も短い |
| 5 | Origin が最も小さい(IGP < EGP < Incomplete) |
| 6 | MED が最も小さい(通常は、隣接 AS が同じ経路どうしでだけ比べる) |
| 7 | iBGP より eBGP |
| 8 | ネクストホップまでの IGP メトリックが最も小さい |
| 9 | (BGP マルチパスが有効なら、複数の経路をルーティングテーブルに入れるか判断する) |
| 10 | どちらも eBGP なら、先に受信した(古い)経路 |
| 11 | BGP ルータ ID が最も小さいルータからの経路 |
| 12 | クラスタリストが最も短い経路 |
| 13 | ネイバーのアドレスが最も小さい経路 |
eBGP の経路で 9 番目までに差がつかないとき、Cisco ルータは既定で 10 番目の「先に受信した経路」で決めます。新しい経路が来るたびにベストパスが入れ替わる(ルートフラップ)のを抑えるためです。
iBGP の経路には 10 番目は使われず、11 番目のルータ ID で決まります。
bgp bestpath compare-routerid を設定すると、10 番目の「先に受信した経路」を飛ばし、eBGP の経路でも 11 番目のルータ ID 以降で比べるようになります。受け取った順番に関係なく、毎回同じ経路が選ばれるようになります。
ベストパス選択について理解を深めるには、次の記事を先に読むのがおすすめです。
>> 参考:【BGP】ベストパス選定(PART1 アルゴリズム)
>> 参考:【BGP】ベストパス選定(PART2 動作確認)
検証構成
次の構成で検証します。AS 23 の R2 と R3 から同じ経路(23.23.23.23/32)を広告し、R6 が R2 と R3 のどちらをベストパスに選ぶかを見ていきます。R2 のルータ ID は 2.2.2.2、R3 は 3.3.3.3 です。
R2
R2(config)# router bgp 23 R2(config-router)# bgp router-id 2.2.2.2 R2(config-router)# network 23.23.23.23 mask 255.255.255.255 R2(config-router)# neighbor 192.168.26.6 remote-as 6
R3
R3(config)# router bgp 23 R3(config-router)# bgp router-id 3.3.3.3 R3(config-router)# network 23.23.23.23 mask 255.255.255.255 R3(config-router)# neighbor 192.168.36.6 remote-as 6
R6
R6(config)# router bgp 6 R6(config-router)# neighbor 192.168.26.2 remote-as 23 R6(config-router)# neighbor 192.168.36.3 remote-as 23
既定の動作の確認
先に受信した経路が選ばれる
R6 の BGP テーブルを確認します。R2 と R3 から受け取った eBGP 経路は、AS_PATH も MED も同じで、9 番目までに差がつきません。最後のタイブレーク(10 番目)で、R3 の経路がベストパスになっています。検証では、R3 の経路を R2 より先に受信していました。
R6
R6# show ip bgp
BGP table version is 2, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 23.23.23.23/32 192.168.36.3 0 0 23 i
* 192.168.26.2 0 0 23 I
R6# show ip bgp 23.23.23.23
BGP routing table entry for 23.23.23.23/32, version 2
Paths: (2 available, best #1, table default)
Advertised to update-groups:
7
Refresh Epoch 1
23
192.168.36.3 from 192.168.36.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, external, best
Refresh Epoch 1
23
192.168.26.2 from 192.168.26.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external
ルータ ID によるベストパスの選択
bgp bestpath compare-routerid を設定する
ルータ ID でベストパスを選ぶようにするには、R6 に次のように設定します。
R6
R6(config)# router bgp 6
R6(config-router)# bgp bestpath compare-routerid
BGP セッションをクリアします。
R6
R6# clear ip bgp * R6# %BGP-5-ADJCHANGE: neighbor 192.168.26.2 Down User reset %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.26.2 IPv4 Unicast topology base removed from session User reset %BGP-5-ADJCHANGE: neighbor 192.168.36.3 Down User reset %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.36.3 IPv4 Unicast topology base removed from session User reset %BGP-5-ADJCHANGE: neighbor 192.168.36.3 Up %BGP-5-ADJCHANGE: neighbor 192.168.26.2 Up
ルータ ID の小さい経路が選ばれる
R6 の BGP テーブルを確認します。R2 のルータ ID(2.2.2.2)が R3 のルータ ID(3.3.3.3)より小さいため、R2 の経路がベストパスになっています。show ip bgp 23.23.23.23 には、設定が効いていることを示す「BGP Bestpath: compare-routerid」が表示されます。
R6
R6# show ip bgp
BGP table version is 3, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 23.23.23.23/32 192.168.26.2 0 0 23 i
* 192.168.36.3 0 0 23 i
R6# show ip bgp 23.23.23.23
BGP routing table entry for 23.23.23.23/32, version 3
BGP Bestpath: compare-routerid
Paths: (2 available, best #1, table default)
Advertised to update-groups:
8
Refresh Epoch 1
23
192.168.26.2 from 192.168.26.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external, best
Refresh Epoch 1
23
192.168.36.3 from 192.168.36.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, external
| 表示 | 意味 |
|---|---|
| BGP Bestpath: compare-routerid | bgp bestpath compare-routerid が有効 |
| from 192.168.26.2 (2.2.2.2) | 経路を送ってきたネイバーのアドレスと、そのルータ ID |
この記事では検証のため clear ip bgp *(ハードリセット)でセッションを張り直していますが、運用中のネットワークでは通信が止まるので注意してください。経路の比較を 10 番目で決めている状態は、受け取った順番で結果が変わります。冗長構成で毎回同じ経路を選ばせたいときに、bgp bestpath compare-routerid が役立ちます。
まとめ
| 設定 | 属性が同じ eBGP 経路の決め方 | この構成でのベストパス |
|---|---|---|
| なし(既定) | 先に受信した経路 | R3(先に受信) |
bgp bestpath compare-routerid | ルータ ID が小さい経路 | R2(2.2.2.2) |
コメント