【BGP】ベストパス選定(異なるASからのルートはMEDを比較しない)

 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の比較を行い、MEDが小さい方をベストパスに選定します。ただし、これは、同一ASからのルートにだけ、MEDの比較が行われます。異なるASからのルートに関しては、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を比較するbgp always-compare-medコマンドがあります。

その他 BGP関連記事は   >>  ルーティングプロトコル(BGP)まとめ << より参照できます。

コメント