WEIGHTとは
WEIGHT(ウェイト)は、そのルータ1台の中だけで経路の優先度を決めるためのシスコ独自のパラメータです。BGPパス属性とベストパス選択で扱ってきたLOCAL_PREFやMULTI_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番目、つまりいちばん最初に見られる条件です。
| 順位 | 条件 |
|---|---|
| 1 | WEIGHTが大きい |
| 2 | LOCAL_PREFが大きい |
| 3 | 自分で生成した経路 |
| 4 | AS_PATHが短い |
| 5 | ORIGINが小さい(IGP < EGP < incomplete) |
| 6 | MEDが小さい |
| 7 | eBGP > iBGP |
| … | … |
いちばん上にあるということは、WEIGHTに差を付けた時点で、それより下の条件は一切見られないということです。AS_PATHが長かろうがMEDが大きかろうが関係ありません。強力な反面、効きすぎるので、使うときは対象プレフィックスを絞るなどの注意が要ります。
LOCAL_PREFとの使い分け
WEIGHTとLOCAL_PREFは「どちらも大きいほうが優先」「どちらも自ASからの出口を決める」という点で似ています。違いは効く範囲です。
| 項目 | WEIGHT | LOCAL_PREF |
|---|---|---|
| BGPのパス属性か | いいえ(シスコ独自) | はい(well-known discretionary、Type 5) |
| 広告に載るか | 載らない | iBGPピアへは載る(eBGPピアへは載らない) |
| 効く範囲 | 設定したルータ1台 | AS全体 |
| ベストパス選択の順位 | 1番目 | 2番目 |
| 既定値 | 0 / 自局生成は32768 | 100 |
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 neighborにDefault weight 200と出ます。
実機での検証
XRd(IOS XR 26.1.1)6台のラボで、WEIGHTの効き方を8つのSTEPで確認します。トポロジはMED属性の検証で使ったものと同じです。
| AS | ルータ | 役割 |
|---|---|---|
| 65001 | R1・R2 | AS境界。R3とiBGPフルメッシュ(Loopback0、next-hop-self)+OSPF area 0 |
| 65001 | R3 | AS内部。eBGPピアを持たない |
| 65002 | R4 | R1・R2・R5とeBGP |
| 65003 | R5 | R4・R6とeBGP。192.168.5.0/24を広告 |
| 65004 | R6 | R5・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 |
| 1 | R1のR4向けにweight 200 | R1のベストがR4経由へ。R3は変わらない(ルータローカル) |
| 2 | R1のR6向け入方向にLOCAL_PREF 200 | LOCAL_PREFで優遇してもWEIGHTが勝つ |
| 3 | weight 200を撤去 | ここで初めてLOCAL_PREFが効く |
| 4 | R1に192.168.6.0/24のstatic+networkを追加 | 自局生成の32768が受信経路に勝つ |
| 5 | networkにset weight 0を付ける | WEIGHTを下げても自局生成が勝ったまま |
| 6 | R1のR6向けにweight 40000 | R6経由が勝ち、自局経路が「浮いた」状態になる |
| 7 | R6のLoopback1をshutdown(最終状態) | 自局経路が浮上してベストに戻る |
STEP 0:初期状態
R1のBGPテーブルです。Weight列を見ます。
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自分のLoopback1をnetwork文で広告している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 200Status 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 pathsR4から受け取った192.168.4.0/24と192.168.5.0/24のWEIGHTが200になり、192.168.5.0/24のベストがR6経由からR4経由に移りました。AS_PATH長もLOCAL_PREFも変えていません。1番目の条件で決着したので、下の条件は一切見られていません。
WEIGHTが「受信時に付ける」値であることは、routes(入方向ポリシー適用後)と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 200 65002 i
*> 192.168.5.0/24 10.1.4.4 200 65002 65003 i
Processed 2 prefixes, 2 pathsStatus 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テーブルです。
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 pathsR3にとっての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のほうです)。
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_NLRI・ORIGIN・AS_PATH・LOCAL_PREFの4つだけで、WEIGHTに相当するものはどこにもありません。R1が付けた200はR1のBGPテーブルの中にしか存在しない値なので、UPDATEに入れる場所がそもそもないのです。
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 inRP/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 200RP/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/24RP/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が外へ広告する内容も変わります。
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 paths192.168.6.0/24のFromがLocal、AS_PATHが65001になりました。STEP 3までは10.1.6.6から受け取った経路をそのまま中継していたので65001 65004でした。
一方でRIBには注意が必要です。
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, Null0staticのアドミニストレーティブディスタンス(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-0RP/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 40000RP/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テーブルには居るがベストではない」状態、つまり浮いた状態になりました。
広告も元に戻ります。
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 paths192.168.6.0/24のAS_PATHが65001 65004に戻り、R6経由を中継している形になりました。
ネイバー単位のWEIGHTはそのピアから受け取る全プレフィックスに効くので、副作用として192.168.4.0/24と192.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
shutdownRP/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 19R6から受け取っていたパスが消え、残った自局生成の経路がベストに浮上しました。
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.txt | show 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 40000、192.168.5.0/24にLOCAL_PREF 200を付けるLP-200が入っています。R6はLoopback1がshutdownされた状態です。
STEP 0:初期状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 1:R1のR4向けに weight 200
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 2:R1のR6向け入方向に LOCAL_PREF 200
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 3:weight 200 を撤去
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 4:R1に 192.168.6.0/24 のstatic+network を追加
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 5:network に set weight 0 を付ける
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 6:R1のR6向けに weight 40000
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 7:R6の Loopback1 を shutdown(最終状態)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
R1-R3間(iBGP)のキャプチャー全体です。
検証で取得したキャプチャー全体(bgp-weight.pcap)をダウンロード参考
| 資料 | タイトル | 概要 |
|---|---|---|
| Cisco | Understand the Importance of BGP Weight Path Attribute | WEIGHTがシスコ独自でローカルにしか効かないこと、既定値が0、自局生成では32768になることを説明した文書。 |
| Cisco | Select BGP Best-path Algorithm | ベストパス選択の13ステップ。WEIGHTが1番目にあることを確認できる。 |
| Cisco | Configure and Verify BGP Path Selection in IOS-XR | IOS XRでのベストパス選択の確認方法。 |