WEIGHTはNEXT_HOPに次いで重要性の高いCisco独自のBGPパスアトリビュートである。WEIGHTの設定を行ったBGPスピーカ(Ciscoルータ)のみで情報を保持し、iBGPピア/eBGPピアには情報をアドバタイズしない。
WEIGHTを使う理由
冗長化された通信経路をBGPでルーティングしている場合に、WEIGHTを使うことによってどちらの通信経路を使用するか決定できる。eBGPピアとの接続では冗長化された通信経路の内どちらの経路を使用するかは、通信経路がシンメトリーな場合においては「先に学習した経路情報を優先」することになるため、特定の経路情報が意図しない通信経路を通ってしまう可能性がある。
以下のネットワークにおいて、R1からAS400への通信に関して、R2(AS200)のみを通るように設定変更してみる。R1~R6はC891FJ-K9 15.8(3)M6、R7はWS-C3560-8PC-S 15.0(2)SE9を使用。
設定変更前のR1のBGPテーブル
設定変更前のR1のBGPテーブルは以下の通り。
R1#show run | sect bgp
router bgp 100
bgp router-id 1.1.1.1
bgp log-neighbor-changes
network 1.1.1.1 mask 255.255.255.255
neighbor 10.0.10.2 remote-as 200
neighbor 10.0.20.2 remote-as 300
R1#
R1#show ip bgp
BGP table version is 8, local router ID is 1.1.1.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,
t secondary path,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 0.0.0.0 0 32768 i
*> 2.2.2.2/32 10.0.10.2 0 0 200 i
* 3.3.3.3/32 10.0.10.2 0 200 400 300 i
*> 10.0.20.2 0 0 300 i
* 4.4.4.4/32 10.0.20.2 0 300 400 i
*> 10.0.10.2 0 200 400 i
* 5.5.5.5/32 10.0.10.2 0 200 400 i
*> 10.0.20.2 0 300 400 i
* 6.6.6.6/32 10.0.10.2 0 200 400 i
*> 10.0.20.2 0 300 400 i
* 7.7.7.7/32 10.0.10.2 0 200 400 i
*> 10.0.20.2 0 300 400 i
WEIGHT、LOCAL_PREF、MEDによる重み付けは行っていない。ルータID比較を行う「bgp bestpath compare-routerid」設定も入れていない。従って、R1ではR2、R3からより早く受信したeBGP経路情報をベストパスとして選択する。実際にR1でclear ip bgp *でハードリセットをかけてみると、eBGPで受信した経路情報のベストパスはコロコロ変わる。
今回は5.5.5.5/32、6.6.6.6/32、7.7.7.7/32の経路情報がAS300経由(NEXT_HOP属性が10.0.20.2)になっているため、これをAS200経由に変更する。
設定変更
WEIGHTによる経路情報の重み付けはBGPピア単位で行う方法と経路情報単位で行う方法の2つの設定方法がある。今回は特定の経路情報(5.5.5.5/32、6.6.6.6/32、7.7.7.7/32)のみ通信経路を変更したいため、経路情報単位で設定を行う。経路情報単位の設定変更方法はroute-mapを使用する。
##### 通信経路を変更する経路情報を定義 #####
R1(config)#ip prefix-list AS100->AS200 seq 10 permit 5.5.5.5/32
R1(config)#ip prefix-list AS100->AS200 seq 20 permit 6.6.6.6/32
R1(config)#ip prefix-list AS100->AS200 seq 30 permit 7.7.7.7/32
##### 経路情報にWeight値を設定 #####
R1(config)#route-map AS100->AS200 permit 10
R1(config-route-map)#match ip address prefix-list AS100->AS200
R1(config-route-map)#set weight 100
R1(config-route-map)#exit
##### route-mapの空打ち #####
R1(config)#route-map AS100->AS200 permit 20
R1(config-route-map)#exit
##### R2(10.0.10.2)から受信した経路情報にroute-mapを設定 #####
R1(config)#router bgp 100
R1(config-router)#neighbor 10.0.10.2 route-map AS100->AS200 in
R1(config-router)#end
設定変更内容のうち、重要なのはroute-mapの空打ちとなる。もし、route-mapの空打ちを行わなかった場合は、R1はR2から受信したBGP経路情報のうち、match ip address prefix-list AS100->AS200で定義した経路情報以外を破棄してしまう。具体的にはR1において2.2.2.2/32、3.3.3.3/32、4.4.4.4/32のベストパスがAS300経由に切り替わってしまう。
設定変更後のR1のBGPテーブル
設定変更後のR1のBGPテーブルは以下の通りとなる。R1からR2に対して経路情報の再送信を依頼する必要があるため、ソフトリセットが必要になる。
R1#clear ip bgp 10.0.10.2 soft in
R1#
R1#show run | sect bgp
router bgp 100
bgp router-id 1.1.1.1
bgp log-neighbor-changes
network 1.1.1.1 mask 255.255.255.255
neighbor 10.0.10.2 remote-as 200
neighbor 10.0.10.2 route-map AS100->AS200 in
neighbor 10.0.20.2 remote-as 300
R1#
R1#show ip bgp
BGP table version is 11, local router ID is 1.1.1.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,
t secondary path,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 0.0.0.0 0 32768 i
*> 2.2.2.2/32 10.0.10.2 0 0 200 i
* 3.3.3.3/32 10.0.10.2 0 200 400 300 i
*> 10.0.20.2 0 0 300 i
* 4.4.4.4/32 10.0.20.2 0 300 400 i
*> 10.0.10.2 0 200 400 i
*> 5.5.5.5/32 10.0.10.2 100 200 400 i
* 10.0.20.2 0 300 400 i
*> 6.6.6.6/32 10.0.10.2 100 200 400 i
* 10.0.20.2 0 300 400 i
*> 7.7.7.7/32 10.0.10.2 100 200 400 i
* 10.0.20.2 0 300 400 i
R1のBGPテーブルを見てみると、R2から受信したNEXT_HOP属性が10.0.10.2となっている5.5.5.5/32、6.6.6.6/32、7.7.7.7/32の経路情報のうち、WEIGHT値が100の経路情報がベストパスに選定されたことが確認できる。
以上
コメント