BGPのベストパス選定:bgp always-compare-medの活用方法

BGP は、同じ宛先への経路を複数受け取ると、決まった順番で属性を比べて 1 つをベストパスに選びます。この比較項目の 1 つが MED(MULTI_EXIT_DISC)ですが、MED は通常、同じ隣接 AS から受け取った経路どうしでしか比べません。この記事では、Cisco ルータの bgp always-compare-med で、隣接 AS が違う経路どうしでも MED を比べるようにしたときの動きを確認します。

この記事でわかること
  1. bgp always-compare-med を設定する
  2. 1 つの AS から経路を受け取ったときのベストパスを確認する
  3. 違う AS から受け取った経路どうしで MED が比べられることを確認する
  4. 同じ AS からの経路が増えたときのベストパスを確認する

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ネイバーのアドレスが最も小さい経路

ベストパス選択の流れは、次の記事で詳しく解説しています。

>> 参考:BGP ベストパス選択アルゴリズムの記事

BGP における MED の役割

MED は、ある AS が隣の AS に対して「この入口から入ってきてほしい」と伝えるための属性です。値が小さいほど優先されます。

ただし、MED の値の付け方は AS ごとに違うため、BGP は通常、AS_PATH の先頭の AS(隣接 AS)が同じ経路どうしでしか MED を比べません。隣接 AS が違う経路では MED を飛ばし、次の比較項目に進みます。

bgp always-compare-med の役割

bgp always-compare-med を設定すると、隣接 AS が違う経路どうしでも MED を比べるようになります。たとえば、複数の AS から同じ経路を受け取る構成で、MED を使ってトラフィックの経路を選びたいときに使います。

注意

Cisco は、この設定を AS 内のルータでそろえないとルーティングループが起きることがあるとしています。設定するときは、同じ AS のすべての BGP ルータで有効・無効をそろえてください。

bgp always-compare-med の設定例

構成と設定は、次の記事のものを使います。BGP の基本設定は省略します。

>> 参考:BGPベストパス選定におけるMEDの動作と設定方法

R6(AS 6)は、R4(AS 4)、R2(AS 23)、R3(AS 23)から、同じ 1.1.1.1/32 を受け取ります。MED は R4 が 30、R2 が 10、R3 が 20 です。R2 と R3 は同じ AS 23 で、R4 だけ AS が違います。

AS 4 AS 23 AS 6 R4 1.1.1.1/32 .4 192.168.46.0/24 MED 30 R2 1.1.1.1/32 .2 192.168.26.0/24 MED 10 R3 1.1.1.1/32 .3 192.168.36.0/24 MED 20 R6
図1 検証構成(R6 側のアドレスはすべて .6)

bgp always-compare-med を設定する

R6 に bgp always-compare-med を設定します。

R6

R6(config)# router bgp 6
R6(config-router)# bgp always-compare-med

R4 とピアを張る

まず、R6 と R4 だけでピアを張ります。R6 は R4 から 1.1.1.1/32 を受け取ります。

AS 4 AS 6 R4 1.1.1.1/32 .4 192.168.46.0/24 MED 30 R6
図2 R4 から経路を受け取る

R6 の BGP テーブルを確認すると、R4 からの 1.1.1.1/32 を受信し、ベストパスに選んでいます。経路は 1 つしかないので、比較はありません。

R6

R6# show ip bgp
BGP table version is 4, 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
 *>  1.1.1.1/32       192.168.46.4            30             0 4 I

R6# show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 4
Paths: (1 available, best #1, table default)
  Advertised to update-groups:
     2         
  Refresh Epoch 1
  4
    192.168.46.4 from 192.168.46.4 (4.4.4.4)
      Origin IGP, metric 30, localpref 100, valid, external, best
表示意味
Metric 30show ip bgp の Metric 列は MED です。R4 からの経路の MED は 30 です
metric 30 … bestshow ip bgp 1.1.1.1 でも MED(metric)は 30 で、ベストパス(best)になっています

R2 ともピアを張る

次に、R6 と R2 もピアを張ります。R6 は、R2 と R4 の両方から 1.1.1.1/32 を受け取って比べます。

AS 4 AS 23 AS 6 R4 1.1.1.1/32 .4 192.168.46.0/24 MED 30 R2 1.1.1.1/32 .2 192.168.26.0/24 MED 10 R6
図3 R4 と R2 から経路を受け取る

R2 の経路の AS_PATH は「23」、R4 の経路は「4」で、隣接 AS が違います。通常なら MED は比べずに次の比較項目に進みますが、bgp always-compare-med を設定しているので、MED を比べます。R2 の MED 10 は R4 の MED 30 より小さいので、R2 からの経路がベストパスになります。

R6

R6#show ip bgp
BGP table version is 5, 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
 *>  1.1.1.1/32       192.168.26.2            10             0 23 i
 *                    192.168.46.4            30             0 4 I

R6#show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 5
Paths: (2 available, best #1, table default)
  Advertised to update-groups:
     2         
  Refresh Epoch 1
  23
    192.168.26.2 from 192.168.26.2 (2.2.2.2)
      Origin IGP, metric 10, localpref 100, valid, external, best
  Refresh Epoch 1
  4
    192.168.46.4 from 192.168.46.4 (4.4.4.4)
      Origin IGP, metric 30, localpref 100, valid, external

R2 からの経路(ネクストホップ 192.168.26.2)に > と best が付き、ベストパスに選ばれていることがわかります。

R3 ともピアを張る

最後に、R6 と R3 もピアを張ります。これで R6 は、AS 23 の R2 と R3、AS 4 の R4 の 3 台から、同じ 1.1.1.1/32 を受け取ります。

AS 4 AS 23 AS 6 R4 1.1.1.1/32 .4 192.168.46.0/24 MED 30 R2 1.1.1.1/32 .2 192.168.26.0/24 MED 10 R3 1.1.1.1/32 .3 192.168.36.0/24 MED 20 R6
図4 3 台から経路を受け取る

R3 の MED は 20 です。R2 と R3 は同じ AS 23 なので、この 2 つは bgp always-compare-med がなくても MED を比べます。3 つの経路の中で MED が最も小さいのは R2 の 10 なので、R2 の経路がベストパスのままです。

R6

R6# show ip bgp 
BGP table version is 5, 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
 *   1.1.1.1/32       192.168.36.3            20             0 23 i
 *>                   192.168.26.2            10             0 23 i
 *                    192.168.46.4            30             0 4 I

R6# show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 5
Paths: (3 available, best #2, table default)
  Advertised to update-groups:
     2         
  Refresh Epoch 1
  23
    192.168.36.3 from 192.168.36.3 (3.3.3.3)
      Origin IGP, metric 20, localpref 100, valid, external
  Refresh Epoch 1
  23
    192.168.26.2 from 192.168.26.2 (2.2.2.2)
      Origin IGP, metric 10, localpref 100, valid, external, best
  Refresh Epoch 1
  4
    192.168.46.4 from 192.168.46.4 (4.4.4.4)
      Origin IGP, metric 30, localpref 100, valid, external
表示意味
3 available, best #23 つの経路を受け取り、上から 2 番目(R2、192.168.26.2)がベストパス
metric 20 / 10 / 30R3、R2、R4 の経路の MED

実務での注意点

  • MED の付け方は AS ごとに違います。違う AS の MED を比べると、値が小さくても最適な経路とは限りません。同じ AS の MED は方針がそろっていることが多いので比べる意味がありますが、違う AS どうしでは各 AS の方針を確かめてから使ってください。
  • 設定は AS 内のすべての BGP ルータでそろえます。そろっていないとルーティングループが起きることがあります。
  • ベストパスが変わるとトラフィックの流れも変わるので、適用前に検証環境で動きを確かめてください。

まとめ

設定MED を比べる経路この構成でのベストパス(3 台からの受信時)
なし(既定)隣接 AS が同じ経路どうしだけAS 23 の中では R2(MED 10)。AS 4 の R4 とは MED を比べない
bgp always-compare-med隣接 AS に関係なく、すべての経路R2(MED 10)

bgp always-compare-med は、違う AS から受け取った経路どうしでも MED でベストパスを選ぶためのコマンドです。複数の AS とつながる構成で役立ちますが、各 AS の MED の方針を確かめ、AS 内で設定をそろえて使います。

コメント