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 | 24000 - 24999 |
| P1 / P2 | 3.3.3.3 / 4.4.4.4 | 上ルート | 33000 - / 44000 - |
| P3 / P4 | 5.5.5.5 / 6.6.6.6 | 下ルート | 55000 - / 66000 - |
| PE2 | 7.7.7.7 | tail-end | 77000 - 77999 |
| CE1 / CE2 | 1.1.1.1 / 8.8.8.8 | AS 65101 / AS 65102 | - |
ラベルの範囲を装置ごとに分けてあります。 TEのトンネルはホップごとにラベルが変わるので、
show mpls traffic-eng tunnels detailや転送表に出たラベルがどの装置の割り当てかを読めるようにするためです。
明示経路の途中のリンクとして、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)
interface tunnel-te0
ipv4 unnumbered Loopback0
destination 7.7.7.7
record-route
path-option 10 dynamic
! 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.6が、このときのPathです。
EXPLICIT ROUTE: IPv4 10.2.3.3, IPv4 10.3.4.4, IPv4 10.4.7.7,
Length: 36
Object class: EXPLICIT ROUTE object (20)
C-Type: 1
IPv4 Subobject - 10.2.3.3, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.2.3.3
Prefix length: 32
IPv4 Subobject - 10.3.4.4, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.3.4.4
Prefix length: 32
IPv4 Subobject - 10.4.7.7, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.4.7.7
Prefix length: 32
IPv4 Subobject - 7.7.7.7, Strict
0... .... = Hop: Strict HopEROにhead-endが計算した経路がStrictで並びます。直後にP1から返ったResv(No.7)が、トンネルに積むラベルを運びます。
LABEL: 33010
Length: 8
Object class: LABEL object (16)
C-type: Packet Label (1)
Label: 33010
RECORD ROUTE: IPv4 10.2.3.3, IPv4 10.3.4.4, IPv4 10.4.7.7STEP 2で、下ルートをすべてstrictで並べた明示経路をpath-option 10にし、動的経路を20に回しました。
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
! 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:05 (since Mon Oct 12 08:15:59 UTC 2026)
Current LSP:
Uptime: 00:03:05 (since Mon Oct 12 08:15:59 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を両端で落とします。
interface GigabitEthernet0/0/0/1
shutdown
!interface GigabitEthernet0/0/0/0
shutdown
! 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: Mon Oct 12 08:24:15 2026
Info: No path to destination, 7.7.7.7 (holdown)
Last Signalled Error : Mon Oct 12 08:24:15 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.127がそのPathErrです。
ERROR: IPv4, Error code: Routing Error, Value: 5, Error Node: 10.5.6.5
Length: 12
Object class: ERROR object (6)
C-Type: IPv4 (1)
Error node: 10.5.6.5
Flags: 0x04 Path-State-Removed
.... .1.. = Path State Removed: Set
.... ..0. = NotGuilty: Not set
.... ...0 = InPlace: Not set
Error code: Routing Error (24)
Error value: No route available toward destination (5) History:
Tunnel has been up for: 00:03:55 (since Mon Oct 12 08:24:15 UTC 2026)
Current LSP:
Uptime: 00:03:55 (since Mon Oct 12 08:24:15 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#show clock
Mon Oct 12 08:24:03.561 UTC
08:24:03.603 UTC Mon Oct 12 2026
RP/0/RP0/CPU0:PE1#ping mpls traffic-eng tunnel-te 0 repeat 600 interval 100 timeout 1
Mon Oct 12 08:24:03.740 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.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (600/600), round-trip min/avg/max = 10/16/102 ms
RP/0/RP0/CPU0:PE1#show clock
Mon Oct 12 08:25:05.329 UTC
08:25:05.373 UTC Mon Oct 12 2026STEP 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: Mon Oct 12 08:24:15 2026
Info: No path to destination, 7.7.7.7 (holdown)
Last Signalled Error : Mon Oct 12 08:24:15 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
Mon Oct 12 08:34:55.142 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
Mon Oct 12 08:34:57.945 UTC明示経路は計算できる状態なのに、トンネルはpath-option 20のままです。 手動で再最適化しました。
RP/0/RP0/CPU0:PE1#mpls traffic-eng reoptimize 0
Mon Oct 12 08:34:58.441 UTC
Mon Oct 12 08:36:01.146 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 : Mon Oct 12 08:24:15 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:14:54 (since Mon Oct 12 08:24:15 UTC 2026)
Current LSP:
Uptime: 00:04:11 (since Mon Oct 12 08:34:58 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に上書きしました。
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
! Explicit Route:
Strict, 10.2.5.5
Strict, 10.5.6.6
Strict, 10.6.7.7
Strict, 7.7.7.7
Record Route: Empty
Tspec: avg rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
Session Attributes: Local Prot: Not Set, Node Prot: Not Set, BW Prot: Not Set
Soft Preemption Desired: Not Setlooseを指定したのに、EROは4つともStrictです。 head-endがlooseの区間(P3からPE2まで)を計算して埋めています。PE1 - P3間のNo.4のPathでも、Lビットはどのサブオブジェクトにもありませんでした。
EXPLICIT ROUTE: IPv4 10.2.5.5, IPv4 10.5.6.6, IPv4 10.6.7.7,
Length: 36
Object class: EXPLICIT ROUTE object (20)
C-Type: 1
IPv4 Subobject - 10.2.5.5, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.2.5.5
Prefix length: 32
IPv4 Subobject - 10.5.6.6, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.5.6.6
Prefix length: 32
IPv4 Subobject - 10.6.7.7, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.6.7.7
Prefix length: 32
IPv4 Subobject - 7.7.7.7, Strict
0... .... = Hop: Strict Hop History:
Tunnel has been up for: 00:22:56 (since Mon Oct 12 08:24:15 UTC 2026)
Current LSP:
Uptime: 00:03:02 (since Mon Oct 12 08:44:09 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を再び両端で落としました。
interface GigabitEthernet0/0/0/1
shutdown
!interface GigabitEthernet0/0/0/0
shutdown
! 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 : Mon Oct 12 08:52:21 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:03:54 (since Mon Oct 12 08:52:21 UTC 2026)
Current LSP:
Uptime: 00:03:54 (since Mon Oct 12 08:52:21 UTC 2026)
Reopt. LSP:
Last Failure:
LSP not signalled, identical to the [CURRENT] LSP
Date/Time: Mon Oct 12 08:50:51 UTC 2026 [00:05:24 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.127)のEROです。
EXPLICIT ROUTE: IPv4 10.2.5.5, IPv4 10.3.5.3, IPv4 10.3.4.4, ...
Length: 44
Object class: EXPLICIT ROUTE object (20)
C-Type: 1
IPv4 Subobject - 10.2.5.5, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.2.5.5
Prefix length: 32
IPv4 Subobject - 10.3.5.3, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.3.5.3
Prefix length: 32
IPv4 Subobject - 10.3.4.4, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.3.4.4
Prefix length: 32
IPv4 Subobject - 10.4.7.7, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.4.7.7
Prefix length: 32
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#show clock
Mon Oct 12 08:52:09.811 UTC
08:52:09.851 UTC Mon Oct 12 2026
RP/0/RP0/CPU0:PE1#ping mpls traffic-eng tunnel-te 0 repeat 600 interval 100 timeout 1
Mon Oct 12 08:52:09.994 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.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!QQQ!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (597/600), round-trip min/avg/max = 12/18/81 ms
RP/0/RP0/CPU0:PE1#show clock
Mon Oct 12 08:53:11.484 UTC
08:53:11.566 UTC Mon Oct 12 2026直結していないstrictとverbatim(STEP 7・8)
STEP 7でリンクを戻し、P3の次に直結していないP2(10.4.7.4)をstrictで並べた明示経路を、path-option 10に上書きしました。
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
!interface GigabitEthernet0/0/0/1
no shutdown
!interface GigabitEthernet0/0/0/0
no shutdown
! 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]: Mon Oct 12 09:03:03 2026
Info: No path to destination, 7.7.7.7 (unknown, Flags: 0) History:
Tunnel has been up for: 00:13:46 (since Mon Oct 12 08:52:21 UTC 2026)
Current LSP:
Uptime: 00:03:04 (since Mon Oct 12 09:03:03 UTC 2026)
Reopt. LSP:
Last Failure:
LSP not signalled, identical to the [CURRENT] LSP
Date/Time: Mon Oct 12 08:50:51 UTC 2026 [00:15:16 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を付けました。
interface tunnel-te0
path-option 10 explicit name BAD-STRICT verbatim
! 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
Mon Oct 12 09:11:53.979 UTC
Mon Oct 12 09:12:56.944 UTCPE1はEROをそのまま送りました(PE1 - P3間のNo.32)。
EXPLICIT ROUTE: IPv4 10.2.5.5, IPv4 10.4.7.4
Length: 20
Object class: EXPLICIT ROUTE object (20)
C-Type: 1
IPv4 Subobject - 10.2.5.5, Strict
0... .... = Hop: Strict Hop
Type: 1 (IPv4)
Length: 8
IPv4 hop: 10.2.5.5
Prefix length: 32
IPv4 Subobject - 10.4.7.4, Strict
0... .... = Hop: Strict HopP3はBad strict nodeを返さず、自分のサブオブジェクトを外して、IGPの経路でP4へ転送しました(P3 - P4間のNo.33)。
EXPLICIT ROUTE: IPv4 10.4.7.4
Length: 12
Object class: EXPLICIT ROUTE object (20)
C-Type: 1
IPv4 Subobject - 10.4.7.4, Strict
0... .... = Hop: Strict HopEROの先頭が自分ではないので、P4がBad initial subobject(24,4)を返しました(No.34)。
ERROR: IPv4, Error code: Routing Error, Value: 4, Error Node: 10.5.6.6
Length: 12
Object class: ERROR object (6)
C-Type: IPv4 (1)
Error node: 10.5.6.6
Flags: 0x04 Path-State-Removed
.... .1.. = Path State Removed: Set
.... ..0. = NotGuilty: Not set
.... ...0 = InPlace: Not set
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] : Mon Oct 12 09:11:54 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 |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — |
| PE1 | show | log | run | clear | ping | oam | trace |
| P1 | show | log | run | clear | ping | — | trace |
| P2 | show | log | run | clear | — | — | trace |
| P3 | show | log | run | clear | ping | — | trace |
| P4 | show | log | run | clear | — | — | trace |
| PE2 | show | log | run | clear | ping | oam | trace |
| CE2 | show | log | run | clear | ping | — | — |
STEP 1:path-option 10 dynamic
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — |
| PE1 | show | log | run | clear | ping | oam | trace | cfg |
| P1 | show | log | run | clear | ping | — | trace | — |
| P2 | show | log | run | clear | — | — | trace | — |
| P3 | show | log | run | clear | ping | — | trace | — |
| P4 | show | log | run | clear | — | — | trace | — |
| PE2 | show | log | run | clear | ping | oam | trace | — |
| CE2 | show | log | run | clear | ping | — | — | — |
STEP 2:明示経路(下ルートをすべてstrict)を10、動的経路を20に
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — |
| PE1 | show | log | run | clear | ping | oam | trace | cfg |
| P1 | show | log | run | clear | ping | — | trace | — |
| P2 | show | log | run | clear | — | — | trace | — |
| P3 | show | log | run | clear | ping | — | trace | — |
| P4 | show | log | run | clear | — | — | trace | — |
| PE2 | show | log | run | clear | ping | oam | trace | — |
| CE2 | show | log | run | clear | ping | — | — | — |
STEP 3:P3 - P4を両端でshutdown
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | 断の測定 | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — | — |
| PE1 | show | log | run | clear | ping | oam | lspping | trace | — |
| P1 | show | log | run | clear | ping | — | — | trace | — |
| P2 | show | log | run | clear | — | — | — | trace | — |
| P3 | show | log | run | clear | ping | — | — | trace | cfg |
| P4 | show | log | run | clear | — | — | — | trace | cfg |
| PE2 | show | log | run | clear | ping | oam | — | trace | — |
| CE2 | show | log | run | clear | ping | — | — | — | — |
STEP 4:P3 - P4を復旧し、手動で再最適化
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | trace | 投入した設定 | 追加の記録 |
|---|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — | — |
| PE1 | show | log | run | clear | ping | oam | trace | — | debug |
| P1 | show | log | run | clear | ping | — | trace | — | — |
| P2 | show | log | run | clear | — | — | trace | — | — |
| P3 | show | log | run | clear | ping | — | trace | cfg | — |
| P4 | show | log | run | clear | — | — | trace | cfg | — |
| PE2 | show | log | run | clear | ping | oam | trace | — | — |
| CE2 | show | log | run | clear | ping | — | — | — | — |
STEP 5:明示経路を「P3はstrict、PE2はloose」に上書き
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — |
| PE1 | show | log | run | clear | ping | oam | trace | cfg |
| P1 | show | log | run | clear | ping | — | trace | — |
| P2 | show | log | run | clear | — | — | trace | — |
| P3 | show | log | run | clear | ping | — | trace | — |
| P4 | show | log | run | clear | — | — | trace | — |
| PE2 | show | log | run | clear | ping | oam | trace | — |
| CE2 | show | log | run | clear | ping | — | — | — |
STEP 6:P3 - P4を再び両端でshutdown
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | 断の測定 | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — | — |
| PE1 | show | log | run | clear | ping | oam | lspping | trace | — |
| P1 | show | log | run | clear | ping | — | — | trace | — |
| P2 | show | log | run | clear | — | — | — | trace | — |
| P3 | show | log | run | clear | ping | — | — | trace | cfg |
| P4 | show | log | run | clear | — | — | — | trace | cfg |
| PE2 | show | log | run | clear | ping | oam | — | trace | — |
| CE2 | show | log | run | clear | ping | — | — | — | — |
STEP 7:復旧し、直結していないstrict(P3の次にP2)を10に上書き
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — |
| PE1 | show | log | run | clear | ping | oam | trace | cfg |
| P1 | show | log | run | clear | ping | — | trace | — |
| P2 | show | log | run | clear | — | — | trace | — |
| P3 | show | log | run | clear | ping | — | trace | cfg |
| P4 | show | log | run | clear | — | — | trace | cfg |
| PE2 | show | log | run | clear | ping | oam | trace | — |
| CE2 | show | log | run | clear | ping | — | — | — |
STEP 8:同じ明示経路にverbatimを付け、手動で再最適化
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | trace | 投入した設定 | 追加の記録 |
|---|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — | — |
| PE1 | show | log | run | clear | ping | oam | trace | cfg | debug |
| P1 | show | log | run | clear | ping | — | trace | — | — |
| P2 | show | log | run | clear | — | — | trace | — | — |
| P3 | show | log | run | clear | ping | — | trace | — | — |
| P4 | show | log | run | clear | — | — | trace | — | — |
| PE2 | show | log | run | clear | ping | oam | trace | — | — |
| CE2 | show | log | run | clear | ping | — | — | — | — |
STEP 9:撤去(最終状態)
| ルータ | show出力 | syslog | running-config | クリア | ping | OAM | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | clear | ping | — | — | — |
| PE1 | show | log | run | clear | ping | oam | trace | cfg |
| P1 | show | log | run | clear | ping | — | trace | — |
| P2 | show | log | run | clear | — | — | trace | — |
| P3 | show | log | run | clear | ping | — | trace | — |
| P4 | show | log | run | clear | — | — | trace | — |
| PE2 | show | log | run | clear | ping | oam | trace | — |
| CE2 | show | log | run | clear | ping | — | — | — |
パケットキャプチャーはSTEPごとに4つの区間で取得しています。
| STEP | PE1 - P1間 | PE1 - P3間 | P1 - P3間 | P3 - P4間 |
|---|---|---|---|---|
| 0 | pcap | pcap | pcap | pcap |
| 1 | pcap | pcap | pcap | pcap |
| 2 | pcap | pcap | pcap | pcap |
| 3 | pcap | pcap | pcap | pcap |
| 4 | pcap | pcap | pcap | pcap |
| 5 | pcap | pcap | pcap | pcap |
| 6 | pcap | pcap | pcap | pcap |
| 7 | pcap | pcap | pcap | pcap |
| 8 | pcap | pcap | pcap | pcap |
| 9 | pcap | pcap | pcap | pcap |
参考
| 出典 | 参照した箇所 |
|---|---|
| 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)での観測です。
- MPLSとは
- MPLSラベルとラベルスタック
- MPLSのラベル操作(push / swap / pop)とPHP
- MPLSのTTL処理とMTU
- LDPとは
- LDPのラベル配布モードとラベルスペース
- LDP-IGPシンクロナイゼーションとLDPセッション保護
- LDPのラベル広告制御(フィルタリング)
- LDPのセッション認証(TCP MD5)
- MPLSのOAM(LSP Ping / LSP Traceroute)
- MPLS TE(RSVP-TE)とは
- MPLS TEのCSPFと経路の制約(帯域 / affinity / TEメトリック)
- MPLS TEトンネルへのトラフィック誘導
- MPLS TEのFRR(リンク保護とノード保護)
- MPLS TEのFRR(auto-tunnel backupとSRLG)
- MPLSのQoS(EXPとuniform / pipe / short-pipe)
- MPLSのQoSの帯域制御とキューイング(policer / shaper / priority)