メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. BGP記事一覧/

BGP WEIGHT属性

目次

WEIGHTとは

WEIGHT(ウェイト)は、そのルータ1台の中だけで経路の優先度を決めるためのシスコ独自のパラメータです。BGPパス属性とベストパス選択で扱ってきたLOCAL_PREFMULTI_EXIT_DISCと違い、RFCで定義されたBGPのパス属性ではありません。UPDATEメッセージに載る場所がそもそも無く、隣のルータには一切伝わりません。

項目内容
Type codeなし(BGPのパス属性ではない)
分類シスコ独自のローカル値
16ビットの符号なし整数(0〜65535)。大きいほうが優先
既定値受信した経路は0自分で生成した経路は32768
伝わる範囲そのルータの中だけ。広告には載らない
定義Understand the Importance of BGP Weight Path Attribute(シスコ)

値が大きいほうが優先という向きはLOCAL_PREFと同じで、MEDとは逆です。IOS XRのshow bgpではWeight列に表示されます。

広告には載らない

WEIGHTはBGPのパス属性ではないので、UPDATEメッセージに入れる場所がありません。隣のルータがiBGPピアであってもeBGPピアであっても同じで、設定したルータの外には出ていきません。

このためWEIGHTは「このルータから出ていくトラフィックの向きを、このルータだけで変えたい」という場面の道具になります。AS全体で出口をそろえたいならLOCAL_PREFを使います。

既定値は0、自分で生成した経路は32768

WEIGHTには2つの既定値があります。

経路既定のWEIGHT
BGPピアから受信した経路0
自分で生成した経路network文、redistribute、集約)32768

32768は16ビットの範囲(0〜65535)のちょうど真ん中です。自分で生成した経路には受信経路より圧倒的に大きい値が付くため、同じプレフィックスを自分でも生成していてピアからも受け取っている場合、何もしなければ自分で生成したほうが勝ちます。

ベストパス選択の3番目に「自分で生成した経路を優先する」という条件がありますが、WEIGHTは1番目なので、実際にはそこへ下りる前に32768で決着が付きます。この点は後半の検証で実際に確かめます。

ベストパス選択での位置づけ

WEIGHTはベストパス選択の1番目、つまりいちばん最初に見られる条件です。

順位条件
1WEIGHTが大きい
2LOCAL_PREFが大きい
3自分で生成した経路
4AS_PATHが短い
5ORIGINが小さい(IGP < EGP < incomplete)
6MEDが小さい
7eBGP > iBGP

いちばん上にあるということは、WEIGHTに差を付けた時点で、それより下の条件は一切見られないということです。AS_PATHが長かろうがMEDが大きかろうが関係ありません。強力な反面、効きすぎるので、使うときは対象プレフィックスを絞るなどの注意が要ります。

LOCAL_PREFとの使い分け

WEIGHTLOCAL_PREFは「どちらも大きいほうが優先」「どちらも自ASからの出口を決める」という点で似ています。違いは効く範囲です。

項目WEIGHTLOCAL_PREF
BGPのパス属性かいいえ(シスコ独自)はい(well-known discretionary、Type 5)
広告に載るか載らないiBGPピアへは載る(eBGPピアへは載らない)
効く範囲設定したルータ1台AS全体
ベストパス選択の順位1番目2番目
既定値0 / 自局生成は32768100

AS内の全ルータで出口をそろえたいならLOCAL_PREF、「このルータだけ」「とりあえずここだけ切り替えたい」ならWEIGHT、という使い分けになります。WEIGHTはAS内の他のルータには伝わらないため、AS内でベストパスの判断が食い違い、経路がループする形になりうる点には注意が必要です。

設定方法

IOS XRでは2つの入れ方があります。

ネイバー単位(そのピアから受け取る経路すべてに同じ値)

router bgp 65001
 neighbor 10.1.4.4
  address-family ipv4 unicast
   weight 200

ルートポリシー(プレフィックスを絞って値を変える)

route-policy SET-WEIGHT
  if destination in (192.168.5.0/24) then
    set weight 200
  endif
  pass
end-policy
!
router bgp 65001
 neighbor 10.1.4.4
  address-family ipv4 unicast
   route-policy SET-WEIGHT in

ネイバー単位で入れた場合はshow bgp neighborDefault weight 200と出ます。

実機での検証

XRd(IOS XR 26.1.1)6台のラボで、WEIGHTの効き方を8つのSTEPで確認します。トポロジはMED属性の検証で使ったものと同じです。

WEIGHT検証ラボのトポロジ。AS 65001のR1・R2がAS 65002のR4とeBGPで接続し、R4はAS 65003のR5とも接続する。R5はAS 65004のR6と、R6はR1とも接続する。R1は192.168.5.0/24をR4経由・R6経由・R2経由の3経路で学習する
ASルータ役割
65001R1・R2AS境界。R3とiBGPフルメッシュ(Loopback0、next-hop-self)+OSPF area 0
65001R3AS内部。eBGPピアを持たない
65002R4R1・R2・R5とeBGP
65003R5R4・R6とeBGP。192.168.5.0/24を広告
65004R6R5・R1とeBGP。192.168.6.0/24を広告

STEP 0〜3の観測対象はR1から見た192.168.5.0/24です。R1はこのプレフィックスを3方向から受け取り、AS_PATH長はいずれも2で並びます。

  • R4から(65002 65003
  • R6から(65004 65003
  • R2からiBGPで(65002 65003

STEP 4〜7の観測対象はR1から見た192.168.6.0/24に切り替えます。R6が広告しているこのプレフィックスを、途中からR1自身にも生成させ、自局生成の32768がどう効くかを見ます。

STEP操作見たいこと
0ポリシーなし全パスがWeight 0。自局生成の192.168.1.0/24だけ32768
1R1のR4向けにweight 200R1のベストがR4経由へ。R3は変わらない(ルータローカル)
2R1のR6向け入方向にLOCAL_PREF 200LOCAL_PREFで優遇してもWEIGHTが勝つ
3weight 200を撤去ここで初めてLOCAL_PREFが効く
4R1に192.168.6.0/24のstatic+networkを追加自局生成の32768が受信経路に勝つ
5networkset weight 0を付けるWEIGHTを下げても自局生成が勝ったまま
6R1のR6向けにweight 40000R6経由が勝ち、自局経路が「浮いた」状態になる
7R6のLoopback1をshutdown(最終状態)自局経路が浮上してベストに戻る

STEP 0:初期状態

R1のBGPテーブルです。Weight列を見ます。

R1:show bgp(STEP 0)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0/24     0.0.0.0                  0         32768 i
*>i192.168.2.0/24     10.0.0.2                 0    100      0 i
*>i192.168.3.0/24     10.0.0.3                 0    100      0 i
* i192.168.4.0/24     10.0.0.2                 0    100      0 65002 i
*>                    10.1.4.4                 0             0 65002 i
*                     10.1.6.6                               0 65004 65003 65002 i
* i192.168.5.0/24     10.0.0.2                      100      0 65002 65003 i
*                     10.1.4.4                               0 65002 65003 i
*>                    10.1.6.6                               0 65004 65003 i
*> 192.168.6.0/24     10.1.6.6                 0             0 65004 i

Processed 6 prefixes, 10 paths

自分のLoopback1network文で広告している192.168.1.0/24だけが32768で、BGPピアから受け取った経路はすべて0です。複数のパスを持つプレフィックスはどれもWEIGHTが0で並んでいるので、ベストパス選択は1番目では決着せず、下の条件まで下ります。

192.168.5.0/24は3パスあり、ベストはR6経由(10.1.6.6)が選ばれています。この決着はWEIGHTとは関係のない下位の条件によるものなので、ここでは追いません。以降のSTEPでは、この経路がWEIGHTだけで動くことを見ます。

STEP 1:R1のR4向けに weight 200 を入れる

R1で、R4(10.1.4.4)から受け取る経路にWEIGHT 200を付けます。

router bgp 65001
 neighbor 10.1.4.4
  address-family ipv4 unicast
   weight 200
R1:show bgp(STEP 1)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0/24     0.0.0.0                  0         32768 i
*>i192.168.2.0/24     10.0.0.2                 0    100      0 i
*>i192.168.3.0/24     10.0.0.3                 0    100      0 i
* i192.168.4.0/24     10.0.0.2                 0    100      0 65002 i
*>                    10.1.4.4                 0           200 65002 i
*                     10.1.6.6                               0 65004 65003 65002 i
* i192.168.5.0/24     10.0.0.2                      100      0 65002 65003 i
*>                    10.1.4.4                             200 65002 65003 i
*                     10.1.6.6                               0 65004 65003 i
*> 192.168.6.0/24     10.1.6.6                 0             0 65004 i

Processed 6 prefixes, 10 paths

R4から受け取った192.168.4.0/24192.168.5.0/24のWEIGHTが200になり、192.168.5.0/24のベストがR6経由からR4経由に移りました。AS_PATH長もLOCAL_PREFも変えていません。1番目の条件で決着したので、下の条件は一切見られていません。

WEIGHTが「受信時に付ける」値であることは、routes(入方向ポリシー適用後)とreceived routes(適用前の生の経路)を並べると分かります。

R1:show bgp neighbors 10.1.4.4 routes(適用後)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.4.0/24     10.1.4.4                 0           200 65002 i
*> 192.168.5.0/24     10.1.4.4                             200 65002 65003 i

Processed 2 prefixes, 2 paths
R1:show bgp neighbors 10.1.4.4 received routes(適用前)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*  192.168.4.0/24     10.1.4.4                 0             0 65002 i
*  192.168.5.0/24     10.1.4.4                               0 65002 65003 i

Processed 2 prefixes, 2 paths

同じ経路が、受け取った時点では0、R1のBGPテーブルに入る時点では200になっています。

R3から見ると何も変わっていない

R1と同じAS内にいるR3のBGPテーブルです。

R3:show bgp(STEP 1)
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*>i192.168.1.0/24     10.0.0.1                 0    100      0 i
*>i192.168.2.0/24     10.0.0.2                 0    100      0 i
*> 192.168.3.0/24     0.0.0.0                  0         32768 i
*>i192.168.4.0/24     10.0.0.1                 0    100      0 65002 i
* i                   10.0.0.2                 0    100      0 65002 i
*>i192.168.5.0/24     10.0.0.1                      100      0 65002 65003 i
* i                   10.0.0.2                      100      0 65002 65003 i
*>i192.168.6.0/24     10.0.0.1                 0    100      0 65004 i

Processed 6 prefixes, 8 paths

R3にとっての192.168.5.0/24のWEIGHTは0のままです。R1が200を付けたことはR3には伝わっていません。WEIGHTはそのルータの中だけの値だからです。

UPDATEにWEIGHTは載っていない

R1-R3間のリンクでBGPをキャプチャーしてあります。STEP 1でR1のベストがR4経由に変わったため、R1はR3へ192.168.5.0/24を再広告しました。添付のキャプチャーのNo.111がそのUPDATEです(1つのTCPセグメントに2つのUPDATEが入っており、以下は192.168.5.0/24のほうです)。

No.111 R1 → R3(iBGP)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 64
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 41
    Path attributes
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
            Type Code: MP_REACH_NLRI (14)
            Length: 13
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Unicast (1)
            Next hop: 10.0.0.1
                IPv4 Address: 10.0.0.1
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                192.168.5.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.5.0
        Path Attribute - ORIGIN: IGP
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: ORIGIN (1)
            Length: 1
            Origin: IGP (0)
        Path Attribute - AS_PATH: 65002 65003 
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: AS_PATH (2)
            Length: 10
            AS Path segment: 65002 65003
                Segment type: AS_SEQUENCE (2)
                Segment length (number of ASN): 2
                AS4: 65002
                AS4: 65003
        Path Attribute - LOCAL_PREF: 100
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: LOCAL_PREF (5)
            Length: 4
            Local preference: 100

載っているパス属性はMP_REACH_NLRIORIGINAS_PATHLOCAL_PREFの4つだけで、WEIGHTに相当するものはどこにもありません。R1が付けた200はR1のBGPテーブルの中にしか存在しない値なので、UPDATEに入れる場所がそもそもないのです。

上のtshark出力のパケット(No.111 UPDATE)のpcapをダウンロード

STEP 2:LOCAL_PREF 200 を入れてもWEIGHTが勝つ

R1で、R6(10.1.6.6)から受け取る192.168.5.0/24にLOCAL_PREF 200を付けます。R6経由を優遇する設定です。

route-policy LP-200
  if destination in (192.168.5.0/24) then
    set local-preference 200
  endif
  pass
end-policy
!
router bgp 65001
 neighbor 10.1.6.6
  address-family ipv4 unicast
   route-policy LP-200 in
R1:show bgp 192.168.5.0/24(STEP 2)
RP/0/RP0/CPU0:R1#show bgp 192.168.5.0/24

Tue Sep  8 10:24:35.554 UTC
BGP routing table entry for 192.168.5.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 11           11
Last Modified: Sep  8 10:24:08.774 for 00:00:26
Paths: (5 available, best #2)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002 65003, (received & used)
    10.0.0.2 (metric 3) from 10.0.0.2 (10.0.0.2)
      Origin IGP, localpref 100, valid, internal
      Received Path ID 0, Local Path ID 0, version 0
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  65002 65003
    10.1.4.4 from 10.1.4.4 (10.0.0.4)
      Origin IGP, localpref 100, weight 200, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 10
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Not advertised to any peer
  65002 65003, (received-only)
    10.1.4.4 from 10.1.4.4 (10.0.0.4)
      Origin IGP, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #4: Received by speaker 0
  Not advertised to any peer
  65004 65003
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, localpref 200, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #5: Received by speaker 0
  Not advertised to any peer
  65004 65003, (received-only)
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

Path #4がR6経由でlocalpref 200、Path #2がR4経由でlocalpref 100, weight 200です。ベストはPath #2のままで、LOCAL_PREFで優遇したはずのR6経由は選ばれません。1番目(WEIGHT)で決着しているため、2番目(LOCAL_PREF)は見られていないということです。

(received-only)と付いたPath #3・#5はsoft-reconfiguration inbound alwaysが保持している「入方向ポリシー適用前」のコピーで、ベストパス選択の対象ではありません。

STEP 3:WEIGHTを外すとLOCAL_PREFが効く

weight 200だけを撤去します。LOCAL_PREF 200のポリシーは残したままです。

router bgp 65001
 neighbor 10.1.4.4
  address-family ipv4 unicast
   no weight 200
R1:show bgp 192.168.5.0/24(STEP 3)
RP/0/RP0/CPU0:R1#show bgp 192.168.5.0/24

Tue Sep  8 10:28:08.555 UTC
BGP routing table entry for 192.168.5.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 13           13
Last Modified: Sep  8 10:27:04.774 for 00:01:03
Paths: (3 available, best #2)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002 65003, (received & used)
    10.1.4.4 from 10.1.4.4 (10.0.0.4)
      Origin IGP, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  65004 65003
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, localpref 200, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 13
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Not advertised to any peer
  65004 65003, (received-only)
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

ベストがR6経由(Path #2)に移り、その理由がlocalpref 200であることが読み取れます。WEIGHTが無くなって初めて2番目のLOCAL_PREFが評価された、という順序の裏取りです。

STEP 4:R1でも 192.168.6.0/24 を生成する

ここから観測対象を192.168.6.0/24に変えます。R6が広告しているこのプレフィックスを、R1でもNull0へのstaticとnetwork文で生成します。R6が落ちたときの受け皿として同じプレフィックスをローカルにも持たせる、というよくある構成です。

router static
 address-family ipv4 unicast
  192.168.6.0/24 Null0
 !
!
router bgp 65001
 address-family ipv4 unicast
  network 192.168.6.0/24
R1:show bgp 192.168.6.0/24(STEP 4)
RP/0/RP0/CPU0:R1#show bgp 192.168.6.0/24

Tue Sep  8 10:31:04.448 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 14           14
Last Modified: Sep  8 10:30:36.774 for 00:00:27
Paths: (2 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Local
    0.0.0.0 from 0.0.0.0 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, weight 32768, valid, local, best, group-best
      Received Path ID 0, Local Path ID 1, version 14
  Path #2: Received by speaker 0
  Not advertised to any peer
  65004, (received & used)
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, metric 0, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

自局生成のPath #1がweight 32768でベストになりました。R6から受け取ったPath #2はWEIGHT 0なので、1番目の条件で負けています。ベストパス選択の3番目に「自分で生成した経路」という条件がありますが、そこへ下りる前にWEIGHTで決まっています。

R1が外へ広告する内容も変わります。

R1:show bgp neighbors 10.1.4.4 advertised-routes(STEP 4)
RP/0/RP0/CPU0:R1#show bgp neighbors 10.1.4.4 advertised-routes

Tue Sep  8 10:31:07.589 UTC
Network            Next Hop        From            AS Path
192.168.1.0/24     10.1.4.1        Local           65001i
192.168.2.0/24     10.1.4.1        10.0.0.2        65001i
192.168.3.0/24     10.1.4.1        10.0.0.3        65001i
192.168.4.0/24     10.1.4.1        10.1.4.4        65001 65002i
192.168.5.0/24     10.1.4.1        10.1.6.6        65001 65004 65003i
192.168.6.0/24     10.1.4.1        Local           65001i

Processed 6 prefixes, 6 paths

192.168.6.0/24FromLocal、AS_PATHが65001になりました。STEP 3までは10.1.6.6から受け取った経路をそのまま中継していたので65001 65004でした。

一方でRIBには注意が必要です。

R1:show route(STEP 4)
RP/0/RP0/CPU0:R1#show route

Tue Sep  8 10:31:02.368 UTC

Codes: C - connected, S - static, R - RIP, B - BGP, (>) - Diversion path
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
       i - ISIS, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, su - IS-IS summary null, * - candidate default
       U - per-user static route, o - ODR, L - local, G  - DAGR, l - LISP
       A - access/subscriber, a - Application route
       M - mobile route, r - RPL, t - Traffic Engineering, (!) - FRR Backup path
       s - local SRv6 route, z - local IID route

Gateway of last resort is not set

L    10.0.0.1/32 is directly connected, 00:18:58, Loopback0
O    10.0.0.2/32 [110/3] via 10.1.3.3, 00:18:18, GigabitEthernet0/0/0/0
O    10.0.0.3/32 [110/2] via 10.1.3.3, 00:18:24, GigabitEthernet0/0/0/0
C    10.1.3.0/24 is directly connected, 00:18:52, GigabitEthernet0/0/0/0
L    10.1.3.1/32 is directly connected, 00:18:52, GigabitEthernet0/0/0/0
C    10.1.4.0/24 is directly connected, 00:18:52, GigabitEthernet0/0/0/1
L    10.1.4.1/32 is directly connected, 00:18:52, GigabitEthernet0/0/0/1
C    10.1.6.0/24 is directly connected, 00:18:52, GigabitEthernet0/0/0/2
L    10.1.6.1/32 is directly connected, 00:18:52, GigabitEthernet0/0/0/2
O    10.2.3.0/24 [110/2] via 10.1.3.3, 00:18:24, GigabitEthernet0/0/0/0
O    10.2.4.0/24 [110/3] via 10.1.3.3, 00:18:18, GigabitEthernet0/0/0/0
C    192.168.1.0/24 is directly connected, 00:18:58, Loopback1
L    192.168.1.1/32 is directly connected, 00:18:58, Loopback1
B    192.168.2.0/24 [200/0] via 10.0.0.2, 00:16:58
B    192.168.3.0/24 [200/0] via 10.0.0.3, 00:16:58
B    192.168.4.0/24 [20/0] via 10.1.4.4, 00:03:58
B    192.168.5.0/24 [20/0] via 10.1.6.6, 00:03:58
S    192.168.6.0/24 is directly connected, 00:00:27, Null0

staticのアドミニストレーティブディスタンス(1)はBGPの外部経路(20)より小さいので、RIBはS(static)のNull0のままです。この構成でR1自身が192.168.6.0/24宛てのトラフィックを転送することはできません。あくまで「広告を出すためのアンカー経路」であって、この後のSTEPで“浮かび上がる”のはBGPテーブルと広告の側だ、という点は押さえておく必要があります。

STEP 5:自局生成のWEIGHTを 0 に下げてみる

自局生成の経路を弱めれば、R6から受け取った経路が勝つのではないか——という発想を試します。network文にルートポリシーを付けてset weight 0します。

route-policy SET-WEIGHT-0
  set weight 0
  pass
end-policy
!
router bgp 65001
 address-family ipv4 unicast
  network 192.168.6.0/24 route-policy SET-WEIGHT-0
R1:show bgp 192.168.6.0/24(STEP 5)
RP/0/RP0/CPU0:R1#show bgp 192.168.6.0/24

Tue Sep  8 10:33:51.523 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 15           15
Last Modified: Sep  8 10:33:17.774 for 00:00:33
Paths: (2 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Local
    0.0.0.0 from 0.0.0.0 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, valid, local, best, group-best
      Received Path ID 0, Local Path ID 1, version 15
  Path #2: Received by speaker 0
  Not advertised to any peer
  65004, (received & used)
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, metric 0, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

WEIGHTは確かに落ちました(Path #1の行からweight 32768が消えています)。しかしベストはPath #1のままです。

これは、WEIGHTが並んだあとの条件がどちらも自局生成に有利だからです。3番目の「自分で生成した経路」でも、4番目の「AS_PATHが短い」(自局生成はAS_PATH長0、R6経由は65004で長さ1)でも、自局生成のほうが勝ちます。WEIGHTは0が下限なので、自局生成の経路を「これ以上下げる」ことはできません。受信経路を選ばせたいなら、受信側のWEIGHTを32768より上に持ち上げるしかありません。

STEP 6:R6向けに weight 40000 を入れる

受信側を持ち上げます。R1のR6向けネイバーにWEIGHT 40000(32768より大きい値)を設定します。

router bgp 65001
 neighbor 10.1.6.6
  address-family ipv4 unicast
   weight 40000
R1:show bgp 192.168.6.0/24(STEP 6)
RP/0/RP0/CPU0:R1#show bgp 192.168.6.0/24

Tue Sep  8 10:37:03.692 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 18           18
Last Modified: Sep  8 10:36:36.774 for 00:00:27
Paths: (3 available, best #2)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Path #1: Received by speaker 0
  Not advertised to any peer
  Local
    0.0.0.0 from 0.0.0.0 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, valid, local, group-best
      Received Path ID 0, Local Path ID 0, version 0
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  65004
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, metric 0, localpref 100, weight 40000, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 18
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Not advertised to any peer
  65004, (received-only)
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, metric 0, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

R6から受け取ったPath #2がweight 40000でベストになり、自局生成のPath #1は「BGPテーブルには居るがベストではない」状態、つまり浮いた状態になりました。

広告も元に戻ります。

R1:show bgp neighbors 10.1.4.4 advertised-routes(STEP 6)
RP/0/RP0/CPU0:R1#show bgp neighbors 10.1.4.4 advertised-routes

Tue Sep  8 10:37:07.009 UTC
Network            Next Hop        From            AS Path
192.168.1.0/24     10.1.4.1        Local           65001i
192.168.2.0/24     10.1.4.1        10.0.0.2        65001i
192.168.3.0/24     10.1.4.1        10.0.0.3        65001i
192.168.4.0/24     10.1.4.1        10.1.6.6        65001 65004 65003 65002i
192.168.5.0/24     10.1.4.1        10.1.6.6        65001 65004 65003i
192.168.6.0/24     10.1.4.1        10.1.6.6        65001 65004i

Processed 6 prefixes, 6 paths

192.168.6.0/24のAS_PATHが65001 65004に戻り、R6経由を中継している形になりました。

ネイバー単位のWEIGHTはそのピアから受け取る全プレフィックスに効くので、副作用として192.168.4.0/24192.168.5.0/24もR6経由(65001 65004 65003 …)に変わっています。プレフィックスを絞りたい場合は、weightをネイバーに直接書くのではなく、入方向ルートポリシーのset weightで対象を限定します。

STEP 7:R6の Loopback1 を落とす(最終状態)

192.168.6.0/24の本来の広告元であるR6のLoopback1をshutdownします。

interface Loopback1
 shutdown
R1:show bgp 192.168.6.0/24(STEP 7)
RP/0/RP0/CPU0:R1#show bgp 192.168.6.0/24

Tue Sep  8 10:39:59.616 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 19           19
Last Modified: Sep  8 10:39:28.774 for 00:00:30
Paths: (1 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.3 0.4 
  Local
    0.0.0.0 from 0.0.0.0 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, valid, local, best, group-best
      Received Path ID 0, Local Path ID 1, version 19

R6から受け取っていたパスが消え、残った自局生成の経路がベストに浮上しました。

R1:show bgp neighbors 10.1.4.4 advertised-routes(STEP 7)
RP/0/RP0/CPU0:R1#show bgp neighbors 10.1.4.4 advertised-routes

Tue Sep  8 10:40:02.832 UTC
Network            Next Hop        From            AS Path
192.168.1.0/24     10.1.4.1        Local           65001i
192.168.2.0/24     10.1.4.1        10.0.0.2        65001i
192.168.3.0/24     10.1.4.1        10.0.0.3        65001i
192.168.4.0/24     10.1.4.1        10.1.6.6        65001 65004 65003 65002i
192.168.5.0/24     10.1.4.1        10.1.6.6        65001 65004 65003i
192.168.6.0/24     10.1.4.1        Local           65001i

Processed 6 prefixes, 6 paths

広告もLocal / AS_PATH 65001に戻り、AS 65001が自分で192.168.6.0/24を出している状態になりました。普段はR6経由を使い、R6が落ちたときだけ自分の経路が出る——staticルートのフローティング(アドミニストレーティブディスタンスを上げて待機させる)と同じ考え方を、BGPではWEIGHTで作れる、ということです。

ただし前述のとおり、この構成でR1のRIBはNull0のままです。BGPテーブルと広告の上では切り替わりますが、R1自身の転送は行われません。実運用でこの形を使うのは、集約経路のアンカーのように「広告を出すこと自体が目的」の場合になります。

検証Configおよびshow結果

各STEPで6台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は STEP 7 のもの)。

ファイル内容
..._show.txtshow version / show interface description / show route / show bgp / show bgp neighbors <ピア> advertised-routes・routes・received routes など
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)

最終状態のR1には、192.168.6.0/24のNull0 static、network 192.168.6.0/24 route-policy SET-WEIGHT-0、R6向けのweight 40000192.168.5.0/24にLOCAL_PREF 200を付けるLP-200が入っています。R6はLoopback1がshutdownされた状態です。

STEP 0:初期状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 1:R1のR4向けに weight 200

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 2:R1のR6向け入方向に LOCAL_PREF 200

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 3:weight 200 を撤去

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 4:R1に 192.168.6.0/24 のstatic+network を追加

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 5:networkset weight 0 を付ける

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 6:R1のR6向けに weight 40000

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 7:R6の Loopback1 を shutdown(最終状態)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

R1-R3間(iBGP)のキャプチャー全体です。

検証で取得したキャプチャー全体(bgp-weight.pcap)をダウンロード

参考

資料タイトル概要
CiscoUnderstand the Importance of BGP Weight Path AttributeWEIGHTがシスコ独自でローカルにしか効かないこと、既定値が0、自局生成では32768になることを説明した文書。
CiscoSelect BGP Best-path Algorithmベストパス選択の13ステップ。WEIGHTが1番目にあることを確認できる。
CiscoConfigure and Verify BGP Path Selection in IOS-XRIOS XRでのベストパス選択の確認方法。

関連記事