読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

BGP テーブルと ROUTE-REFRESH について

BGP は他のルーティングプロトコルと異なり、「BGP で学習した経路」だけを保持する「BGP テーブル」を持ちます。BGP では複数の Peer から同じ経路を学習した場合、既定のアルゴリズムに従って最善と思われる経路(ベストパス)を選出します。このアルゴリズムのことを「ベストパス選択アルゴリズム(Best Path Selection Algorithm)」と呼びます。BGP テーブル上でベストパスとして選出された経路はルーティングテーブルにインストールされ、実際のパケット転送(の、方路検索)時に利用されます。

BGP テーブルの仕組み

中央のルータが複数の BGP スピーカと Peering している構成を想定しています。実際の Peer は「受信」「送信」を区別しないのが一般的ですが、説明を簡易にする為、「左側のルータからは経路を受信し」「右側のルータへ経路を送信する」ように図示しています。

f:id:sig9:20150801011405p:plain

中央のルータの BGP テーブルを図解すると以下のようになります。

f:id:sig9:20150801011411p:plain

BGP テーブルは以下の 3 つから構成されています。

1.Adj-RIBs-In
BGP ピアから受信した経路を保持する。ピアごとに存在する。
2.Loc-RIBs
Adj-RIBs-In ごとに適用されている Path Attribute(パス属性)を適用した結果を総合して保持するテーブル。Loc-RIBs から、更にベストパス選択アルゴリズムに従って選出されたベストパスがルーティングテーブルにインストールされる。
3.Adj-RIBs-Out
ピアへ送信する経路を保持する。ピアごとに存在する。

BGP ではパス属性の変更を反映する際、ROUTE-REFRESH が必要になる場合があります。以下では ROUTE-REFRESH が必要になるケースについて検証します。

検証構成

以下の構成で検証します。

f:id:sig9:20150801034327p:plain

各ルータのコンフィグは以下の通りです。ルータはいずれも Cisco を使いました。

R1 のコンフィグ

service timestamps debug datetime localtime
service timestamps log datetime localtime
!
hostname R1
!
clock timezone JST 9 0
!
no ip domain lookup
!
interface Loopback0
 ip address 10.0.99.1 255.255.255.255
!
interface Loopback99
 ip address 192.168.99.1 255.255.255.0
!
interface Ethernet0/0
 ip address 10.0.12.1 255.255.255.0
 no shutdown
!
router bgp 65001
 bgp router-id 10.0.99.1
 network 192.168.99.0
 neighbor 10.0.12.2 remote-as 65002
 neighbor 10.0.12.2 soft-reconfiguration inbound
 neighbor 10.0.12.2 route-map MED-10000 out
!
route-map MED-10000 permit 10
 set metric 10000
!
line con 0
 exec-timeout 60 0
 privilege level 15
 logging synchronous
 length 0
!
line vty 0 4
 exec-timeout 60 0
 privilege level 15
 no login
 length 0
 transport input telnet
!
end

R2 のコンフィグ

service timestamps debug datetime localtime
service timestamps log datetime localtime
!
hostname R2
!
clock timezone JST 9 0
!
no ip domain lookup
!
interface Loopback0
 ip address 10.0.99.2 255.255.255.255
!
interface Ethernet0/0
 ip address 10.0.12.2 255.255.255.0
 no shutdown
!
router bgp 65002
 bgp router-id 10.0.99.2
 neighbor 10.0.12.1 remote-as 65001
 neighbor 10.0.12.1 soft-reconfiguration inbound
!
line con 0
 exec-timeout 60 0
 privilege level 15
 logging synchronous
 length 0
!
line vty 0 4
 exec-timeout 60 0
 privilege level 15
 no login
 length 0
 transport input telnet
!
end

通常時の BGP テーブル

通常時の BGP テーブルを図示すると以下の通りです。

f:id:sig9:20150801034415p:plain

詳細は以下です。

R1 での BGP テーブル確認

R1 が R2 へ広報している経路は show ip bgp neighbors X.X.X.X advertised-routes で確認出来ます。

R1# show ip bgp neighbors 10.0.12.2 advertised-routes
BGP table version is 2, local router ID is 10.0.99.1
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
 *>  192.168.99.0     0.0.0.0                  0         32768 i

Total number of prefixes 1

R2 での BGP テーブル確認

R2 が R1 から受信している経路でパス属性適用前のものshow ip bgp neighbors X.X.X.X received-routes で確認出来ます。

R2# show ip bgp neighbors 10.0.12.1 received-routes
BGP table version is 2, local router ID is 10.0.99.2
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
 *>  192.168.99.0     10.0.12.1            10000             0 65001 i

Total number of prefixes 1

R2 が R1 から受信している経路でパス属性適用後のものshow ip bgp neighbors X.X.X.X routes で確認出来ます。

R2# show ip bgp neighbors 10.0.12.1 routes
BGP table version is 2, local router ID is 10.0.99.2
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
 *>  192.168.99.0     10.0.12.1            10000             0 65001 i

Total number of prefixes 1

route-map 適用後の BGP テーブル確認

R2 の受信側でパス属性を付与すべく、route-map を定義します。route-map では相手から受信している MED(metric)値を上書きすることも出来ますが、今回は「相手から受信している MED + 999」する route-map を定義してみました。

route-map MED+999
 set metric +999
!
router bgp 65002
 neighbor 10.0.12.1 route-map MED+999 in
!
end

この状態で各ルータの BGP テーブルを確認してみます。

R1 での BGP テーブル確認

「R2 の受信側」で route-map を定義しても、R1 には影響しません。

R1# show ip bgp neighbors 10.0.12.2 advertised-routes
BGP table version is 2, local router ID is 10.0.99.1
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
 *>  192.168.99.0     0.0.0.0                  0         32768 i

Total number of prefixes 1

R2 での BGP テーブル確認

R2 では route-map を定義・適用したものの、変化がありません。まずは received-routes を確認します。

R2# show ip bgp neighbors 10.0.12.1 received-routes
BGP table version is 2, local router ID is 10.0.99.2
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
 *>  192.168.99.0     10.0.12.1            10000             0 65001 i

Total number of prefixes 1

続いて routes を確認します。

R2# show ip bgp neighbors 10.0.12.1 routes
BGP table version is 2, local router ID is 10.0.99.2
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
 *>  192.168.99.0     10.0.12.1            10000             0 65001 i

Total number of prefixes 1

ROUTE-REFRESH 後のルーティングテーブル

パス属性の設定が反映されるように R2 で ROUTE-REFRESH を実行します。受信側の ROUTE-REFRESH は clear ip bp X.X.X.X in で要求出来ます。但し、これでは BGP ピア断を伴うハードリセットになってしまいます。BGP ピア断を避けるには clear ip bgp X.X.X.X in(または clear ip bgp X.X.X.X soft in)でソフトリセットを実行出来ます。

R2# clear ip bgp 10.0.12.1 soft in

各ルータの BGP テーブルを図示すると以下のようになります。

f:id:sig9:20150801034451p:plain

詳細は以下の通りです。

R1 での BGP テーブル確認

R1 側での BGP テーブルの見え方に変化はありません。

R1# show ip bgp neighbors 10.0.12.2 advertised-routes
BGP table version is 2, local router ID is 10.0.99.1
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
 *>  192.168.99.0     0.0.0.0                  0         32768 i

Total number of prefixes 1

R2 での BGP テーブル確認

パス属性適用前のテーブルを見ても、変化はありません。

R2# show ip bgp neighbors 10.0.12.1 received-routes
BGP table version is 3, local router ID is 10.0.99.2
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
 *   192.168.99.0     10.0.12.1            10000             0 65001 i

Total number of prefixes 1

パス属性適用後のテーブルを確認すると設定したパス属性が反映されているのが分かります。

R2# show ip bgp neighbors 10.0.12.1 routes
BGP table version is 3, local router ID is 10.0.99.2
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
 *>  192.168.99.0     10.0.12.1            10999             0 65001 i

Total number of prefixes 1

まとめ

上述のように、BGP ではパス属性を変更した際に ROUTE-REFRESH が必要になる場合があるので要注意です。