【BGP】ベストパス選定(bgp bestpath compare-routerid )

BGP で同じ宛先への eBGP 経路を複数受け取り、属性がすべて同じだった場合、Cisco ルータは既定で「先に受信した経路」をベストパスにします。この記事では、bgp bestpath compare-routerid を設定して、ルータ ID の小さい方をベストパスにする動きを確認します。

この記事でわかること
  1. 既定の動作(先に受信した eBGP 経路が優先される)を確認する
  2. bgp bestpath compare-routerid を設定する
  3. ルータ ID の小さい経路がベストパスになることを確認する

BGP のベストパス選択の優先順位

Cisco ルータの BGP は、次の順番で経路を比べ、差がついた時点でベストパスを決めます。

順番優先する経路
1Weight が最も大きい
2Local Preference が最も大きい
3自分で生成した(network、aggregate-address、再配布)
4AS_PATH が最も短い
5Origin が最も小さい(IGP < EGP < Incomplete)
6MED が最も小さい(通常は、隣接 AS が同じ経路どうしでだけ比べる)
7iBGP より eBGP
8ネクストホップまでの IGP メトリックが最も小さい
9(BGP マルチパスが有効なら、複数の経路をルーティングテーブルに入れるか判断する)
10どちらも eBGP なら、先に受信した(古い)経路
11BGP ルータ 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 です。

AS 23 AS 6 R2 ID 2.2.2.2 23.23.23.23/32 .2 192.168.26.0/24 R3 ID 3.3.3.3 23.23.23.23/32 .3 192.168.36.0/24 R6 .6
図1 検証構成

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-routeridbgp bestpath compare-routerid が有効
from 192.168.26.2 (2.2.2.2)経路を送ってきたネイバーのアドレスと、そのルータ ID
1〜9 の比較すべて同じ 10. 先に受信した経路既定の動作 11. ルータ ID が小さいcompare-routerid で 10 を飛ばす R3 がベストパス先に受信していた経路 R2 がベストパス2.2.2.2 < 3.3.3.3 両方とも eBGP の経路で、それより前の比較項目では差がつかない場合
図2 既定の動作と compare-routerid の違い
補足

この記事では検証のため clear ip bgp *(ハードリセット)でセッションを張り直していますが、運用中のネットワークでは通信が止まるので注意してください。経路の比較を 10 番目で決めている状態は、受け取った順番で結果が変わります。冗長構成で毎回同じ経路を選ばせたいときに、bgp bestpath compare-routerid が役立ちます。

まとめ

設定属性が同じ eBGP 経路の決め方この構成でのベストパス
なし(既定)先に受信した経路R3(先に受信)
bgp bestpath compare-routeridルータ ID が小さい経路R2(2.2.2.2)

コメント