MPLS TE(RSVP-TE)とは
IGPは宛先ごとに最短経路を1本だけ選び、すべてのトラフィックをそこに載せます。MPLS TE(Traffic Engineering)は、トンネルの入口(head-end)が経路を決め、その経路に沿ってラベルを張る仕組みです。経路は運用者が明示することも、head-endに計算させることもできます。仕組みを解説し、IOS XR(XRd)のラボで、明示した経路が壊れたときにトンネルがどう動くかを確かめます。
3つの部品
| 部品 | 役割 |
|---|---|
| IGPのTE拡張 | リンクの属性を全ルータに配る。各ルータはこれをTED(TEデータベース)として持つ |
| 経路の決定 | head-endが、明示された経路をTEDで確かめるか、条件を満たす経路をCSPFで計算する |
| RSVP-TE | 決めた経路に沿ってシグナリングし、ラベルを配る |
帯域や色といった制約でCSPFがどう経路を選ぶかはMPLS TEのCSPFと経路の制約で解説しています。
経路の決め方:path-option
トンネルにはpath-optionを番号付きで複数設定できます。head-endは番号の小さい順に試し、使えなければ次のpath-optionへ移ります。
| 種類 | 設定 | 経路 |
|---|---|---|
| 明示経路 | path-option 10 explicit name <名前> |
explicit-pathに並べたホップを通る |
| 動的経路 | path-option 20 dynamic |
CSPFが計算する(制約がなければIGPと同じ) |
明示経路を10、動的経路を20にしておくのが典型です。明示経路が使えないときも、動的経路でトンネルを維持できます。
strictとloose
明示経路の各ホップはstrictかlooseで指定します。RSVP-TEはこれをPathメッセージのEXPLICIT_ROUTE(ERO)で運び、サブオブジェクトのLビットが立っていればloose、立っていなければstrictです(RFC 3209 4.3.3節)。
| 指定 | 意味(4.3.3.1節) | 次ホップの決め方(4.3.4節) |
|---|---|---|
| strict | 前のノードとの間に他のノードを挟まない | 直結していなければBad strict nodeを返す(SHOULD) |
| loose | 前のノードとの間に他のノードを挟んでよい | そのノードへ向かう経路上の次ホップを選ぶ |
RFCはlooseの区間を途中のノードに任せられるようにしています。ただしhead-endのTEDに経路全体が載っている場合(同じエリアの中など)、IOS XRはlooseの区間を自分で計算して埋め、EROをすべてstrictにして送ります。 looseの利点は、head-endが経路を選び直す余地を残せることです。
RSVP-TEのシグナリング
| メッセージ | 向き | 主なオブジェクト |
|---|---|---|
| Path | head-end → tail-end | EXPLICIT_ROUTE(ERO)、LABEL_REQUEST |
| Resv | tail-end → head-end | LABEL、RECORD_ROUTE(実際に通った経路) |
| PathErr | エラーを見つけたノード → head-end | ERROR_SPEC(Error Code / Value / エラーを出したノード) |
RFC 3209は「ラベルは下流で割り当てられ、Resvメッセージで上流へ配られる」と定めています(1.1節)。経路の問題はError Code 24(Routing Problem)で返り、値2がBad strict node、値4がBad initial subobject、値5がNo route available toward destinationです(4.5節)。
障害時の動き
明示経路の途中のリンクが落ちると、次のように進みます。
- 落ちたリンクの手前のノードが、head-endへPathErr(24,5)(No route available toward destination)を返す
- head-endはそのLSPを捨て、path-optionを番号順に試し直す。strictだけの明示経路は同じ経路しか計算できないので、次のpath-option(動的経路)で張り直す
- looseを含む明示経路は、head-endがlooseの区間を計算し直せるので、同じpath-optionのまま別の経路で張り直す
- どちらも古いLSPはもう使えないので、新しいLSPを先に張ってから古いLSPを消す(make-before-break)ことはできません。トンネルは一度落ちて張り直されます
リンクが戻っても、トンネルは自動では元のpath-optionに戻りません。 今のLSPは動いているからです。戻すのは定期再最適化か手動のmpls traffic-eng reoptimizeで、こちらはmake-before-breakなので途切れません。
path-optionの変え方でも結果が違う
使用中のpath-optionをnoで消すと、そのLSPは切られて張り直しになります。同じ番号のpath-optionを上書きした場合は再最適化として扱われ、make-before-breakで移ります。
verbatim
IOS XRは通常、明示経路をTEDで確かめてから送ります。直結していないstrictを並べるとhead-endが経路を計算できず、Pathは送られません。verbatimを付けるとTEDでの確認を省き、設定したEROのままPathを送ります。 そのときにどのノードが、どのエラーで弾くかはラボで確かめます。
検証構成
上ルートと下ルートを横木でつないだ、はしご型です。コアはOSPF area 0とLDP、CE1とCE2はVRF CUST-AでPEに接続しています。TEの制約(帯域・色)は使いません。
| 区間 | OSPFコスト | 役割 |
|---|---|---|
| 上 PE1 - P1 - P2 - PE2 | 10 ×3 = 30 | IGPの最短。動的経路はここ |
| 下 PE1 - P3 - P4 - PE2 | 20 ×3 = 60 | 明示経路で通す |
| 横木 P1 - P3 / P2 - P4 | 30 | looseの迂回路 |
| ルータ | Lo0 | 役割 |
|---|---|---|
| PE1 | 2.2.2.2 | head-end |
| P1 / P2 | 3.3.3.3 / 4.4.4.4 | 上ルート |
| P3 / P4 | 5.5.5.5 / 6.6.6.6 | 下ルート |
| PE2 | 7.7.7.7 | tail-end |
| CE1 / CE2 | 1.1.1.1 / 8.8.8.8 | AS 65101 / AS 65102 |
明示経路の途中のリンクとして、P3 - P4を両端でshutdownします。落とす前からPE1でトンネル経由のLSP Ping(ping mpls traffic-eng tunnel-te 0、100ミリ秒間隔で600発)を流し、断を数えます。
検証の全体像
| STEP | 操作 | 確かめること |
|---|---|---|
| 0 | 初期状態(トンネルなし) | IGPの最短は上ルート |
| 1 | path-option 10 dynamic |
IGPと同じ上ルート。PathとResv |
| 2 | 明示経路(下ルートをすべてstrict)を10、動的経路を20に | 下ルートを通る。使用中のpath-optionを消したのでトンネルは張り直し |
| 3 | P3 - P4を両端でshutdown | PathErr(24,5)。path-option 20(上ルート)で張り直し |
| 4 | P3 - P4を復旧し、手動で再最適化 | 復旧しても20のまま。再最適化で10へ戻り、途切れない |
| 5 | 明示経路を「P3はstrict、PE2はloose」に上書き | EROはすべてstrict。上書きなので途切れない |
| 6 | P3 - P4を再び両端でshutdown | path-option 10のまま横木経由で張り直し |
| 7 | 復旧し、直結していないstrict(P3の次にP2)を10に上書き | head-endが弾き、20で張る |
| 8 | 同じ明示経路にverbatimを付け、手動で再最適化 |
Pathが送られ、途中のノードがエラーを返す |
| 9 | 撤去(最終状態) | STEP 0と同じに戻る |
以降の節はSTEP順ではなく、テーマごとに並べています。
動的経路と明示経路(STEP 1・2)
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Sun Sep 13 12:26:25.806 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface tunnel-te0
ipv4 unnumbered Loopback0
destination 7.7.7.7
record-route
path-option 10 dynamic
!
end Path info (OSPF 1 area 0):
Hop0: 10.2.3.3
Hop1: 10.3.4.4
Hop2: 10.4.7.7
Hop3: 7.7.7.7動的経路はIGPと同じ上ルート(P1 → P2)です。PE1 - P1間のキャプチャーのNo.1078が、このときのPathです。
Internet Protocol Version 4, Src: 2.2.2.2, Dst: 7.7.7.7
Message Type: PATH Message. (1)
EXPLICIT ROUTE: IPv4 10.2.3.3, IPv4 10.3.4.4, IPv4 10.4.7.7,
IPv4 Subobject - 10.2.3.3, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.3.4.4, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.4.7.7, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 7.7.7.7, Strict
0... .... = Hop: Strict Hop
LABEL REQUEST: Basic: L3PID: IPv4 (0x0800)
RECORD ROUTE: IPv4 10.2.3.2EROにhead-endが計算した経路がStrictで並びます。直後にP1から返ったResv(No.1079)が、トンネルに積むラベルを運びます。
Internet Protocol Version 4, Src: 10.2.3.3, Dst: 10.2.3.2
Message Type: RESV Message. (2)
LABEL: 24010
Label: 24010
RECORD ROUTE: IPv4 10.2.3.3, IPv4 10.3.4.4, IPv4 10.4.7.7STEP 2で、下ルートをすべてstrictで並べた明示経路をpath-option 10にし、動的経路を20に回しました。
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Sun Sep 13 12:34:12.096 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
explicit-path name LOWER-STRICT
index 10 next-address strict ipv4 unicast 10.2.5.5
index 20 next-address strict ipv4 unicast 10.5.6.6
index 30 next-address strict ipv4 unicast 10.6.7.7
!
interface tunnel-te0
no path-option 10 dynamic
path-option 10 explicit name LOWER-STRICT
path-option 20 dynamic
!
end path option 10, type explicit LOWER-STRICT (Basis for Setup, path weight 60)
Accumulative metrics: TE 60 IGP 60 Delay 900000
Accumulative biased metrics: TE 60 IGP 60 Delay 900000
path option 20, type dynamic History:
Tunnel has been up for: 00:03:55 (since Sun Sep 13 12:34:11 UTC 2026)
Current LSP:
Uptime: 00:03:55 (since Sun Sep 13 12:34:11 UTC 2026)
Prior LSP:
ID: 3 Path Option: 10
Removal Trigger: path tear
Path info (OSPF 1 area 0):
Hop0: 10.2.5.5
Hop1: 10.5.6.6
Hop2: 10.6.7.7
Hop3: 7.7.7.7path-option 10の明示経路で下ルート(P3 → P4)に移りました。ただしTunnel has been up forは12:34:11から数え直され、前のLSPはpath tearで消えています。使用中のpath-option 10 dynamicをnoで消したので、トンネルは一度落ちて張り直されました。
リンク断と復旧(STEP 3・4)
明示経路の途中のP3 - P4を両端で落とします。
RP/0/RP0/CPU0:P3#show configuration commit changes last 1
Sun Sep 13 12:42:28.821 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface GigabitEthernet0/0/0/1
shutdown
!
endRP/0/RP0/CPU0:P4#show configuration commit changes last 1
Sun Sep 13 12:42:35.245 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface GigabitEthernet0/0/0/0
shutdown
!
end path option 20, type dynamic (Basis for Setup, path weight 30)
Accumulative metrics: TE 30 IGP 30 Delay 900000
Accumulative biased metrics: TE 30 IGP 30 Delay 900000
path option 10, type explicit LOWER-STRICT
Last PCALC Error: Sun Sep 13 12:42:27 2026
Info: No path to destination, 7.7.7.7 (holdown)
Last Signalled Error : Sun Sep 13 12:42:27 2026
Info: [4] PathErr(24,5)-(Error: routing (24), Suberror: no route to dest (5)) at 10.5.6.5P3(10.5.6.5)がPathErr(24,5)を返し、トンネルはpath-option 20の動的経路(上ルート)で張り直されました。PE1 - P3間のNo.1354がそのPathErrです。
Internet Protocol Version 4, Src: 10.2.5.5, Dst: 10.2.5.2
Message Type: PATH ERROR Message. (3)
ERROR: IPv4, Error code: Routing Error, Value: 5, Error Node: 10.5.6.5
Error node: 10.5.6.5
Error code: Routing Error (24)
Error value: No route available toward destination (5) History:
Tunnel has been up for: 00:04:50 (since Sun Sep 13 12:42:28 UTC 2026)
Current LSP:
Uptime: 00:04:50 (since Sun Sep 13 12:42:28 UTC 2026)
Prior LSP:
ID: 4 Path Option: 10
Removal Trigger: path error
Path info (OSPF 1 area 0):
Hop0: 10.2.3.3
Hop1: 10.3.4.4
Hop2: 10.4.7.7
Hop3: 7.7.7.7前のLSPはpath errorで消え、トンネルは12:42:28から数え直されています。リンク断をまたいで流したLSP Pingは、600発中1発だけがQ(送れなかった)でした。
RP/0/RP0/CPU0:PE1#ping mpls traffic-eng tunnel-te 0 repeat 600 interval 100 timeout 1
Sun Sep 13 12:42:16.245 UTC
Sending 600, 100-byte MPLS Echos to tunnel-te0,
timeout is 1 seconds, send interval is 100 msec:
Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
'L' - labeled output interface, 'B' - unlabeled output interface,
'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
'M' - malformed request, 'm' - unsupported tlvs, 'N' - no rx label,
'P' - no rx intf label prot, 'p' - premature termination of LSP,
'R' - transit router, 'I' - unknown upstream index,
'X' - unknown return code, 'x' - return code 0
Type escape sequence to abort.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Q!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (599/600), round-trip min/avg/max = 11/16/80 msSTEP 4でリンクを戻し、90秒待ってから状態を見ました。
path option 20, type dynamic (Basis for Setup, path weight 30)
Accumulative metrics: TE 30 IGP 30 Delay 900000
Accumulative biased metrics: TE 30 IGP 30 Delay 900000
path option 10, type explicit LOWER-STRICT
Last PCALC Error: Sun Sep 13 12:42:27 2026
Info: No path to destination, 7.7.7.7 (holdown)
Last Signalled Error : Sun Sep 13 12:42:27 2026
Info: [4] PathErr(24,5)-(Error: routing (24), Suberror: no route to dest (5)) at 10.5.6.5RP/0/RP0/CPU0:PE1#show mpls traffic-eng topology path destination 7.7.7.7 explicit-path name LOWER-STRICT
Sun Sep 13 12:53:18.708 UTC
Path Setup to 7.7.7.7: FULL_PATH
bw 0 (CT0), min_bw 1000000, metric: 60
Accumulated Metrics: TE: 60, IGP: 60, Delay: 900000
Accumulated Biased Metrics: TE: 60, IGP: 60, Delay: 900000
setup_pri 0, hold_pri 0
Affinity: 0x0/0x0
Biased-to explicit path:
Node hop count 3
Hop0:10.2.5.5
Hop1:10.5.6.6
Hop2:10.6.7.7
Hop3:7.7.7.7明示経路は計算できる状態なのに、トンネルはpath-option 20のままです。 手動で再最適化しました。
RP/0/RP0/CPU0:PE1#mpls traffic-eng reoptimize 0
Sun Sep 13 12:53:22.034 UTC path option 10, type explicit LOWER-STRICT (Basis for Setup, path weight 60)
Accumulative metrics: TE 60 IGP 60 Delay 900000
Accumulative biased metrics: TE 60 IGP 60 Delay 900000
Last Signalled Error : Sun Sep 13 12:42:27 2026
Info: [4] PathErr(24,5)-(Error: routing (24), Suberror: no route to dest (5)) at 10.5.6.5
path option 20, type dynamic Tunnel has been up for: 00:11:57 (since Sun Sep 13 12:42:28 UTC 2026)
Current LSP:
Uptime: 00:01:03 (since Sun Sep 13 12:53:22 UTC 2026)
Prior LSP:
ID: 5 Path Option: 20
Removal Trigger: reoptimization completed
Path info (OSPF 1 area 0):
Hop0: 10.2.5.5
Hop1: 10.5.6.6
Hop2: 10.6.7.7
Hop3: 7.7.7.7path-option 10に戻りました。LSPは12:53:22から新しくなりましたが、Tunnel has been up forは12:42:28から続き、前のLSPはreoptimization completedで消えています。make-before-breakなので途切れません。
loose(STEP 5・6)
STEP 5で、P3だけをstrict、PE2をlooseにした明示経路をpath-option 10に上書きしました。
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Sun Sep 13 13:02:07.695 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
explicit-path name LOWER-LOOSE
index 10 next-address strict ipv4 unicast 10.2.5.5
index 20 next-address loose ipv4 unicast 7.7.7.7
!
interface tunnel-te0
path-option 10 explicit name LOWER-LOOSE
!
end Explicit Route:
Strict, 10.2.5.5
Strict, 10.5.6.6
Strict, 10.6.7.7
Strict, 7.7.7.7looseを指定したのに、EROは4つともStrictです。 head-endがlooseの区間(P3からPE2まで)を計算して埋めています。PE1 - P3間のNo.2380のPathでも、Lビットはどのサブオブジェクトにもありませんでした。
Internet Protocol Version 4, Src: 10.2.5.2, Dst: 10.2.5.5
Message Type: PATH Message. (1)
EXPLICIT ROUTE: IPv4 10.2.5.5, IPv4 10.5.6.6, IPv4 10.6.7.7,
IPv4 Subobject - 10.2.5.5, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.5.6.6, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.6.7.7, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 7.7.7.7, Strict
0... .... = Hop: Strict Hop History:
Tunnel has been up for: 00:23:56 (since Sun Sep 13 12:42:28 UTC 2026)
Current LSP:
Uptime: 00:04:18 (since Sun Sep 13 13:02:06 UTC 2026)
Prior LSP:
ID: 6 Path Option: 10
Removal Trigger: reoptimization completed
Path info (OSPF 1 area 0):
Hop0: 10.2.5.5
Hop1: 10.5.6.6
Hop2: 10.6.7.7
Hop3: 7.7.7.7同じ番号の上書きなので、前のLSPはreoptimization completedで消え、トンネルは途切れていません(STEP 2との違い)。
STEP 6で、同じP3 - P4を再び両端で落としました。
RP/0/RP0/CPU0:P3#show configuration commit changes last 1
Sun Sep 13 13:10:41.073 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface GigabitEthernet0/0/0/1
shutdown
!
endRP/0/RP0/CPU0:P4#show configuration commit changes last 1
Sun Sep 13 13:10:47.680 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface GigabitEthernet0/0/0/0
shutdown
!
end path option 10, type explicit LOWER-LOOSE (Basis for Setup, path weight 70)
Accumulative metrics: TE 70 IGP 70 Delay 1200000
Accumulative biased metrics: TE 70 IGP 70 Delay 1200000
Last Signalled Error : Sun Sep 13 13:10:40 2026
Info: [7] PathErr(24,5)-(Error: routing (24), Suberror: no route to dest (5)) at 10.5.6.5
path option 20, type dynamic History:
Tunnel has been up for: 00:05:00 (since Sun Sep 13 13:10:40 UTC 2026)
Current LSP:
Uptime: 00:05:00 (since Sun Sep 13 13:10:40 UTC 2026)
Reopt. LSP:
Last Failure:
LSP not signalled, identical to the [CURRENT] LSP
Date/Time: Sun Sep 13 13:12:42 UTC 2026 [00:02:58 ago]
Prior LSP:
ID: 7 Path Option: 10
Removal Trigger: path error
Path info (OSPF 1 area 0):
Hop0: 10.2.5.5
Hop1: 10.3.5.3
Hop2: 10.3.4.4
Hop3: 10.4.7.7
Hop4: 7.7.7.7P3が同じPathErr(24,5)を返しましたが、今度はpath-option 10のまま、P3 → P1(横木)→ P2 → PE2で張り直されました(path weight 70)。張り直し直後のPath(No.2911)のEROです。
Internet Protocol Version 4, Src: 10.2.5.2, Dst: 10.2.5.5
Message Type: PATH Message. (1)
EXPLICIT ROUTE: IPv4 10.2.5.5, IPv4 10.3.5.3, IPv4 10.3.4.4, ...
IPv4 Subobject - 10.2.5.5, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.3.5.3, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.3.4.4, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.4.7.7, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 7.7.7.7, Strict
0... .... = Hop: Strict Hop迂回したのは途中のP3ではなく、head-endです。トンネルは一度落ちて13:10:40から数え直され、LSP Pingは3発落ちました。
RP/0/RP0/CPU0:PE1#ping mpls traffic-eng tunnel-te 0 repeat 600 interval 100 timeout 1
Sun Sep 13 13:10:28.100 UTC
Sending 600, 100-byte MPLS Echos to tunnel-te0,
timeout is 1 seconds, send interval is 100 msec:
Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
'L' - labeled output interface, 'B' - unlabeled output interface,
'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
'M' - malformed request, 'm' - unsupported tlvs, 'N' - no rx label,
'P' - no rx intf label prot, 'p' - premature termination of LSP,
'R' - transit router, 'I' - unknown upstream index,
'X' - unknown return code, 'x' - return code 0
Type escape sequence to abort.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!NQQ!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (597/600), round-trip min/avg/max = 12/17/78 ms直結していないstrictとverbatim(STEP 7・8)
STEP 7でリンクを戻し、P3の次に直結していないP2(10.4.7.4)をstrictで並べた明示経路を、path-option 10に上書きしました。
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Sun Sep 13 13:21:34.796 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
explicit-path name BAD-STRICT
index 10 next-address strict ipv4 unicast 10.2.5.5
index 20 next-address strict ipv4 unicast 10.4.7.4
!
interface tunnel-te0
path-option 10 explicit name BAD-STRICT
!
endRP/0/RP0/CPU0:P3#show configuration commit changes last 1
Sun Sep 13 13:19:51.183 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface GigabitEthernet0/0/0/1
no shutdown
!
endRP/0/RP0/CPU0:P4#show configuration commit changes last 1
Sun Sep 13 13:19:58.149 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface GigabitEthernet0/0/0/0
no shutdown
!
end path option 20, type dynamic (Basis for Setup, path weight 30)
Accumulative metrics: TE 30 IGP 30 Delay 900000
Accumulative biased metrics: TE 30 IGP 30 Delay 900000
path option 10, type explicit BAD-STRICT
Last PCALC Error [Reopt]: Sun Sep 13 13:21:34 2026
Info: No path to destination, 7.7.7.7 (unknown, Flags: 0) History:
Tunnel has been up for: 00:16:11 (since Sun Sep 13 13:10:40 UTC 2026)
Current LSP:
Uptime: 00:05:17 (since Sun Sep 13 13:21:34 UTC 2026)
Reopt. LSP:
Last Failure:
LSP not signalled, identical to the [CURRENT] LSP
Date/Time: Sun Sep 13 13:12:42 UTC 2026 [00:14:09 ago]
Prior LSP:
ID: 8 Path Option: 10
Removal Trigger: reoptimization completed
Path info (OSPF 1 area 0):
Hop0: 10.2.3.3
Hop1: 10.3.4.4
Hop2: 10.4.7.7
Hop3: 7.7.7.7head-endは経路を計算できず(No path to destination)、path-option 20の上ルートでmake-before-breakしました。このPathはどのリンクにも出ていません(キャプチャーに10.4.7.4を含むRSVPは0件)。
STEP 8で同じ明示経路にverbatimを付けました。
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Sun Sep 13 13:31:00.996 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface tunnel-te0
path-option 10 explicit name BAD-STRICT verbatim
!
end path option 20, type dynamic (Basis for Setup, path weight 30)
Accumulative metrics: TE 30 IGP 30 Delay 900000
Accumulative biased metrics: TE 30 IGP 30 Delay 900000
path option 10, (verbatim) type explicit BAD-STRICT付けただけでは何も起きません。 使っているのはpath-option 20で、それが条件を満たしているので、再最適化のきっかけがないからです。手動で再最適化しました。
RP/0/RP0/CPU0:PE1#mpls traffic-eng reoptimize 0
Sun Sep 13 13:33:31.946 UTCPE1はEROをそのまま送りました(PE1 - P3間のNo.4570)。
Internet Protocol Version 4, Src: 10.2.5.2, Dst: 10.2.5.5
Message Type: PATH Message. (1)
EXPLICIT ROUTE: IPv4 10.2.5.5, IPv4 10.4.7.4
IPv4 Subobject - 10.2.5.5, Strict
0... .... = Hop: Strict Hop
IPv4 Subobject - 10.4.7.4, Strict
0... .... = Hop: Strict HopP3はBad strict nodeを返さず、自分のサブオブジェクトを外して、IGPの経路でP4へ転送しました(P3 - P4間のNo.3686)。
Internet Protocol Version 4, Src: 2.2.2.2, Dst: 7.7.7.7
Message Type: PATH Message. (1)
EXPLICIT ROUTE: IPv4 10.4.7.4
IPv4 Subobject - 10.4.7.4, Strict
0... .... = Hop: Strict Hop
RECORD ROUTE: IPv4 10.5.6.5, IPv4 10.2.5.2EROの先頭が自分ではないので、P4がBad initial subobject(24,4)を返しました(No.3687)。
Internet Protocol Version 4, Src: 10.5.6.6, Dst: 10.5.6.5
Message Type: PATH ERROR Message. (3)
ERROR: IPv4, Error code: Routing Error, Value: 4, Error Node: 10.5.6.6
Error node: 10.5.6.6
Error code: Routing Error (24)
Error value: Bad initial subobject (4) path option 20, type dynamic (Basis for Setup, path weight 30)
Accumulative metrics: TE 30 IGP 30 Delay 900000
Accumulative biased metrics: TE 30 IGP 30 Delay 900000
path option 10, (verbatim) type explicit BAD-STRICT
Last Signalled Error [Reopt] : Sun Sep 13 13:33:32 2026
Info: [10] PathErr(24,4)-(Error: routing (24), Suberror: bad initial sub-obj (4)) at 10.5.6.6再最適化は失敗し、path-option 20のLSPがそのまま残りました。RFC 3209はstrictの次ホップが直結していないノードにBad strict nodeを返すよう求めていますが(SHOULD)、この検証のIOS XRでは、弾いたのは次のノードで、値も4でした。
STEPごとの結果
| STEP | 使ったpath-option | 経路 | トンネルの張り直し | LSP Ping |
|---|---|---|---|---|
| 1 | 10(dynamic) | 上 | - | - |
| 2 | 10(strict) | 下 | あり(noで消した) |
- |
| 3 | 20(dynamic) | 上 | あり(PathErr 24,5) | 599/600 |
| 4 | 10(strict) | 下 | なし(再最適化) | - |
| 5 | 10(loose) | 下 | なし(上書き) | - |
| 6 | 10(loose) | P3 → P1 → P2 | あり(PathErr 24,5) | 597/600 |
| 7 | 20(dynamic) | 上 | なし(再最適化) | - |
| 8 | 20(verbatimは失敗) | 上 | なし | - |
設計上の注意
- 明示経路には必ず動的経路のpath-optionを後ろに付けます。 strictだけの明示経路は、途中のリンクが落ちると使えなくなります
- looseを含めると、同じpath-optionのまま迂回できます。 ただしIOS XRでもトンネルは一度張り直されます
- 障害が直っても元の経路には戻りません。 戻したいときは
mpls traffic-eng reoptimizeか、定期再最適化を待ちます - 使用中のpath-optionを
noで消すと断が出ます。変えるときは同じ番号で上書きします verbatimはTEDでの確認を省きます。途中のノードの実装次第でエラーの出方が変わるので、TEDに載らない区間を通すときに限って使います
検証Configおよびshow結果
各STEPで8台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。
| ファイル | 内容 |
|---|---|
..._show.txt |
show version / show route / show ospf database opaque-area / show mpls traffic-eng tunnels系 / show explicit-paths / show rsvp系ほか |
..._log.txt |
そのSTEPの範囲だけに絞ったshow logging |
..._run.txt |
そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
..._ping.txt |
そのSTEPのping(50発、timeout 1秒)とtraceroute |
..._oam.txt |
ping / traceroute mpls traffic-eng tunnel-te 0とping / traceroute mpls ipv4(PE1・PE2) |
..._trace.txt |
show mpls traffic-eng trace head-end / linkとshow rsvp trace signalling(コア6台) |
..._commit.cfg |
そのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ |
..._lspping.txt |
STEP 3・6でリンク断をまたいで流したLSP Ping(PE1) |
..._debug.txt |
STEP 4・8で再最適化の前後にPE1で取ったshowとmpls traffic-eng reoptimize 0 |
STEP 0:初期状態(トンネルなし)
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | - |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
STEP 1:path-option 10 dynamic
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | cfg |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
STEP 2:明示経路(下ルートをすべてstrict)を10、動的経路を20に
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | cfg |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
STEP 3:P3 - P4を両端でshutdown
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | - |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | cfg |
| P4 | show | log | run | - | - | trace | cfg |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
PE1の追加の記録: LSP Ping
STEP 4:P3 - P4を復旧し、手動で再最適化
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | - |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | cfg |
| P4 | show | log | run | - | - | trace | cfg |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
PE1の追加の記録: debug
STEP 5:明示経路を「P3はstrict、PE2はloose」に上書き
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | cfg |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
STEP 6:P3 - P4を再び両端でshutdown
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | - |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | cfg |
| P4 | show | log | run | - | - | trace | cfg |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
PE1の追加の記録: LSP Ping
STEP 7:復旧し、直結していないstrict(P3の次にP2)を10に上書き
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | cfg |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | cfg |
| P4 | show | log | run | - | - | trace | cfg |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
STEP 8:同じ明示経路にverbatimを付け、手動で再最適化
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | cfg |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
PE1の追加の記録: debug
STEP 9:撤去(最終状態)
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | cfg |
| P1 | show | log | run | ping | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | ping | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
キャプチャー全体です。全STEPのRSVPとOSPFが入っています。
PE1 - P1間(上ルート)のキャプチャー全体をダウンロード
PE1 - P3間(下ルート)のキャプチャー全体をダウンロード
P3 - P4間(落としたリンク)のキャプチャー全体をダウンロード
P1 - P3間(横木)のキャプチャー全体をダウンロード
参考
| 出典 | 参照した箇所 |
|---|---|
| RFC 3209 RSVP-TE: Extensions to RSVP for LSP Tunnels | 1.1節(ラベルはResvで上流へ配られる)、2.5節(make-before-break)、4.3.3節・4.3.3.1節(strictとloose、Lビット)、4.3.4節(EROの処理、Bad strict node)、4.5節(Error Code 24の値) |
path-optionの動き、looseの展開、verbatimの結果は、検証機(XRd 26.1.1)での観測です。