BGP テーブルと ROUTE-REFRESH について
BGP は他のルーティングプロトコルと異なり、「BGP で学習した経路」だけを保持する「BGP テーブル」を持ちます。BGP では複数の Peer から同じ経路を学習した場合、既定のアルゴリズムに従って最善と思われる経路(ベストパス)を選出します。このアルゴリズムのことを「ベストパス選択アルゴリズム(Best Path Selection Algorithm)」と呼びます。BGP テーブル上でベストパスとして選出された経路はルーティングテーブルにインストールされ、実際のパケット転送(の、方路検索)時に利用されます。
BGP テーブルの仕組み¶
中央のルータが複数の BGP スピーカと Peering している構成を想定しています。実際の Peer は「受信」「送信」を区別しないのが一般的ですが、説明を簡易にする為、「左側のルータからは経路を受信し」「右側のルータへ経路を送信する」ように図示しています。

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

BGP テーブルは以下の 3 つから構成されています。
- Adj-RIBs-In
- BGP ピアから受信した経路を保持する。ピアごとに存在する。
- Loc-RIBs
- Adj-RIBs-In ごとに適用されている Path Attribute(パス属性)を適用した結果を総合して保持するテーブル。Loc-RIBs から、更にベストパス選択アルゴリズムに従って選出されたベストパスがルーティングテーブルにインストールされる。
- Adj-RIBs-Out
- ピアへ送信する経路を保持する。ピアごとに存在する。
BGP ではパス属性の変更を反映する際、ROUTE-REFRESH が必要になる場合があります。以下では ROUTE-REFRESH が必要になるケースについて検証します。
検証構成¶
以下の構成で検証します。

各ルータのコンフィグは以下の通りです。ルータはいずれも 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 テーブルを図示すると以下の通りです。

詳細は以下です。
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 を定義してみました。
この状態で各ルータの 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)でソフトリセットを実行出来ます。
各ルータの BGP テーブルを図示すると以下のようになります。

詳細は以下の通りです。
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 が必要になる場合があるので要注意です。