BGP Advertise Best External によるバックアップパスを試してみる
通常、BGP スピーカが他の BGP スピーカに広告する経路は最善の経路と選定されたものだけであり、全く同じ複数の経路を広告することは出来ません。つまり、BGP において「ベストパスは常にひとつだけ」であり、「バックアップパス(代替パス)は存在しない」ということになります。しかしながら、バックアップパスがあれば障害によってベストパスが無くなってもいち早くバックアップパスに切り替わることが出来るので収束が早くなる、といった利点があります。バックアップパスを広報する手段として以下の 3 種類が検討されているそうです。
- BGP Advertise Best External
- BGP add-path
- BGP Diverse Path
今回は Cisco ルータを使って BGP Advertise Best External によるバックアップパスを試してみます。尚、検証に際しては RFC 以外にも以下の資料を参考にさせて頂きました。
これらの資料を公開してくださった土屋師子生さん、篠宮 俊輔さん、河野 美也さんに敬意を表します。
構成
構成は下図の通りです。
ルータは Cisco IOS 15.4(1) を使いました。各ルータのコンフィグは以下の通りです。
R1 の設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | hostname R1
!
interface Loopback0
ip address 10.0.99.1 255.255.255.255
!
interface Ethernet0/1
ip address 192.168.12.1 255.255.255.0
no shutdown
!
interface Ethernet0/2
ip address 192.168.13.1 255.255.255.0
no shutdown
!
router bgp 65001
bgp router-id 10.0.99.1
network 10.0.0.0 mask 255.0.0.0
neighbor 192.168.12.2 remote-as 65002
neighbor 192.168.13.3 remote-as 65002
!
ip route 10.0.0.0 255.0.0.0 Null0
!
end
|
R2 の設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | hostname R2
!
interface Loopback0
ip address 192.168.99.2 255.255.255.255
!
interface Ethernet0/1
ip address 192.168.12.2 255.255.255.0
no shutdown
!
interface Ethernet0/2
ip address 192.168.23.2 255.255.255.0
no shutdown
!
interface Ethernet0/3
ip address 192.168.24.2 255.255.255.0
no shutdown
!
router ospf 65002
router-id 192.168.99.2
passive-interface default
no passive-interface Ethernet0/2
no passive-interface Ethernet0/3
network 0.0.0.0 0.0.0.0 area 0.0.0.0
!
router bgp 65002
bgp router-id 192.168.99.2
neighbor 192.168.12.1 remote-as 65001
neighbor 192.168.12.1 route-map MED-100 in
neighbor 192.168.12.1 route-map MED-100 out
neighbor 192.168.99.3 remote-as 65002
neighbor 192.168.99.3 update-source Loopback0
neighbor 192.168.99.4 remote-as 65002
neighbor 192.168.99.4 update-source Loopback0
!
route-map MED-100 permit 10
set metric 100
!
end
|
R3 の設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | hostname R3
!
interface Loopback0
ip address 192.168.99.3 255.255.255.255
!
interface Ethernet0/1
ip address 192.168.13.3 255.255.255.0
no shutdown
!
interface Ethernet0/2
ip address 192.168.23.3 255.255.255.0
no shutdown
!
interface Ethernet0/3
ip address 192.168.34.3 255.255.255.0
no shutdown
!
router ospf 65002
router-id 192.168.99.3
passive-interface default
no passive-interface Ethernet0/2
no passive-interface Ethernet0/3
network 0.0.0.0 0.0.0.0 area 0.0.0.0
!
router bgp 65002
bgp router-id 192.168.99.3
neighbor 192.168.13.1 remote-as 65001
neighbor 192.168.13.1 route-map MED-200 in
neighbor 192.168.13.1 route-map MED-200 out
neighbor 192.168.99.2 remote-as 65002
neighbor 192.168.99.2 update-source Loopback0
neighbor 192.168.99.4 remote-as 65002
neighbor 192.168.99.4 update-source Loopback0
!
route-map MED-200 permit 10
set metric 200
!
end
|
R4 の設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | hostname R4
!
interface Loopback0
ip address 192.168.99.4 255.255.255.255
!
interface Ethernet0/1
ip address 192.168.24.4 255.255.255.0
no shutdown
!
interface Ethernet0/2
ip address 192.168.34.4 255.255.255.0
no shutdown
!
router ospf 65002
router-id 192.168.99.4
passive-interface default
no passive-interface Ethernet0/1
no passive-interface Ethernet0/2
network 0.0.0.0 0.0.0.0 area 0.0.0.0
!
router bgp 65002
bgp router-id 192.168.99.4
network 192.168.0.0 mask 255.255.0.0
neighbor 192.168.99.2 remote-as 65002
neighbor 192.168.99.2 update-source Loopback0
neighbor 192.168.99.3 remote-as 65002
neighbor 192.168.99.3 update-source Loopback0
!
ip route 192.168.0.0 255.255.0.0 Null0
!
end
|
通常の BGP テーブル
AS65002 側で見た 10.0.0.0/8 宛の BGP テーブルを図示すると以下の通りです。R3 は R4 へ経路を広告しない為、R4 では BGP テーブル上には 1 経路しかありません。
R2 の BGP テーブル
| R2# show ip bgp
BGP table version is 6, local router ID is 192.168.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
*> 10.0.0.0 192.168.12.1 100 0 65001 i
*>i 192.168.0.0/16 192.168.99.4 0 100 0 i
|
R3 の BGP テーブル
1
2
3
4
5
6
7
8
9
10
11
12 | R3# show ip bgp
BGP table version is 11, local router ID is 192.168.99.3
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
*>i 10.0.0.0 192.168.12.1 100 100 0 65001 i
* 192.168.13.1 200 0 65001 i
*>i 192.168.0.0/16 192.168.99.4 0 100 0 i
|
R4 の BGP テーブル
| R4# show ip bgp
BGP table version is 6, local router ID is 192.168.99.4
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
*>i 10.0.0.0 192.168.12.1 100 100 0 65001 i
*> 192.168.0.0/16 0.0.0.0 0 32768 i
|
Advertise Best External を有効化した時の BGP テーブル
R3 で Advertise Best External を有効化します。
| R3# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)# router bgp 65002
R3(config-router)# bgp advertise-best-external
R3(config-router)# end
R3#
|
この状態の BGP テーブルを図示すると以下の通りです。先程は R3 が eBGP で学習している経路を iBGP Peer に広告していませんでした。しかし、Advertise Best External を有効化したことで R3 が eBGP で学習した経路を iBGP Peer 経由で広告している為、R2 や R4 でバックアップパスを学習出来ていることが分かります。
R2 の BGP テーブル
R3 からバックアップパスを受信しているのが分かります。
1
2
3
4
5
6
7
8
9
10
11
12 | R2# show ip bgp
BGP table version is 6, local router ID is 192.168.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
* i 10.0.0.0 192.168.13.1 200 100 0 65001 i
*> 192.168.12.1 100 0 65001 i
*>i 192.168.0.0/16 192.168.99.4 0 100 0 i
|
R3 の BGP テーブル
R1 から eBGP で学習している経路を「b(backup-path)」の「x(best-external」)として認識しているのが分かります。
1
2
3
4
5
6
7
8
9
10
11
12 | R3# show ip bgp
BGP table version is 13, local router ID is 192.168.99.3
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
*>i 10.0.0.0 192.168.12.1 100 100 0 65001 i
*b x 192.168.13.1 200 0 65001 i
*>i 192.168.0.0/16 192.168.99.4 0 100 0 i
|
R4 の BGP テーブル
R2 同様、R3 からバックアップパスを受信しているのが分かります。
1
2
3
4
5
6
7
8
9
10
11
12 | R4# show ip bgp
BGP table version is 6, local router ID is 192.168.99.4
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
* i 10.0.0.0 192.168.13.1 200 100 0 65001 i
*>i 192.168.12.1 100 100 0 65001 i
*> 192.168.0.0/16 0.0.0.0 0 32768 i
|
まとめ
比較用に「Advertise Best External 無効」「有効」各々の BGP テーブルを図示したものを並べておきます。