BGP (Border Gateway Protocol) のベストパス選定プロセスは、最適なルートを選択するための一連のルールに基づいています。その中でも、MED (Multi-Exit Discriminator) は同一のAS (Autonomous System) からのルート比較にのみ用いられ、異なるASからのルート間では無視されるという特徴があります。本記事では、BGPのベストパス選定におけるMEDの扱いについて具体的な設定例を交えながら解説します。
BGPのベストパス選定の優先順位
BGPのベストパス選定は、以下の優先順位で行われます。
- Weightが最も大きい方を優先
- Local Preferenceが最も大きい方を優先
- ローカルで生成されたプレフィックスを優先
- AS-PATHの最も短い方が優先
- Originが最も小さい方が優先(IGP < Incomplete)
- MEDが最も小さい方が優先
- 内部BGPパスよりも外部BGPパスを優先
- NEXT-HOP IPアドレスに到達するIGPメトリックが最小のパスを優先
- 先に受信したeBGP経路を優先
- 最小のBGPルーターIDを持つルーターから発信されたパスを優先
- BGPピアのIPアドレスが最小のルートを優先
Ciscoでは、 ここで、6番目の優先順位で登場するMEDは、同一ASから受信したルート間でのみ比較されます。異なるASからのルートについては、デフォルトではMEDの比較は行われません。この点がMEDの重要な特徴です。
構成例で見るMEDの動作
このMED比較の動作がベストパス選定にどのような影響があるのか確認していきます。 以下の構成で、R2、R3、R4からぞれぞれ同一のBGPルート(1.1.1.1)をMED値を付与して広告します。
まず、R6を設定します。
R6(config)# router bgp 6 R6(config-router)# bgp router-id 6.6.6.6 R6(config-router)# neighbor 192.168.26.2 remote-as 23 R6(config-router)# neighbor 192.168.36.3 remote-as 23 R6(config-router)# neighbor 192.168.46.4 remote-as 4
次に、R6とR4間をBGPピアリングします。
R4(config)# interface Loopback0 R4(config-if)# ip address 1.1.1.1 255.255.255.255 R4(config-if)#! R4(config-if)# router bgp 4 R4(config-router)# bgp router-id 4.4.4.4 R4(config-router)# network 1.1.1.1 mask 255.255.255.255 R4(config-router)# neighbor 192.168.46.6 remote-as 6 R4(config-router)# neighbor 192.168.46.6 route-map MED30 out R4(config-router)#! R4(config-router)# route-map MED30 permit 10 R4(config-route-map)# set metric 30
R6のBGPテーブルを見ると、R4からBGPルート(1.1.1.1/32)をMED値30として受信し,ベストパスとして認識しています。
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
次に、R2とBGPピアリングします。
R2(config)# interface Loopback0 R2(config-if)# ip address 1.1.1.1 255.255.255.255 R2(config-if)#! R2(config-if)# router bgp 23 R2(config-router)# bgp router-id 2.2.2.2 R2(config-router)# network 1.1.1.1 mask 255.255.255.255 R2(config-router)# neighbor 192.168.26.6 remote-as 6 R2(config-router)# neighbor 192.168.26.6 route-map MED10 out R2(config-router)#! R2(config-router)# route-map MED10 permit 10 R2(config-route-map)# set metric 10 R2(config-route-map)#!
R6のBGPテーブルを見ると、R4への経路がベストパスとなっています。
R2からのルート(MED値10)はR4からのルート(MED値30)より小さいですが、R2とR4でASが異なるため、MEDの比較はされません。
結局、MED比較は無視され、9 先に受信したeBGP経路を優先 を採用し、R4がベストパスになります。
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.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 4 Paths: (2 available, best #2, 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 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
最後にR3とBGPピアリングします。
R3(config)# interface Loopback0 R3(config-if)# ip address 1.1.1.1 255.255.255.255 R3(config-if)#! R3(config-if)# router bgp 23 R3(config-router)# bgp router-id 3.3.3.3 R3(config-router)# network 1.1.1.1 mask 255.255.255.255 R3(config-router)# neighbor 192.168.36.6 remote-as 6 R3(config-router)# neighbor 192.168.36.6 route-map MED20 out R3(config-router)#! R3(config-router)# route-map MED20 permit 10 R3(config-route-map)# set metric 20
R6のBGPテーブルを確認します。すると、まだ、R4へのパスがベストパスとして認識されます。R3からBGPルート(1.1.1.1/32)を受信した際に、現在のベストパス(R4のパス)とR3からのパスを比較します。(R2は元々ベストパスでなかったので、比較対象になりません)
R3からのMED値は20とR4からのMED値30より小さいですが、これも、R3とR4でASが異なるため、MEDの比較は無視されます。つまり、9 先に受信したeBGP経路を優先 を採用し、R4がベストパスになります。
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.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 4 Paths: (3 available, best #3, 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 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
以上がIOSでのデフォルトの動作です。
異なるAS間でのMED比較を有効にする方法
デフォルト動作を変更し、異なるASからのルートでもMEDを比較する場合、次のコマンドを使用します。
R6(config-router)# bgp always-compare-med
この設定により、R6は異なるAS間でもMEDを比較し、より小さなMED値を持つルートを優先します。
デフォルト動作を変更するために、異なるASからのルートでもMEDを比較するbgp always-compare-medコマンドがあります。
まとめ
BGPのベストパス選定において、MEDは同一AS内でのみ適用されるのがデフォルトの動作です。異なるASからのルートに関してMEDの比較を行いたい場合は、bgp always-compare-med コマンドで調整可能です。
その他 BGP関連記事は >> ルーティングプロトコル(BGP)まとめ << より参照できます。
コメント