AS_PATHとは
AS_PATH(Type code 2)は、その経路がどのASを通ってきたかをAS番号の並びで表すパス属性です。BGPパス属性とベストパス選択で解説したとおりwell-known mandatoryに分類され、UPDATEには必ず含まれます。
BGPが「パスベクター型」と呼ばれるのは、この属性があるためです。距離やコストといった数値ではなく、通過したASの並びそのものを経路の識別子として持ち回ります。
AS_PATHは2つの役割を兼ねています。
| 役割 | 内容 |
|---|---|
| ループ検出 | 受け取った経路のAS_PATHに自ASの番号が含まれていれば、その経路は一度自ASを通っているのでループと判断して破棄する |
| 経路長の比較 | ベストパス選択で、AS_PATHに含まれるAS番号の個数が少ない経路を優先する |
eBGPとiBGPでの付き方
AS_PATHが伸びるのはeBGPピアへ広告するときだけです。iBGPピアへ広告するときは何も足しません。
| 広告先 | 動作 |
|---|---|
| eBGPピア | 自ASの番号をAS_PATHの先頭に追加して送る |
| iBGPピア | AS_PATHをそのまま送る(自ASの番号は追加しない) |
同じAS内のルータどうしで番号を足してしまうと、AS内をいくつのルータが経由したかで長さが変わり、AS単位の距離という意味が壊れてしまうためです。
自分がnetworkで広告を始めた経路は、AS内ではAS_PATHが空のまま流れます。show bgpのPath欄が空欄で末尾のOrigin codeだけが見えるのはこのためです。
Network Next Hop Metric LocPrf Weight Path
*> 192.168.1.0/24 0.0.0.0 0 32768 iセグメントの型
AS_PATHは「セグメント」の並びとして符号化されます。セグメントには型があり、通常見るのはAS_SEQUENCEです。
| 型 | 値 | 意味 |
|---|---|---|
AS_SET | 1 | 順序を持たないASの集合。経路集約(aggregate-address)で複数経路をまとめたとき、元の経路が通ってきたASを重複なく列挙するために使う |
AS_SEQUENCE | 2 | 順序を持つASの並び。通常の経路伝播で作られるのはこちら |
tshark -Vではセグメント型と要素数まで展開されるので、値の内訳がそのまま読めます。
Path Attribute - AS_PATH: 65002 65001
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 10
AS Path segment: 65002 65001
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 2
AS4: 65002
AS4: 65001AS_SETは長さの計算上「何個入っていても1」として数えられます。集約した経路のAS_PATHが不自然に短くならないようにするための決まりです。
ループ検出
eBGPで受け取った経路のAS_PATHに自ASの番号があれば、その経路は破棄されます。距離ベクター型プロトコルのようにホップ数の上限で止めるのではなく、経路自身が持つ情報だけでループを判定できるのがパスベクター型の利点です。
この破棄が受信のどの段階で起きるか、allowas-inで意図的に無効化すると何が見えるかは、BGP(Border Gateway Protocol)の実機検証で扱っています。
ベストパス選択での位置づけ
AS_PATHの長さは、ベストパス選択の4番目に比較されます。WEIGHT・LOCAL_PREF・自身が生成した経路かどうか、の3つで決着がつかなかったときに効きます。
重要なのはMULTI_EXIT_DISC(6番目)より先に評価される点です。両方を設定した場合、AS_PATHの長さで差がついた時点で比較が終わるため、MEDは見られません。
なお、比較されるのは長さだけで、中身のAS番号が何であるかは問われません。AS_PATH長を無視させたい場合はbgp bestpath as-path ignoreを使いますが、ループ検出は無効になりません。
AS_PATHプリペンドによる流入制御
自ASへ入ってくるトラフィックの経路を選ばせたいとき、eBGP出方向のポリシーで自ASの番号を余分に付ける手法をAS_PATHプリペンドと呼びます。相手から見た経路が長くなるので、そのリンクは選ばれにくくなります。
IOS XRではRPL(Routing Policy Language)のprepend as-path own-as <回数>で書きます。
route-policy PREPEND-1
prepend as-path own-as 1
pass
end-policy
!
<snip>
neighbor 10.1.3.3
remote-as 65002
description eBGP to R3
address-family ipv4 unicast
route-policy PASS-ALL in
route-policy PREPEND-1 out
soft-reconfiguration inbound always
!
!設定コマンドの詳細は IOS XR BGPルートポリシーで解説します。
MEDとの違い
流入制御の手段としてはMEDもあり、隣接ASの入口を選ばせるだけなら両方とも同じ結果になります。決定的に違うのは影響が届く範囲です。
| 観点 | MED | AS_PATHプリペンド |
|---|---|---|
| 届く範囲 | 隣接ASまで。受け取ったASは他ASへ伝播しない | AS_PATHごと伝わるので、離れたASまで届く |
| 比較の条件 | 同じ隣接ASから学習した経路どうしでのみ比較 | 条件なし。すべての経路の長さを比較する |
| 選択順序 | 6番目 | 4番目 |
| 副作用 | 隣接ASの中で閉じる | 経路が通るすべてのASの選択に影響しうる |
MEDは「AS_PATHの長さもORIGINも同じ経路が、同じ隣接ASから複数届いたとき」にだけ効く、条件の厳しい属性です。一方プリペンドはAS_PATHという伝播する属性そのものを書き換えるため、意図した相手より先のASまで効いてしまいます。この違いを実機で確かめます。
実機での検証
XRd(IOS XR 26.1.1)5台のラボで、次の4点を確認します。
- MEDで隣接ASの入口を変えたとき、その先のASには影響しないこと
- AS_PATHプリペンドで同じことをすると、隣接ASの入口も同じように変わること
- 出口を両方とも延ばすと、2つ先のASの選択まで変わること
- ポリシーを外してもベストパスは自動では戻らず、セッションのリセットが要ること
構成の要点は次のとおりです。
- R1が
192.168.1.0/24を広告します。この経路が他のASからどう見えるかを追いかけます - AS 65002(R3)はAS 65001と2本のリンクで接続しています(R1経由とR2経由)。同じ隣接ASからの2経路なのでMEDの比較が成立します
- AS 65004(R5)はAS 65001と直接つながっていません。AS 65002経由とAS 65003経由の2つの選択肢があり、どちらも
AS_PATH長は2です。ここが「離れたAS」にあたります
各STEPで変更する内容です。
| STEP | 操作 |
|---|---|
| 0 | ポリシーなし(初期状態) |
| 1 | R1→R3にMED 200、R2→R3にMED 50 |
| 2 | MEDを撤去し、R1→R3にプリペンド×1 |
| 3 | R2→R3にもプリペンド×1(両方の出口を延ばす) |
| 4 | プリペンドを撤去(設定はSTEP 0と同一に戻る) |
| 5 | BGPセッションをリセット |
R1 - R3間とR3 - R5間のリンクでパケットキャプチャーを取得しています(tcp port 179)。
STEP 0:初期状態
R3から見た192.168.1.0/24です。R1経由(10.1.3.1)とR2経由(10.2.3.2)の2つのパスがあり、どちらもAS_PATHは65001の1個です。
BGP routing table entry for 192.168.1.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 7 7
Last Modified: Sep 6 21:55:55.774 for 00:10:38
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.3.1 from 10.1.3.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 7
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65001, (received & used)
10.2.3.2 from 10.2.3.2 (10.0.0.2)
Origin IGP, localpref 100, valid, external
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)AS_PATH長・ORIGIN・MEDのいずれでも差がつかず、eBGPどうしでIGPメトリックも比較対象外なので、9番目の「経路の学習時期」まで下りてR1経由が選ばれています。
2つ先のAS 65004(R5)です。192.168.1.0/24はAS 65002経由(65002 65001)とAS 65003経由(65003 65001)の2つがあり、長さは同じ2です。
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 10.3.5.3 0 65002 65001 i
* 10.4.5.4 0 65003 65001 i
* 192.168.2.0/24 10.3.5.3 0 65002 65001 i
*> 10.4.5.4 0 65003 65001 i
*> 192.168.3.0/24 10.3.5.3 0 0 65002 i
* 10.4.5.4 0 65003 65001 65002 i
* 192.168.4.0/24 10.3.5.3 0 65002 65001 65003 i
*> 10.4.5.4 0 0 65003 i
*> 192.168.5.0/24 0.0.0.0 0 32768 i
Processed 5 prefixes, 9 pathsR5からのtracerouteです。AS 65002(10.3.5.3 = R3)へ入り、そこからR1(10.1.3.1)へ直接抜けています。
Type escape sequence to abort.
Tracing the route to 192.168.1.1
1 10.3.5.3 9 msec 6 msec 5 msec
2 10.1.3.1 9 msec * 9 msecSTEP 1:MEDで隣接ASの入口を変える
比較の基準として、まずMEDで同じことをやってみます。R1からR3へ広告する経路にMED 200を、R2からR3へ広告する経路にMED 50を付けます。
route-policy MED-200
set med 200
pass
end-policy
!
<snip>
neighbor 10.1.3.3
remote-as 65002
description eBGP to R3
address-family ipv4 unicast
route-policy PASS-ALL in
route-policy MED-200 out
soft-reconfiguration inbound always
!
!R3のベストパスがR2経由(10.2.3.2)に変わりました。AS_PATHはどちらも65001のまま同点で、6番目のMEDで決着しています。
BGP routing table entry for 192.168.1.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 14 14
Last Modified: Sep 6 22:23:59.774 for 00:00:52
Paths: (2 available, best #2)
Advertised IPv4 Unicast paths to update-groups (with more than one peer):
0.2
Path #1: Received by speaker 0
Not advertised to any peer
65001, (received & used)
10.1.3.1 from 10.1.3.1 (10.0.0.1)
Origin IGP, metric 200, localpref 100, valid, external
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.2
65001, (received & used)
10.2.3.2 from 10.2.3.2 (10.0.0.2)
Origin IGP, metric 50, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 14
Origin-AS validity: (disabled)パケットの中でもMULTI_EXIT_DISCが200になっているのが見えます。AS_PATHは65001の1個のままです。
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: 200
Flags: 0x80, Optional, Non-transitive, Complete
<snip>
Type Code: MULTI_EXIT_DISC (4)
Length: 4
Multiple exit discriminator: 200一方、2つ先のR5では何も変わっていません。ベストパスはAS 65002経由のままで、Metric欄も空です。
BGP routing table entry for 192.168.1.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 7 7
Last Modified: Sep 6 21:56:23.774 for 00:28:55
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
65002 65001, (received & used)
10.3.5.3 from 10.3.5.3 (10.0.0.3)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 7
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65003 65001, (received & used)
10.4.5.4 from 10.4.5.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)Last ModifiedがSTEP 0のまま(21:56:23)で、AS 65001が設定を変えたこと自体がR5には届いていません。MEDはAS境界を越えないため、R3は受け取ったMEDをR5へ再送しません。
ただしトラフィックの経路は変わります。R5からのtracerouteは、1ホップ目(R3に入る)は同じですが、AS 65002の中での出口が10.2.3.2(R2)に変わりました。
Type escape sequence to abort.
Tracing the route to 192.168.1.1
1 10.3.5.3 6 msec 5 msec 5 msec
2 10.2.3.2 8 msec 8 msec 9 msec
3 10.1.2.1 23 msec * 13 msecBGPの経路選択は変わっていないのにパケットの通り道が変わるのは、AS 65002の中の判断が変わったからです。R5にとって「AS 65002を通る」ことに変わりはありません。
STEP 2:AS_PATHプリペンドで同じことをする
MEDを撤去し、代わりにR1からR3への出方向にプリペンドを1回入れます。
route-policy PREPEND-1
prepend as-path own-as 1
pass
end-policy
!
<snip>
neighbor 10.1.3.3
remote-as 65002
description eBGP to R3
address-family ipv4 unicast
route-policy PASS-ALL in
route-policy PREPEND-1 out
soft-reconfiguration inbound always
!
!R1がR3へ広告する経路のAS_PATHが65001 65001になりました。自分が広告を始めた192.168.1.0/24も、R2から受け取って中継している192.168.2.0/24・192.168.4.0/24も、区別なく全部延びています。
Network Next Hop From AS Path
192.168.1.0/24 10.1.3.1 Local 65001 65001i
192.168.2.0/24 10.1.3.1 10.0.0.2 65001 65001i
192.168.4.0/24 10.1.3.1 10.0.0.2 65001 65001 65003i
Processed 3 prefixes, 3 pathsパケットでもAS_PATHのセグメント長が2になり、AS4: 65001が2つ並んでいます。MEDは0に戻っています。
Path Attribute - AS_PATH: 65001 65001
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 10
AS Path segment: 65001 65001
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 2
AS4: 65001
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: 0R3のベストパスはR2経由に変わりました。STEP 1と同じ結果ですが、決着した段は違います。今回は4番目のAS_PATH長(2個 対 1個)で決まっており、MEDまで下りていません。
BGP routing table entry for 192.168.1.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 17 17
Last Modified: Sep 6 22:30:26.774 for 00:02:06
Paths: (2 available, best #2)
Advertised IPv4 Unicast paths to update-groups (with more than one peer):
0.2
Path #1: Received by speaker 0
Not advertised to any peer
65001 65001, (received & used)
10.1.3.1 from 10.1.3.1 (10.0.0.1)
Origin IGP, metric 0, localpref 100, valid, external
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.2
65001, (received & used)
10.2.3.2 from 10.2.3.2 (10.0.0.2)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 17
Origin-AS validity: (disabled)そしてR5は、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 10.3.5.3 0 65002 65001 i
* 10.4.5.4 0 65003 65001 i
* 192.168.2.0/24 10.3.5.3 0 65002 65001 i
*> 10.4.5.4 0 65003 65001 i
*> 192.168.3.0/24 10.3.5.3 0 0 65002 i
* 10.4.5.4 0 65003 65001 65002 i
* 192.168.4.0/24 10.3.5.3 0 65002 65001 65003 i
*> 10.4.5.4 0 0 65003 i
*> 192.168.5.0/24 0.0.0.0 0 32768 i
Processed 5 prefixes, 9 pathsR5が受け取るAS_PATHは65002 65001のままです。R3はR2経由(延びていないほう)をベストパスに選び、そのベストパスだけをR5へ広告しているためです。延びた65001 65001はR3の中で候補として残るだけで、外へは出ていきません。
ここまでは、MEDでもプリペンドでも「隣接ASの入口を変える」という同じ結果になりました。
STEP 3:出口を両方とも延ばして、2つ先のASを動かす
R2からR3への出方向にも同じプリペンドを入れます。これでAS 65001からAS 65002への出口が2本とも延びます。
neighbor 10.2.3.3
remote-as 65002
description eBGP to R3
address-family ipv4 unicast
route-policy PASS-ALL in
route-policy PREPEND-1 out
soft-reconfiguration inbound always
!
!R3が持つ2つのパスは両方とも65001 65001になり、R3が選んだどちらをR5へ広告してもAS_PATHは3個になります。
Network Next Hop From AS Path
192.168.1.0/24 10.3.5.3 10.1.3.1 65002 65001 65001i
192.168.2.0/24 10.3.5.3 10.1.3.1 65002 65001 65001i
192.168.3.0/24 10.3.5.3 Local 65002i
192.168.4.0/24 10.3.5.3 10.3.5.5 65002 65004 65003i
192.168.5.0/24 10.3.5.3 10.3.5.5 65002 65004i
Processed 5 prefixes, 5 pathsAS 65004に届いたこのUPDATEでは、AS 65001が設定した1回のプリペンドが、AS 65002を越えてAS 65004まで運ばれています。
Path Attribute - AS_PATH: 65002 65001 65001
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 14
AS Path segment: 65002 65001 65001
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 3
AS4: 65002
AS4: 65001
AS4: 65001R5のベストパスがAS 65003経由(10.4.5.4)に切り替わりました。AS 65002経由は3個、AS 65003経由は2個なので、4番目のAS_PATH長で決着しています。
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 10.3.5.3 0 65002 65001 65001 i
*> 10.4.5.4 0 65003 65001 i
* 192.168.2.0/24 10.3.5.3 0 65002 65001 65001 i
*> 10.4.5.4 0 65003 65001 i
*> 192.168.3.0/24 10.3.5.3 0 0 65002 i
* 10.4.5.4 0 65003 65001 65002 i
*> 192.168.4.0/24 10.4.5.4 0 0 65003 i
*> 192.168.5.0/24 0.0.0.0 0 32768 i
Processed 5 prefixes, 8 pathstracerouteも1ホップ目から変わりました。AS 65001と直接つながっていないAS 65004が、AS 65001の設定によって隣接ASの選択そのものを変えています。
Type escape sequence to abort.
Tracing the route to 192.168.1.1
1 10.4.5.4 6 msec 8 msec 5 msec
2 10.2.4.2 8 msec 8 msec 8 msec
3 10.1.2.1 10 msec * 12 msecSTEP 1のMEDでは、R5のtracerouteは1ホップ目が10.3.5.3のまま(AS 65002経由)でした。プリペンドはここが動きます。これがMEDとの決定的な違いです。
AS_PATHが届く範囲すべてが影響を受けます。隣接ASの入口だけを調整したいなら、伝播しないMEDのほうが副作用は小さくなります。副作用はこのプレフィックスだけに留まりません。R3(AS 65002)の192.168.4.0/24も、AS 65001経由が65001 65001 65003の3個に延びた結果、AS 65004経由の65004 65003(2個)に負けてベストパスが入れ替わっています。上のadvertised-routesで192.168.4.0/24のFromが10.3.5.5(R5)になっているのがそれです。AS 65001が自分の経路のために入れたプリペンドが、AS 65001とは無関係なプレフィックスの選択まで動かしています。
STEP 4:ポリシーを外してもベストパスは戻らない
R1・R2の両方からプリペンドを撤去し、route-policy PASS-ALL outに戻します。この時点で5台すべてのrunning-configはSTEP 0と完全に一致します。
R3がR5へ広告するAS_PATHは65002 65001に戻りました。
Network Next Hop From AS Path
192.168.1.0/24 10.3.5.3 10.1.3.1 65002 65001i
192.168.2.0/24 10.3.5.3 10.1.3.1 65002 65001i
192.168.3.0/24 10.3.5.3 Local 65002i
192.168.4.0/24 10.3.5.3 10.3.5.5 65002 65004 65003i
192.168.5.0/24 10.3.5.3 10.3.5.5 65002 65004iところがR5のベストパスはAS 65003経由のままです。
BGP routing table entry for 192.168.1.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 8 8
Last Modified: Sep 6 22:34:24.774 for 00:08:05
Paths: (2 available, best #2)
Advertised IPv4 Unicast paths to update-groups (with more than one peer):
0.2
Path #1: Received by speaker 0
Not advertised to any peer
65002 65001, (received & used)
10.3.5.3 from 10.3.5.3 (10.0.0.3)
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.2
65003 65001, (received & used)
10.4.5.4 from 10.4.5.4 (10.0.0.4)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 8
Origin-AS validity: (disabled)AS_PATHは両方とも65002 65001・65003 65001の2個で同点に戻っています。そのため4番目では決着せず、9番目の「経路の学習時期(古いほう)」まで下ります。AS 65003経由のパスはSTEP 3でベストパスになって以降そのまま保持されており、AS 65002経由のパスはSTEP 4で新しく入れ直されたため、古いAS 65003経由が勝ち続けます。
Last Modifiedが22:34:24=STEP 3の時刻のままである点がその証拠です。
設定を元に戻してもベストパスは元に戻らないことになります。BGPは経路のフラップを避けるため、同点なら現状維持を選ぶよう設計されているためです。
STEP 5:セッションをリセットして初期状態に戻す
まずソフトリセットを試します。R5でclear bgp ipv4 unicast 10.4.5.4 soft inを実行しましたが、直後のshow bgp 192.168.1.0/24はLast ModifiedがSep 6 22:34:24.774、Speakerのバージョンが8のままで、STEP 4の状態(上の出力)から何も動きませんでした。soft inは入方向ポリシーを再適用するだけで、タイブレークに使われる経路の「古さ」はリセットしません。
そこでセッションを落として張り直します。IOS XRのclear bgpには確認プロンプトが出るものがあるため、ここではネイバーのshutdownとno shutdownを続けて投入しました。
router bgp 65004
neighbor 10.4.5.4
shutdown
router bgp 65004
neighbor 10.4.5.4
no shutdownsyslogにセッションの切断と再確立が残ります(間の行はno shutdownのcommitログです)。
RP/0/RP0/CPU0:Sep 6 23:09:19.795 UTC: bgp[1084]: %ROUTING-BGP-5-ADJCHANGE : neighbor 10.4.5.4 Down - Admin. shutdown (CEASE notification sent - administrative shutdown) (VRF: default) (AS: 65003)
<snip>
RP/0/RP0/CPU0:Sep 6 23:09:58.957 UTC: bgp[1084]: %ROUTING-BGP-5-ADJCHANGE : neighbor 10.4.5.4 Up (VRF: default) (AS: 65003) 再確立後、AS 65003経由のパスが「新しい」側になり、AS 65002経由がベストパスに戻りました。
BGP routing table entry for 192.168.1.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 11 11
Last Modified: Sep 6 23:09:19.774 for 00:04: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
65002 65001, (received & used)
10.3.5.3 from 10.3.5.3 (10.0.0.3)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 11
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65003 65001, (received & used)
10.4.5.4 from 10.4.5.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)tracerouteもSTEP 0と同じ経路に戻りました。
Type escape sequence to abort.
Tracing the route to 192.168.1.1
1 10.3.5.3 6 msec 4 msec 5 msec
2 10.1.3.1 8 msec * 9 msecLOCAL_PREFやWEIGHTで明示的に差をつけるべきです。なお、この順序依存のため、R2が広告する192.168.2.0/24だけはSTEP 0と逆の選択(AS 65002経由)で落ち着いています。STEP 0では偶然AS 65003経由が先に届いていたためで、設定は同一です。
検証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のみ) / traceroute(R3・R4・R5のみ) |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
最終状態(STEP 5)ではポリシーはPASS-ALLのみで、STEP 0のrunning-configと5台すべて一致しています。
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 1:R1→R3にMED 200、R2→R3にMED 50を適用した状態
| ルータ | 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:MEDを撤去し、R1→R3にプリペンド×1を適用した状態
| ルータ | 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:R2→R3にもプリペンド×1を適用した状態
| ルータ | 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 5:BGPセッションをリセットした状態(最終状態)
| ルータ | 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がすべて入っています(STEP 5のセッションリセットは取得範囲外です)。
R1 - R3間のキャプチャー全体をダウンロード
R3 - R5間のキャプチャー全体をダウンロード
プリペンド撤去後にR3が再送したUPDATE(No.183)のpcapをダウンロード
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | 4.3節でAS_PATHのセグメント型を、5.1.2節でeBGP/iBGPでの更新規則を、9.1.2.2節でベストパス選択における比較順序を定義。 |
| RFC 6793 | BGP Support for Four-Octet Autonomous System (AS) Number Space | 4バイトAS番号への拡張。非対応ルータを跨ぐ際のAS4_PATHの扱いを定義。 |
| RFC 7454 | BGP Operations and Security | 6.1節でAS_PATHの長さに上限を設けるなど、運用上の推奨事項を記載。 |
| IANA | Border Gateway Protocol (BGP) Parameters | パス属性のType codeやAS_PATHのセグメント型など、BGPで使われる番号の割り当て一覧。 |