【BGP】Weight属性 動作確認 Cisco

Weight は、Cisco ルータがベストパスを選ぶときに最初に比べる値です。設定したルータの中だけで使われるので、そのルータがどの出口を使うかを手軽に決められます。

この記事では、Weight の特徴を整理したあと、Cisco ルータで neighbor weight によるネイバー単位の設定と、route-map による経路単位の設定を試します。route-map の最後にある暗黙の deny で経路が消える例も確認します。

この記事でわかること
  1. Weight の特徴(Cisco 独自、設定したルータの中だけで有効、大きい方を優先)
  2. neighbor weight で、ネイバーから受け取るすべての経路に Weight を設定する方法
  3. route-map で特定の経路だけに Weight を設定する方法と、暗黙の deny の注意点

Weight属性とは

Weight は Cisco 独自の値で、BGP のパス属性ではありません。UPDATE メッセージには載らず、設定したルータの中だけで使われ、他の BGP ルータには伝わりません。同じプレフィックスに複数の経路があるとき、Weight が大きい経路を優先します。

項目内容
値の範囲0〜65535
既定値他のルータから受け取った経路は 0、自分で生成した経路(network コマンドなど)は 32768
優先する経路大きい方
有効な範囲設定したルータの中だけ(他のルータには伝わらない)
ベストパス選択での順番1番目(LOCAL_PREF や AS_PATH より先に比べる)

よく比べられる LOCAL_PREF との違いは次のとおりです。どちらも出口となる経路を選ぶための値ですが、効く範囲が違います。

項目WeightLOCAL_PREF
種類Cisco 独自の値(パス属性ではない)BGP のパス属性
効く範囲設定したルータだけ同じ AS 内の iBGP ピアに伝わる
既定値0(自分で生成した経路は 32768)100
優先する経路大きい方大きい方

検証の構成

AS23 の R2 と R3 の両方から、同じプレフィックス 23.23.23.23/32 を AS6 の R6 へ広告します。初期状態を確認したあと、R6 で Weight を設定し、R3 からの経路が選ばれるようにします。後半では、R2 と R3 に 32.32.32.32/32 を追加し、route-map で 23.23.23.23/32 だけを R3 優先にします。

AS23AS623.23.23.23/3232.32.32.32/32(後で追加)23.23.23.23/3232.32.32.32/32(後で追加)R2R3R6.2.3.6.6192.168.26.0/24eBGP192.168.36.0/24eBGPWeight 100R3 から受け取る経路に設定
図1 検証構成

初期状態の確認

eBGP を設定する

まず Weight を設定せずに、R2・R3 と R6 の間で eBGP を設定します。R2 と R3 は、Loopback23 の 23.23.23.23/32 を network コマンドで広告します。

R2

R2(config)#int loopback23
R2(config-if)#ip add 23.23.23.23 255.255.255.255
R2(config)#router bgp 23
R2(config-router)#network 23.23.23.23 mask 255.255.255.255
R2(config-router)#neighbor 192.168.26.6 remote-as 6

R3

R3(config)#int loopback23
R3(config-if)#ip add 23.23.23.23 255.255.255.255
R3(config)#router bgp 23
R3(config-router)#network 23.23.23.23 mask 255.255.255.255
R3(config-router)#neighbor 192.168.36.6 remote-as 6

R6

R6(config)#router bgp 6
R6(config-router)#neighbor 192.168.26.2 remote-as 23
R6(config-router)#neighbor 192.168.36.3 remote-as 23

R6 の BGP テーブルを確認する

R6

R6#sh ip bgp
BGP table version is 2, local router ID is 6.6.6.6
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
 *   23.23.23.23/32   192.168.36.3             0             0 23 i
 *>                   192.168.26.2             0             0 23 i

R6 は R2 と R3 の両方から 23.23.23.23/32 を受け取り、R2(Next Hop 192.168.26.2)からの経路をベストパスにしています。Weight 列はどちらも 0 です。

経路の詳細も確認します。

R6

R6#sh ip bgp 23.23.23.23
BGP routing table entry for 23.23.23.23/32, version 2
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     2         
  23
    192.168.36.3 from 192.168.36.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, external
  23
    192.168.26.2 from 192.168.26.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, external, best
表示意味
2 available, best #2経路が2つあり、2番目に表示されている R2 からの経路がベストパス
from 192.168.26.2 (2.2.2.2)ピアのアドレスと、そのピアのルータID
Origin IGP, metric 0, localpref 100Origin、MED、LOCAL_PREF は2つの経路で同じ。AS_PATH もどちらも 23
R2 が選ばれた理由

Weight、LOCAL_PREF、AS_PATH などがすべて同じなので、比較はベストパス選択の最後のほうまで進みます。Cisco ルータは、どちらも eBGP の経路であれば、ルータIDを比べる前に先に受信した(古い)経路を優先します。そのため、この結果は「ルータIDが小さい R2 が選ばれた」とも「R2 の経路を先に受信した」とも考えられ、この出力だけではどちらで決まったかは判断できません。

neighbor で Weight を設定する

R6 で neighbor weight を設定する

R3 からの経路を優先するように、R6 で R3 のネイバーに Weight を設定します。

R6

R6(config)#router bgp 6
R6(config-router)#neighbor 192.168.36.3 weight 100

neighbor 192.168.36.3 weight 100 は、R3 から受け取るすべての経路の Weight を 100 にします。R2 から受け取る経路は既定値の 0 のままです。

BGP セッションをクリアする

Weight の設定は、設定後に受け取った経路から適用されます。すでに受け取っている経路に反映するため、BGP セッションをクリアします。

R6

R6#clear ip bgp *
*Apr 27 14:44:27.595: %BGP-5-ADJCHANGE: neighbor 192.168.26.2 Down User reset
*Apr 27 14:44:27.595: %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.26.2 IPv4 Unicast topology base removed from session  User reset
*Apr 27 14:44:27.607: %BGP-5-ADJCHANGE: neighbor 192.168.36.3 Down User reset
*Apr 27 14:44:27.611: %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.36.3 IPv4 Unicast topology base removed from session  User reset
*Apr 27 14:44:28.583: %BGP-5-ADJCHANGE: neighbor 192.168.36.3 Up 
*Apr 27 14:44:28.583: %BGP-5-ADJCHANGE: neighbor 192.168.26.2 Up

clear ip bgp * は、すべての BGP セッションを切断して張り直します(ログの Down User reset と Up)。本番環境では、セッションを切らずに経路を受け取り直す clear ip bgp 192.168.36.3 soft in を使います。

ベストパスが R3 に変わったことを確認する

R6

R6#sh ip bgp
BGP table version is 2, local router ID is 6.6.6.6
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
 *   23.23.23.23/32   192.168.26.2             0             0 23 i
 *>                   192.168.36.3             0           100 23 i

R3(Next Hop 192.168.36.3)からの経路の Weight が 100 になり、ベストパスに変わりました。

R6

R6#sh ip bgp 23.23.23.23
BGP routing table entry for 23.23.23.23/32, version 2
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     3         
  23
    192.168.26.2 from 192.168.26.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, external
  23
    192.168.36.3 from 192.168.36.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, weight 100, valid, external, best
表示意味
weight 100R3 から受け取った経路の Weight。既定値の 0 のときは表示されない
external, bestR3 からの経路がベストパスになった。Weight はベストパス選択で最初に比べるので、他の値に関係なく決まる

route-map で特定の経路だけ Weight を設定する

neighbor weight は、そのネイバーから受け取るすべての経路に効きます。特定の経路だけ Weight を変えたい場合は、route-map を使います。

32.32.32.32/32 を追加する

R2 と R3 に Loopback32(32.32.32.32/32)を追加し、BGP で広告します。

R2

R2(config)#int lo 32
R2(config-if)#ip add 32.32.32.32 255.255.255.255
R2(config)#router bgp 23
R2(config-router)#network 32.32.32.32 mask 255.255.255.255

R3

R3(config)#int lo32
R3(config-if)#ip add 32.32.32.32 255.255.255.255
R3(config)#router bgp 23
R3(config-router)#network 32.32.32.32 mask 255.255.255.255

R6

R6#sh ip bgp
BGP table version is 5, local router ID is 6.6.6.6
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
 *   23.23.23.23/32   192.168.26.2             0             0 23 i
 *>                        192.168.36.3             0           100 23 i
 *>  32.32.32.32/32   192.168.36.3             0           100 23 i
 *                    192.168.26.2             0             0 23 I

STEP 3 の neighbor weight が残っているので、32.32.32.32/32 も R3 からの経路が Weight 100 でベストパスになっています。

neighbor weight を消して route-map を作る

いったん R6 の neighbor weight を削除します。

R6

R6(config)#router bgp 6
R6(config-router)#no  neighbor 192.168.36.3 weight 100

次に、23.23.23.23/32 だけ Weight を 100 にする route-map を作ります。

R6

R6(config)#access-list 1 permit 23.23.23.23 0.0.0.0
!
R6(config)#route-map SETWEIGHT permit 10
R6(config-route-map)#match ip address 1
R6(config-route-map)#set weight 100
R6(config-route-map)#route-map SETWEIGHT permit 1000
設定意味
access-list 1 permit 23.23.23.23 0.0.0.023.23.23.23 に一致する ACL。0.0.0.0 はワイルドカードマスクで、1つのアドレスだけを指す
route-map SETWEIGHT permit 10シーケンス 10。match ip address 1 に一致した経路に set weight 100 を適用する
route-map SETWEIGHT permit 1000シーケンス 1000。match も set もないので、ここまで来たすべての経路を何も変えずに許可する
補足

BGP の経路を選ぶときは、ACL の代わりに prefix-list(ip prefix-list)を使うこともよくあります。prefix-list はプレフィックス長まで指定して一致させられます。

route-map を R3 のネイバーに適用する

R6

R6(config)#router bgp 6
R6(config-router)#neighbor 192.168.36.3 route-map SETWEIGHT in

R3 から受け取る(in 方向の)経路に route-map を適用します。適用後は、STEP 4 と同じように BGP セッションをクリアします。

23.23.23.23/32 だけ R3 優先になったことを確認する

R6

R6#sh ip bgp         
BGP table version is 3, local router ID is 6.6.6.6
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
 *>  23.23.23.23/32   192.168.36.3             0           100 23 i
 *                    192.168.26.2             0             0 23 i
 *   32.32.32.32/32   192.168.36.3             0             0 23 i
 *>                   192.168.26.2             0             0 23 i
プレフィックスR3 からの経路の Weightベストパス
23.23.23.23/32100(permit 10 に一致)R3(192.168.36.3)
32.32.32.32/320(permit 1000 でそのまま許可)R2(192.168.26.2)

route-map SETWEIGHT permit 1000を忘れた場合

route-map のシーケンス 1000 を設定しなかった場合、R6 の BGP テーブルがどうなるかを確認します。

R6

R6(config)#no route-map SETWEIGHT permit 1000

BGP セッションをクリアしたあと、R6 の BGP テーブルを確認します。

R6

R6#sh ip bgp
BGP table version is 3, local router ID is 6.6.6.6
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
 *   23.23.23.23/32   192.168.26.2             0             0 23 i
 *>                   192.168.36.3             0           100 23 i
 *>  32.32.32.32/32   192.168.26.2             0             0 23 I

32.32.32.32/32 は R2 からの経路だけになり、R3 からは受け取らなくなりました。route-map の最後には暗黙の deny があり、どのシーケンスにも一致しなかった経路は捨てられます。32.32.32.32/32 はシーケンス 10 の ACL に一致しないので、シーケンス 1000 がないと暗黙の deny で捨てられます。

R3 から受け取る経路23.23.23.23/3232.32.32.32/32permit 10match ip address 1 → set weight 100Weight 100 で受け取る23.23.23.23/32一致しないpermit 1000match なし(すべての経路が一致)Weight 0 のまま受け取る32.32.32.32/32permit 1000 がない場合暗黙の deny(最後)どれにも一致しない経路を捨てる捨てる32.32.32.32/32 を学習しない
図2 R3 から受け取る経路と route-map SETWEIGHT の評価
注意

route-map を Weight の変更のような「値を変えるだけ」の目的で使うときも、最後に match のない permit を入れておかないと、対象外の経路がフィルタされます。経路が届かなくなったときは、ネイバーに適用している route-map の最後に permit があるかを確認します。

まとめ

設定対象23.23.23.23/3232.32.32.32/32
neighbor 192.168.36.3 weight 100R3 から受け取るすべての経路R3 優先R3 優先
route-map(permit 10 と permit 1000)ACL に一致した経路だけR3 優先R2 からの経路がベストパス(Weight は同じ)
route-map(permit 1000 なし)ACL に一致した経路だけ。それ以外は捨てるR3 優先R3 からは受け取らない

Weight は Cisco 独自の値で、設定したルータの中だけで有効です。ベストパス選択で最初に比べるため、そのルータが使う出口を確実に決められます。route-map で設定するときは、最後に match のない permit を入れることを忘れないようにします。

コメント