LOCAL_PREFとは
LOCAL_PREF(LOCAL_PREFERENCE、Type code 5)は、自AS内でどの出口を使うかを揃えるためのパス属性です。BGPパス属性とベストパス選択で解説したとおりwell-known discretionaryに分類されます。
「well-known」はすべての実装が理解できることを、「discretionary」はUPDATEに入れるかどうかが実装の裁量であることを意味します。ただし裁量といっても自由なわけではなく、RFC 4271 5.1.5節がiBGPピアへのUPDATEには必ず含め、eBGPピアへのUPDATEには含めてはならないと定めています。「入れる/入れない」の判断基準がピアの種別で決まっている、という意味での裁量です。
| 項目 | 内容 |
|---|---|
| Type code | 5 |
| 分類 | Well-known discretionary |
| 値 | 4バイトの符号なし整数。大きいほうが優先 |
| 既定値 | 100(IOS XRを含む多くの実装) |
| 伝わる範囲 | 自AS内のみ(iBGPには載る、eBGPには載らない) |
| 定義 | RFC 4271 5.1.5節 |
eBGPには載らない
LOCAL_PREFの性格を決めているのが、この「eBGPには載せない」という規則です。RFC 4271 5.1.5節は次の3点を定めています。
| 場面 | 規定 |
|---|---|
| iBGPピアへ広告するとき | LOCAL_PREFを必ず含める |
| eBGPピアへ広告するとき | LOCAL_PREFを含めてはならない |
| eBGPピアから受け取ったとき | 含まれていても無視する |
つまりLOCAL_PREFは「自ASの中だけで通用する値」です。AS境界のルータが外から受け取った経路に値を付け、それをiBGPでAS内に配ることで、AS内のすべてのルータが同じ出口を選ぶようになります。逆に、隣接ASに「こちらの入口を使ってほしい」と伝える手段にはなりません。それはMEDの役目です。
後述の検証ラボの流れで書くと次のようになります。AS 65003のR5から届いたUPDATEにはLOCAL_PREFが入っておらず、AS境界のR2が入方向ポリシーで200を付けます。その値はiBGPでAS内のR1・R3に伝わりますが、R1がAS 65002のR4へ広告するときには再び外されます。
パス属性はそれぞれ伝わる範囲が違い、LOCAL_PREFはその中で「自ASの内側だけ」という位置にあります。
| 属性 | 伝わる範囲 |
|---|---|
| WEIGHT | そのルータの中だけ(広告に載らない。シスコ独自でRFCの属性ではない) |
LOCAL_PREF | 自AS内だけ(iBGPには載る、eBGPには載らない) |
MULTI_EXIT_DISC(MED) | 隣接ASまで(既定ではその先のASへは伝えない) |
AS_PATH | 経路が通るすべてのAS |
ベストパス選択での位置づけ
LOCAL_PREFはベストパス選択の2番目に評価されます。BGPパス属性とベストパス選択の順序でいうと、WEIGHT(シスコ独自、1番目)の次、AS_PATH長(4番目)より前です。
| 順位 | 比較項目 |
|---|---|
| 1 | WEIGHT(大きいほう。シスコ独自) |
| 2 | LOCAL_PREF(大きいほう) |
| 3 | 自ASで生成した経路 |
| 4 | AS_PATH長(短いほう) |
| 5 | ORIGIN(IGP < EGP < incomplete) |
| 6 | MED(小さいほう) |
AS_PATHより前にあるということは、AS_PATHが長い経路を意図的に選ばせられるということです。「AS_PATH的には遠回りだが、こちらの回線のほうが安い/太い」という運用上の要求を素直に表現できます。後述の検証ではこれを実機で確認します。
既定値100と比較の向き
IOS XRを含む多くの実装で、LOCAL_PREFの既定値は100です。eBGPから受け取った経路にはLOCAL_PREFが付いていないので、受け取ったルータが自分の既定値を割り当てます。show bgpで外部から受け取った経路にlocalpref 100と表示されるのは、送信元がそう言ってきたからではなく、受信側が自分で付けた値です。
比較の向きはMEDと逆で、大きいほうが優先されます。混同しやすいので、役割とセットで覚えるのが確実です。
| 属性 | 向き | 誰に対する意思表示か |
|---|---|---|
LOCAL_PREF | 大きいほうを選ぶ | 自AS内のルータに「この出口を使え」 |
| MED | 小さいほうを選ぶ | 隣接ASに「この入口を使ってほしい」 |
設定方法
IOS XRでは、通常はeBGPネイバーの入方向ポリシーでset local-preferenceを使います。「この隣接ASから来た経路を優先する/しない」という設定になります。
route-policy <ポリシー名>
set local-preference <値>
pass
end-policy
!
router bgp <AS番号>
neighbor <eBGPピアのアドレス>
address-family ipv4 unicast
route-policy <ポリシー名> inルータ全体の既定値を変えるコマンドもあります。個別のポリシーを書かずに「このルータが受け取る経路は全体的に優先度を下げる」といった調整をするときに使います。
router bgp <AS番号>
bgp default local-preference <値>実機での検証
XRd(IOS XR 26.1.1)5台のラボで、次の4点を確認します。
LOCAL_PREFがAS_PATH長より優先されること(AS_PATHが長いほうを選ばせられる)- 付けた値がiBGPでAS全体に伝わり、AS内のすべてのルータが同じ出口を向くこと
- 同点になったときは次の比較項目(
AS_PATH長)で決着すること - eBGPピアへは
LOCAL_PREFが載らないこと(出方向ポリシーで設定しても無視される)
構成の要点は次のとおりです。
- R4(AS 65002)が
192.168.4.0/24を広告します。この経路をAS 65001がどちらの出口から取るかを追いかけます - AS 65001から見た経路は2つあります。R1から直接AS 65002へ出る
AS_PATH 65002(短い)と、R2からAS 65003を経由するAS_PATH 65003 65002(長い)です - R3はAS境界ではありません。AS内部のルータがどちらの出口を向くかが、
LOCAL_PREFがAS全体に効いているかどうかの指標になります - AS 65001内のiBGPはLoopback0どうしのフルメッシュで、
next-hop-selfを入れています(BGP next-hop-selfを参照)
| ルータ | AS | 役割 | 広告するネットワーク |
|---|---|---|---|
| R1 | 65001 | AS境界(R4とeBGP) | 192.168.1.0/24 |
| R2 | 65001 | AS境界(R5とeBGP) | 192.168.2.0/24 |
| R3 | 65001 | 内部(iBGPのみ) | 192.168.3.0/24 |
| R4 | 65002 | R1・R5とeBGP | 192.168.4.0/24 |
| R5 | 65003 | R2・R4とeBGP | 192.168.5.0/24 |
各STEPで変更する内容です。設定を変えるのはR1とR2だけです。
| STEP | 操作 |
|---|---|
| 0 | ポリシーはPASS-ALLのみ(初期状態) |
| 1 | R2のR5向け入方向にLOCAL_PREF 200 |
| 2 | R1のR4向け入方向にもLOCAL_PREF 200(同点にする) |
| 3 | R1のR4向け出方向にset local-preference 200 |
| 4 | すべて撤去(設定はSTEP 0と同一に戻る) |
パケットキャプチャーは3か所で取得しています(いずれもtcp port 179)。R1 - R3間はAS 65001内部のリンクで、R1 - R3のiBGPセッションがここを通ります。R1 - R4間とR2 - R5間はeBGPのリンクです。
STEP 0:AS_PATHが短いR1経由が選ばれる
AS内部のR3から見た状態です。192.168.4.0/24は10.0.0.1(R1)経由で、LocPrfは既定の100です。
BGP router identifier 10.0.0.3, local AS number 65001
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0000000 RD version: 8
BGP main routing table version 8
BGP NSR Initial initsync version 3 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
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
*>i192.168.5.0/24 10.0.0.2 0 100 0 65003 i
Processed 5 prefixes, 5 paths決め手になっているのはAS境界のR2です。R2は192.168.4.0/24を2つ持っていて、LOCAL_PREFはどちらも100なので、次の比較項目であるAS_PATH長で決まります。自分のeBGP(65003 65002、2個)よりR1からのiBGP(65002、1個)のほうが短いため、R2は自分の回線を使わずR1経由を選んでいます。
BGP routing table entry for 192.168.4.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 8 8
Last Modified: Sep 7 22:35:58.774 for 00:04:11
Paths: (2 available, best #1)
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.2.5.5
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.2.5.5
65002, (received & used)
10.0.0.1 (metric 3) from 10.0.0.1 (10.0.0.1)
Origin IGP, metric 0, localpref 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 8
Path #2: Received by speaker 0
Not advertised to any peer
65003 65002, (received & used)
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, localpref 100, valid, external, group-best
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)R3からのtracerouteです。R1(10.1.3.1)を経由してR4(10.1.4.4)へ、2ホップで届いています。
Type escape sequence to abort.
Tracing the route to 192.168.4.1
1 10.1.3.1 6 msec 5 msec 5 msec
2 10.1.4.4 8 msec * 9 mseciBGPのUPDATEにはLOCAL_PREFが入っている
R1 - R3間のキャプチャー(bgp-local-pref-r1r3.pcap)のNo.49は、R1がiBGPピアへ送ったUPDATEです。Path Attribute - LOCAL_PREF: 100が入っています。以下はWiresharkのtsharkで詳細表示したもので、フラグのビット内訳は<snip>で省略しています。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 61
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 38
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.1.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.1.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: empty
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 0
Path Attribute - MULTI_EXIT_DISC: 0
Flags: 0x80, Optional, Non-transitive, Complete
<snip>
Type Code: MULTI_EXIT_DISC (4)
Length: 4
Multiple exit discriminator: 0
Path Attribute - LOCAL_PREF: 100
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: LOCAL_PREF (5)
Length: 4
Local preference: 100STEP 1:AS_PATHが長いほうを選ばせる
R2がR5から受け取る経路にLOCAL_PREF 200を付けます。
route-policy LP-200
set local-preference 200
pass
end-policy
! neighbor 10.2.5.5
remote-as 65003
description eBGP to R5 (AS 65003)
address-family ipv4 unicast
route-policy LP-200 in
route-policy PASS-ALL out
soft-reconfiguration inbound always
!
!R2のBGPテーブルです。同じ経路が2つ表示されているのが重要で、Path #1は入方向ポリシー適用後(localpref 200)、Path #2は(received-only)つまりR5から受け取った生の状態(localpref 100)です。eBGPで届いた時点ではLOCAL_PREFが付いておらず、R2が自分の既定値100を割り当てていたことが、この2行の差からわかります。
BGP routing table entry for 192.168.4.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 9 9
Last Modified: Sep 7 22:42:41.774 for 00:02:46
Paths: (2 available, best #1)
Advertised IPv4 Unicast paths to update-groups (with more than one peer):
0.3
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to update-groups (with more than one peer):
0.3
65003 65002
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, localpref 200, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 9
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65003 65002, (received-only)
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, localpref 100, valid, external
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)設定していないR3も、この値に従います。R3の192.168.4.0/24は10.0.0.2(R2)経由に変わり、AS_PATHは65003 65002と長いほうです。LOCAL_PREFがAS_PATH長より先に評価されていることが、これで確認できます。
BGP routing table entry for 192.168.4.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 9 9
Last Modified: Sep 7 22:42:42.774 for 00:03:13
Paths: (1 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65003 65002, (received & used)
10.0.0.2 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin IGP, localpref 200, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 9R3のtracerouteは2ホップから3ホップに増え、R2(10.2.3.2)→ R5(10.2.5.5)→ R4(10.4.5.4)と回り道になりました。
Type escape sequence to abort.
Tracing the route to 192.168.4.1
1 10.2.3.2 5 msec 4 msec 4 msec
2 10.2.5.5 6 msec 6 msec 7 msec
3 10.4.5.4 9 msec * 12 msecもっと極端なのがR1です。R1はR4と直接eBGPでつながっているのに、LOCAL_PREF 200のほうを選ぶので、自分の目の前の回線を使わずAS内を逆走してR2から出ていきます。4ホップです。
Type escape sequence to abort.
Tracing the route to 192.168.4.1
1 10.1.3.3 8 msec 5 msec 5 msec
2 10.2.3.2 8 msec 8 msec 8 msec
3 10.2.5.5 13 msec 10 msec 11 msec
4 10.4.5.4 12 msec * 13 msecAS 65001の外には伝わっていない
この時点でAS 65001の中ではLOCAL_PREF 200が共有されていますが、隣接ASのR4には何も伝わっていません。R4が持つAS 65001由来の経路はlocalpref 100(R4自身の既定値)のままです。
BGP routing table entry for 192.168.1.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 6 6
Last Modified: Sep 7 22:35:58.774 for 00:10:21
Paths: (2 available, best #1)
Advertised IPv4 Unicast paths to update-groups (with more than one peer):
0.2
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to update-groups (with more than one peer):
0.2
65001, (received & used)
10.1.4.1 from 10.1.4.1 (10.0.0.1)
Origin IGP, metric 0, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 6
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65003 65001, (received & used)
10.4.5.5 from 10.4.5.5 (10.0.0.5)
Origin IGP, localpref 100, valid, external, group-best
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)一方、AS内のiBGPにはきちんと載っています。R1 - R3間のキャプチャーのNo.98は、R2がR1へ送ったUPDATEで、Path Attribute - LOCAL_PREF: 200が入っています。
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.2
IPv4 Address: 10.0.0.2
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
192.168.4.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.4.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: 65003 65002
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 10
AS Path segment: 65003 65002
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 2
AS4: 65003
AS4: 65002
Path Attribute - LOCAL_PREF: 200
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: LOCAL_PREF (5)
Length: 4
Local preference: 200STEP 2:同点にすると次の比較項目で決まる
R1のR4向け入方向にも同じLOCAL_PREF 200を入れます。これで両方の出口が同点になります。
R2のBGPテーブルには3つのパスが並びます。Path #1(R1からのiBGP、AS_PATH 65002)とPath #2(自分のeBGP、AS_PATH 65003 65002)はどちらもlocalpref 200で、LOCAL_PREFでは決着がつきません。次の比較項目であるAS_PATH長が短いPath #1がベストになっています。
BGP routing table entry for 192.168.4.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 11 11
Last Modified: Sep 7 22:47:22.774 for 00:02:41
Paths: (3 available, best #1)
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.2.5.5
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.2.5.5
65002, (received & used)
10.0.0.1 (metric 3) from 10.0.0.1 (10.0.0.1)
Origin IGP, metric 0, localpref 200, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 11
Path #2: Received by speaker 0
Not advertised to any peer
65003 65002
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, localpref 200, valid, external, group-best
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)
Path #3: Received by speaker 0
Not advertised to any peer
65003 65002, (received-only)
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, localpref 100, valid, external
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)R3も10.0.0.1(R1)経由に戻り、localprefは200、AS_PATHは65002です。tracerouteも2ホップに戻りました。
BGP routing table entry for 192.168.4.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 11 11
Last Modified: Sep 7 22:47:22.774 for 00:03:10
Paths: (1 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002, (received & used)
10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
Origin IGP, metric 0, localpref 200, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 11Type escape sequence to abort.
Tracing the route to 192.168.4.1
1 10.1.3.1 6 msec 4 msec 4 msec
2 10.1.4.4 8 msec * 10 msecSTEP 3:eBGPへは出方向ポリシーで設定しても載らない
R1のR4向けの出方向にset local-preference 200を入れたポリシーを適用します。RFC 4271 5.1.5節では「eBGPピアへのUPDATEに含めてはならない」とされている操作です。IOS XRはこの設定を受け付けてcommitまで通りますが、適用した瞬間に警告のsyslogを出します。
Time Zone UTC, DST disabled
Syslog logging: enabled (0 messages dropped, 0 flushes, 0 overruns)
Console logging: Disabled
Monitor logging: level debugging, 0 messages logged
Trap logging: level informational, 0 messages logged
Buffer logging: level debugging, 88 messages logged
Log Buffer (2097152 bytes):
RP/0/RP0/CPU0:Sep 7 22:49:46.341 UTC: logger[68210]: %OS-SYSLOG-6-LOG_INFO : informational STEP3-BEGIN
RP/0/RP0/CPU0:Sep 7 22:51:53.296 UTC: config[68447]: %MGBL-CONFIG-6-DB_COMMIT : Configuration committed by user 'cisco'. Use 'show configuration commit changes 1000000007' to view the changes.
RP/0/RP0/CPU0:Sep 7 22:51:53.414 UTC: config[68447]: %MGBL-SYS-5-CONFIG_I : Configured from console by cisco
RP/0/RP0/CPU0:Sep 7 22:51:55.711 UTC: config[68462]: %MGBL-CONFIG-6-DB_COMMIT : Configuration committed by user 'cisco'. Use 'show configuration commit changes 1000000008' to view the changes.
RP/0/RP0/CPU0:Sep 7 22:51:55.843 UTC: config[68462]: %MGBL-SYS-5-CONFIG_I : Configured from console by cisco
RP/0/RP0/CPU0:Sep 7 22:51:59.390 UTC: bgp[1084]: %ROUTING-BGP-4-POLICY_EBGP : Local-preference modification operations in Outbound IPv4 Unicast policy "LP-OUT-200" will be ignored for external neighbor/update-group default-IPv4-Uni-UpdGrp-0.1-Out
RP/0/RP0/CPU0:Sep 7 22:54:21.500 UTC: config[68652]: %MGBL-CONFIG-6-DB_COMMIT : Configuration committed by user 'cisco'. Use 'show configuration commit changes 1000000009' to view the changes.
RP/0/RP0/CPU0:Sep 7 22:54:21.714 UTC: config[68652]: %MGBL-SYS-5-CONFIG_I : Configured from console by cisco「外部ネイバー向けの出方向ポリシーにおけるLOCAL_PREFの変更操作は無視される」と明示されています。実際、パケットを見るとLOCAL_PREF属性そのものが存在しません。R1 - R4間のキャプチャー(bgp-local-pref-r1r4.pcap)のNo.87は、このポリシーを適用した直後にR1がR4へ再送したUPDATEです。1つのTCPセグメントに4つのUPDATEが入っており、そのうち3つめの192.168.1.0/24を示します。属性はMP_REACH_NLRI / ORIGIN / AS_PATH / MULTI_EXIT_DISCの4つで、LOCAL_PREFはどこにもありません。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 60
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 37
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.1.4.1
IPv4 Address: 10.1.4.1
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
192.168.1.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.1.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: 65001
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 6
AS Path segment: 65001
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 1
AS4: 65001
Path Attribute - MULTI_EXIT_DISC: 0
Flags: 0x80, Optional, Non-transitive, Complete
<snip>
Type Code: MULTI_EXIT_DISC (4)
Length: 4
Multiple exit discriminator: 0キャプチャー全体で見ても同じです。eBGPの2本(R1 - R4間、R2 - R5間)では、全期間を通じてLOCAL_PREF属性を含むUPDATEが1つもありません。一方、AS内部のR1 - R3間ではすべてのUPDATEにLOCAL_PREFが入っています。
| キャプチャー | 区間 | LOCAL_PREFを含むUPDATE |
|---|---|---|
bgp-local-pref-r1r3.pcap | R1 - R3(AS 65001内部、iBGP) | あり(100 / 200) |
bgp-local-pref-r1r4.pcap | R1 - R4(eBGP) | なし |
bgp-local-pref-r2r5.pcap | R2 - R5(eBGP) | なし |
STEP 4:ポリシーを撤去する
R1・R2からすべてのポリシーを撤去し、PASS-ALLだけに戻します。5台すべてのrunning-configがSTEP 0と一致し、LocPrfも既定の100に戻りました。
BGP router identifier 10.0.0.3, local AS number 65001
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0000000 RD version: 16
BGP main routing table version 16
BGP NSR Initial initsync version 3 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
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
*>i192.168.5.0/24 10.0.0.2 0 100 0 65003 i
Processed 5 prefixes, 5 pathsType escape sequence to abort.
Tracing the route to 192.168.4.1
1 10.1.3.1 25 msec 5 msec 5 msec
2 10.1.4.4 9 msec * 11 msecBGP AS_PATH属性の検証では、ポリシーを外してもベストパスが戻らずセッションのリセットが必要でした。あちらは複数のeBGP経路が同点になり、タイブレークの「経路の学習時期」で決まっていたためです。今回はLOCAL_PREFという上位の比較項目そのものが変わるので、撤去した時点でベストパスも戻ります。
各STEPの結果をまとめます。
| STEP | R1のLOCAL_PREF設定 | R2のLOCAL_PREF設定 | R3が選ぶ192.168.4.0/24 | R3のtraceroute | R1のtraceroute |
|---|---|---|---|---|---|
| 0 | なし | なし | R1経由 65002 / LocPrf 100 | 2ホップ | 1ホップ |
| 1 | なし | 入方向 200 | R2経由 65003 65002 / LocPrf 200 | 3ホップ | 4ホップ |
| 2 | 入方向 200 | 入方向 200 | R1経由 65002 / LocPrf 200 | 2ホップ | 1ホップ |
| 3 | 入方向 200 + 出方向 200 | 入方向 200 | R1経由 65002 / LocPrf 200 | 2ホップ | 1ホップ |
| 4 | なし | なし | R1経由 65002 / LocPrf 100 | 2ホップ | 1ホップ |
STEP 3で出方向に設定を足しても、AS 65001内も隣接ASも何ひとつ変わっていません。LOCAL_PREFは入方向でしか意味を持たない属性だということが、この行から読み取れます。
検証Configおよびshow結果
各STEPで5台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show version / show interface description / show route / show route bgp / show bgp / show bgp summary / show bgp <プレフィックス>(5プレフィックス分) / show bgp neighbor / show bgp neighbors <ピア> advertised-routes / show bgp neighbors <ピア> routes / show bgp neighbors <ピア> received routes / show bgp update-group / show rpl route-policy / show ospf neighbor(R1・R2・R3のみ) / traceroute |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの。STEP 0だけは起動時からの全履歴(BGP・OSPFの隣接確立を含む) |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
最終状態(STEP 4)ではポリシーはPASS-ALLのみで、STEP 0のrunning-configと5台すべて一致しています。
STEP 0:初期状態(AS_PATHが短いR1経由)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
STEP 1:R2のR5向け入方向に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 |
STEP 2:R1のR4向け入方向にも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 |
STEP 3:R1のR4向け出方向にset local-preference 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 |
STEP 4:すべてのポリシーを撤去した状態(最終状態、設定は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 |
キャプチャー全体は次のとおりです。STEP 0からSTEP 4までのすべてのUPDATEが入っています。
R1 - R3間(AS 65001内部・iBGP)のキャプチャー全体をダウンロード
R1 - R4間(eBGP)のキャプチャー全体をダウンロード
R2 - R5間(eBGP)のキャプチャー全体をダウンロード
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | 5.1.5節でLOCAL_PREFを定義。iBGPピアへは必ず含め、eBGPピアへは含めてはならず、外部から受け取った場合は無視することを規定している。9.1.1節でベストパス選択における位置づけを定義。 |
| RFC 4451 | BGP MULTI_EXIT_DISC (MED) Considerations | MEDの比較条件を整理した文書。LOCAL_PREFとの役割の違いを理解するうえで対になる。 |
| RFC 7454 | BGP Operations and Security | 運用上の推奨事項。LOCAL_PREFを使った経路の優先度制御を含む。 |
| IANA | Border Gateway Protocol (BGP) Parameters | パス属性のType codeの割り当て一覧。 |