BGP は、同じ宛先への経路を複数受け取ると、決まった順番で属性を比べて 1 つをベストパスに選びます。この比較項目の 1 つが MED(MULTI_EXIT_DISC)ですが、MED は通常、同じ隣接 AS から受け取った経路どうしでしか比べません。この記事では、Cisco ルータの bgp always-compare-med で、隣接 AS が違う経路どうしでも MED を比べるようにしたときの動きを確認します。
bgp always-compare-medを設定する- 1 つの AS から経路を受け取ったときのベストパスを確認する
- 違う AS から受け取った経路どうしで MED が比べられることを確認する
- 同じ AS からの経路が増えたときのベストパスを確認する
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 | ネイバーのアドレスが最も小さい経路 |
ベストパス選択の流れは、次の記事で詳しく解説しています。
>> 参考: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 が違います。
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 を受け取ります。
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 30 | show ip bgp の Metric 列は MED です。R4 からの経路の MED は 30 です |
| metric 30 … best | show ip bgp 1.1.1.1 でも MED(metric)は 30 で、ベストパス(best)になっています |
R2 ともピアを張る
次に、R6 と R2 もピアを張ります。R6 は、R2 と R4 の両方から 1.1.1.1/32 を受け取って比べます。
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 を受け取ります。
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 #2 | 3 つの経路を受け取り、上から 2 番目(R2、192.168.26.2)がベストパス |
| metric 20 / 10 / 30 | R3、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 内で設定をそろえて使います。
コメント