BGP Multipathの動作確認をしました。構成は下記の通りです。トランジットと2本の専用線で接続し、BGPを2セッション貼るイメージです。
通常の場合
### configuration of Left ###
router bgp 65001
bgp router-id 10.0.0.1
bgp log-neighbor-changes
network 192.168.1.0
network 192.168.2.0
neighbor 10.0.1.254 remote-as 65002
neighbor 10.0.2.254 remote-as 65002
!
ip route 192.168.1.0 255.255.255.0 Null0
ip route 192.168.2.0 255.255.255.0 Null0
### configuration of Right###
router bgp 65002
bgp router-id 10.0.0.254
bgp log-neighbor-changes
neighbor 10.0.1.1 remote-as 65001
neighbor 10.0.2.1 remote-as 65001
!
address-family ipv4
neighbor 10.0.1.1 activate
neighbor 10.0.2.1 activate
exit-address-family
!
Rightは各セッションでLeftが広告した2経路を受信していますが、ルーティングテーブルにはベストパスを1つしか乗せません。おそらくベストパス選択アルゴリズムの最後「最小の隣接ルータ アドレスから送られたパスが優先されます。」で選択したものだと思います。
ルーティングテーブルにはベストパス1つしか乗っていないので、専用線を2本引いているにも関わらず、片方しか使われません。冗長自体は別のASと接続する事で実現するので、単一ASとの接続は全ての専用線を使ってくれた方がうれしい場合もあります。そんな時にMultipathを使うのかな。
right#show bgp ipv4 unicast summary
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.0.1.1 4 65001 12 12 5 0 0 00:07:33 2
10.0.2.1 4 65001 12 12 5 0 0 00:07:33 2
right#show ip route
B 192.168.1.0/24 [20/0] via 10.0.1.1, 00:01:46
B 192.168.2.0/24 [20/0] via 10.0.1.1, 00:01:46
Multipathを有効にした場合
### configuration of Right ###
router bgp 65002
bgp router-id 10.0.0.254
bgp log-neighbor-changes
neighbor 10.0.1.1 remote-as 65001
neighbor 10.0.2.1 remote-as 65001
!
address-family ipv4
neighbor 10.0.1.1 activate
neighbor 10.0.2.1 activate
maximum-paths 2 ←追加!!!
exit-address-family
各セッションでLeftが広告した2経路を受信しており、さらにルーティングテーブルにはベストパスが2つ乗っています。ルーティングテーブルに2経路乗ればECMPで分散されますので、2本の専用線が両方とも利用されます。通常の構成と比較して、線の本数は変わらないのにトランジットへの接続帯域を倍にできるわけですね。
right#show bgp ipv4 unicast summary
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.0.1.1 4 65001 16 17 7 0 0 00:11:53 2
10.0.2.1 4 65001 17 16 7 0 0 00:11:53 2
right#show ip route
B 192.168.1.0/24 [20/0] via 10.0.2.1, 00:03:19
[20/0] via 10.0.1.1, 00:03:19
B 192.168.2.0/24 [20/0] via 10.0.2.1, 00:03:19
[20/0] via 10.0.1.1, 00:03:19