本サイトはプロモーションを含みます。

BGP4 経路選択

経路選択の決定ルーチン

同じ宛先へ複数のBGPルートが存在する場合、以下の順でルート属性を評価して最適パスを決定します。

  1. Next-Hopが不明な場合はルートを無視する。
  2. 同期していないIBGPルートは無視する。
  3. Weightが最大のルートを優先する。
  4. Local Priferenceが最大のルートを優先する。
  5. ローカルを生成元とするルートを優先する。
  6. AS_PATH属性が最短のルートを優先する。
    • bgp bestpath as-path igoreを設定している場合、このステップを無視する。
    • as-setオプションを使って集約している場合、ASエントリの数に関係なく1としてカウントされる。
    • コンフェデレーション サブAS番号はAS_PATH長の決定には使われない。
  7. Originが最小のルートを優先する。
    • IGP > EGP > Incomplete
  8. MEDが最小のルートを優先する。
    • bgp always-compare-medを設定している場合、すべてのパスのMED値を比較する。このコマンドはAS内のすべてのBGPルーターで設定する必要がある。
    • bgp bestpath med confedを設定している場合、AS-PATH属性にASコンフェデレーションシーケンスが含まれているルートについてのみ、MED値が比較される。
    • MED値のないプリフィックスを受信した場合、MED値に0が割り当てられる。
    • bgp bestpath med missing-as-worstを設定している場合、MED値のないプリフィックスに4,294,967,294が割り当てられる。
  9. IBGPよりEBGPを優先する。
  10. 最も近いIGP隣接ルータのルートを優先する。
  11. 最も古いルートを優先する。
  12. 最小ルータIDを持つルータから受信したパスを優先する。

異なるASのMED値を比較する

BGPは最適パスを決定する際、初期設定では別々のASからアドバタイズされたMED値を比較しません。別々のASからアドバタイズされたMED値を比較するためには「bgp always-compare-med」コマンドを使用します。

以下の構成で、R4はプリフィックス172.16.1.0/24をR3とR5からアドバタイズされます。R3とR5はプリフィックス172.16.1.0/24をR4へアドバタイズする際、MED値をそれぞれ200と100に設定しています。最適パスを決定するためにはMED値が最小のルートを優先しますが、R4はR3のルートを最適パスとして決定します。この理由は、異なるASからアドバタイズを受けているためMED値の比較をせず、ルータIDが小さい方を選択したためです。

R1~5は以下のように設定しています。

!!! R1 !!!

router bgp 65001
 no synchronization
 bgp log-neighbor-changes
 network 172.16.1.0 mask 255.255.255.0
 neighbor 10.0.1.2 remote-as 65003
 neighbor 172.16.1.2 remote-as 65002
 no auto-summary
!
access-list 1 permit 172.16.1.0 0.0.0.255
!
route-map rmap-med permit 10
 match ip address 1
 set metric 100
!
!!! R2 !!!

router bgp 65002
 no synchronization
 bgp log-neighbor-changes
 network 172.16.1.0 mask 255.255.255.0
 neighbor 10.0.2.2 remote-as 65005
 neighbor 172.16.1.1 remote-as 65001
 no auto-summary
!
!!! R3 !!!

router bgp 65003
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.1.2 remote-as 65004
 neighbor 1.0.1.2 route-map rmap-med out
 neighbor 10.0.1.1 remote-as 65001
 no auto-summary
!
access-list 1 permit 172.16.1.0 0.0.0.255
!
route-map rmap-med permit 10
 match ip address 1
 set metric 200
!
!!! R4 !!!

router bgp 65004
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.1.1 remote-as 65003
 neighbor 1.0.2.1 remote-as 65005
 no auto-summary
!
!!! R5 !!!

router bgp 65005
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.2.2 remote-as 65004
 neighbor 1.0.2.2 route-map rmap-med out
 neighbor 10.0.2.1 remote-as 65002
 no auto-summary
!
access-list 1 permit 172.16.1.0 0.0.0.255
!
route-map rmap-med permit 10
 match ip address 1
 set metric 100
!

R4のBGPテーブルを表示させると、MED値が200にもかかわらず、AS65003経由の経路を最適パスに選択していることを確認することができます。

R4#show ip bgp
BGP table version is 2, local router ID is 1.0.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.1.0/24    1.0.2.1                100             0 65005 65002 i
*>                  1.0.1.1                200             0 65003 65001 i
R4#

R3とR5のルータIDはshow ip bgp neighborsコマンドで確認することができます。

R4#show ip bgp neighbors
BGP neighbor is 1.0.1.1,  remote AS 65003, external link
  BGP version 4, remote router ID 10.0.1.2
  BGP state = Established, up for 00:16:33
  Last read 00:00:55, last write 00:00:32, hold time is 180, keepalive interval is 60 seconds
…省略…
BGP neighbor is 1.0.2.1,  remote AS 65005, external link
  BGP version 4, remote router ID 10.0.2.2
  BGP state = Established, up for 00:17:11
  Last read 00:00:11, last write 00:00:11, hold time is 180, keepalive interval is 60 seconds
…省略…
R4#

では次に、R4のBGP設定を変更し、異なるASのMED値を比較できるようにします。

!!! R4 !!!

router& router bgp 65004
 no synchronization
 bgp always-compare-med
 bgp log-neighbor-changes
 neighbor 1.0.1.1 remote-as 65003
 neighbor 1.0.2.1 remote-as 65005
 no auto-summary
!

R4の設定を変更後、R4のBGPテーブルを表示させMED値の比較により最適パスが選択されていることを確認します。

R4#show ip bgp
BGP table version is 3, local router ID is 1.0.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.1.0/24    1.0.2.1                100             0 65005 65002 i
*                   1.0.1.1                200             0 65003 65001 i
R4#

MED値のないプリフィックスへ自動的にMED値を付与する

BGPは学習したプリフィックスにMED値が設定されていなければMED値を0に設定します。以下の図ではR4は172.16.1.0/24をR3とR5から学習しています。R3はプリフィックス172.16.1.0/24のMED値を200に設定してR4へアドバタイズしていますが、R5はMED値を設定していません。R4は異なるASのMED値を比較するように設定しているため、MED値を比較した結果R5を最適パスに選択します。

R3,R4,R5は以下のように設定しています。

!!! R3 !!!

router bgp 65003
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.1.2 remote-as 65004
 neighbor 1.0.1.2 route-map rmap-med out
 neighbor 10.0.1.1 remote-as 65001
 no auto-summary
!
access-list 1 permit 172.16.1.0 0.0.0.255
!
route-map rmap-med permit 10
 match ip address 1
 set metric 200
!
!!! R4 !!!

router& router bgp 65004
 no synchronization
 bgp always-compare-med
 bgp log-neighbor-changes
 neighbor 1.0.1.1 remote-as 65003
 neighbor 1.0.2.1 remote-as 65005
 no auto-summary
!
!!! R5 !!!

router bgp 65005
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.2.2 remote-as 65004
 neighbor 10.0.2.1 remote-as 65002
 no auto-summary
!

R4のBGPテーブルを表示させると、MED値を比較した結果R5を最適パスに選択していることが判ります。

R4#sh ip bgp
BGP table version is 2, local router ID is 1.0.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.1.0/24    1.0.2.1                                0 65005 65002 i
*

次に、R4の設定を変更して、未設定のMEDが最大限のMED値となるようにします。

!!! R4 !!!

router bgp 65004
 no synchronization
 bgp always-compare-med
 bgp log-neighbor-changes
 bgp bestpath med missing-as-worst
 neighbor 1.0.1.1 remote-as 65003
 neighbor 1.0.2.1 remote-as 65005

R4のBGPテーブルを表示させ、MED値の比較によりMED値の小さいR3が最適パスとして選択されていることを確認します。

R4#show ip bgp
BGP table version is 3, local router ID is 1.0.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.1.0/24    1.0.2.1         4294967295             0 65005 65002 i
*>                  1.0.1.1                200             0 65003 65001 i
R4#

最適パスの選択時にAS_PATH属性を無視する

以下の図で、R4はプリフィックス172.16.31.0/24をR3とR5から学習しています。R4はAS_PATH属性が最短のR5経由のルートを最適ルートに決定します。

R3,R4,R5は以下ように設定しています。

!!! R3 !!!

outer bgp 65003
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.1.2 remote-as 65004
 neighbor 10.0.1.1 remote-as 65001
 no auto-summary
!
!!! R4 !!!

router bgp 65004
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.1.1 remote-as 65003
 neighbor 1.0.2.1 remote-as 65005
 no auto-summary
!
!!! R5 !!!

router bgp 65005
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.0.2.2 remote-as 65004
 neighbor 10.0.2.1 remote-as 65002
 no auto-summary
!

R4のBGPテーブルを表示させ、最適パスを確認します。AS_PATH属性が最短の経路を選択していることが判ります。

R4#show ip bgp
BGP table version is 2, local router ID is 1.0.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.31.0/24   1.0.1.1                                0 65003 65001 65002 i
*>                  1.0.2.1                                0 65005 65002 i
R4#

最適パスの選択時にAS_PATH属性を無視させると、ルータIDが小さい方を最適パスに選択します。そこで、AS_PATH属性を無視する設定を入れる前に、R3とR5のルータIDを表示させてR5よりR3のルータIDが小さいことを確認します。

R4#show ip bgp neighbors
BGP neighbor is 1.0.1.1,  remote AS 65003, external link
  BGP version 4, remote router ID 10.0.1.2
  BGP state = Established, up for 00:16:33
  Last read 00:00:55, last write 00:00:32, hold time is 180, keepalive interval is 60 seconds
…省略…
BGP neighbor is 1.0.2.1,  remote AS 65005, external link
  BGP version 4, remote router ID 10.0.2.2
  BGP state = Established, up for 00:17:11
  Last read 00:00:11, last write 00:00:11, hold time is 180, keepalive interval is 60 seconds
…省略…
R4#

次に、R4のBGP設定を変更し、最適パスが変化することを確認します。

router bgp 65004
 no synchronization
 bgp log-neighbor-changes
 bgp bestpath as-path ignore
 neighbor 1.0.1.1 remote-as 65003
 neighbor 1.0.2.1 remote-as 65005
 no auto-summary
!

BGPテーブルを表示させ、AS_PATH属性を無視して最適パスが変わったことを確認します。

R4#show ip bgp
BGP table version is 2, local router ID is 1.0.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.31.0/24   1.0.2.1                                0 65005 65002 i
*>                  1.0.1.1                                0 65003 65001 65002 i
R4#

コンフェデレーション内のMED比較

以下の図の構成で、R2はR1とR3からプリフィックス172.16.1.0/24のアドバタイズを受信しています。そして、ルータIDを比較し、R1がR3よりも小さなルータIDであるためR1の経路を最適パスに決定します。

R1,R2,R3は以下のように設定しています。

!!! R1 !!!

router bgp 65001
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 1
 bgp confederation peers 65002
 network 172.16.1.0 mask 255.255.255.0
 neighbor 1.0.1.2 remote-as 65002
 no auto-summary
!
!!! R2 !!!

router bgp 65002
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 1
 bgp confederation peers 65001 65003
 neighbor 1.0.1.1 remote-as 65001
 neighbor 1.0.2.1 remote-as 65003
 neighbor 10.0.1.2 remote-as 65002
 no auto-summary
!
!!! R3 !!!

router bgp 65003
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 1
 bgp confederation peers 65002
 network 172.16.1.0 mask 255.255.255.0
 neighbor 1.0.2.2 remote-as 65002
 neighbor 10.0.2.2 remote-as 65003
 no auto-summary
!

R2のBGPテーブルを表示させ、R1を最適パスに選択していることを確認します。

R2#show ip bgp neighbors
BGP neighbor is 1.0.1.1,  remote AS 65001, external link
  BGP version 4, remote router ID 172.16.1.1
  Neighbor under common administration
  BGP state = Established, up for 00:21:43
  Last read 00:00:43, last write 00:00:43, hold time is 180, keepalive interval is 60 seconds
…省略…

BGP neighbor is 1.0.2.1,  remote AS 65003, external link
  BGP version 4, remote router ID 172.16.1.2
  Neighbor under common administration
  BGP state = Established, up for 00:22:50
  Last read 00:00:39, last write 00:00:49, hold time is 180, keepalive interval is 60 seconds
…省略…

R2のBGPテーブルを表示させ、R1を最適パスに選択していることを確認します。

R2#show ip bgp
BGP table version is 2, local router ID is 10.0.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.1.0/24    1.0.2.1                  0    100      0 (65003) i
*>                  1.0.1.1                  0    100      0 (65001) i
R2#

次に、R1の設定を変更し、MED値を200に設定してR2へアドバタイズさせます。R2は異なるASから学習したMED値を比較しないため、最適パスは変化しないはずです。

router bgp 65001
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 1
 bgp confederation peers 65002
 network 172.16.1.0 mask 255.255.255.0
 neighbor 1.0.1.2 remote-as 65002
 neighbor 1.0.1.2 route-map rmap-med out
 no auto-summary
!
route-map rmap-med permit 10
 set metric 200

R2のBGPテーブルを表示させ、最適パスの選択が変化しないことを確認します。

R2#show ip bgp
BGP table version is 3, local router ID is 10.0.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.1.0/24    1.0.1.1                200    100      0 (65001) i
*                   1.0.2.1                  0    100      0 (65003) i
R2#

この時点ではMED値が最適パスの決定に使われていないことを確認することができました。次に、R2の設定を変更して、異なるASのMED値を比較するようにします。

router bgp 65002
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 1
 bgp confederation peers 65001 65003
 bgp bestpath med confed
 neighbor 1.0.1.1 remote-as 65001
 neighbor 1.0.2.1 remote-as 65003
 neighbor 10.0.1.2 remote-as 65002
 no auto-summary
!

R2のBGPテーブルを表示させ、MEDを比較して最適パスの決定がされたことを確認します。

R2#show ip bgp
BGP table version is 2, local router ID is 10.0.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.1.0/24    1.0.1.1                200    100      0 (65001) i
*>                  1.0.2.1                  0    100      0 (65003) i
R2#