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

BGP (Border Gateway Protocol) のベストパス選定プロセスは、最適なルートを選択するための一連のルールに基づいています。その中でも、MED (Multi-Exit Discriminator) は同一のAS (Autonomous System) からのルート比較にのみ用いられ、異なるASからのルート間では無視されるという特徴があります。本記事では、BGPのベストパス選定におけるMEDの扱いについて具体的な設定例を交えながら解説します。

スポンサーリンク

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

 BGPのベストパス選定は、以下の優先順位で行われます。

  1. Weightが最も大きい方を優先
  2. Local Preferenceが最も大きい方を優先
  3. ローカルで生成されたプレフィックスを優先
  4. AS-PATHの最も短い方が優先
  5. Originが最も小さい方が優先(IGP < Incomplete)
  6. MEDが最も小さい方が優先
  7. 内部BGPパスよりも外部BGPパスを優先
  8. NEXT-HOP IPアドレスに到達するIGPメトリックが最小のパスを優先
  9. 先に受信したeBGP経路を優先
  10. 最小のBGPルーターIDを持つルーターから発信されたパスを優先
  11. 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)まとめ << より参照できます。

コメント