↓ メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. MPLS記事一覧/

MPLS TE(RSVP-TE)とは

目次

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 dynamicCSPFが計算する(制約がなければ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のシグナリング

メッセージ向き主なオブジェクト
Pathhead-end → tail-endEXPLICIT_ROUTE(ERO)、LABEL_REQUEST
Resvtail-end → head-endLABEL、RECORD_ROUTE(実際に通った経路)
PathErrエラーを見つけたノード → head-endERROR_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節)。

障害時の動き

明示経路の途中のリンクが落ちると、次のように進みます。

  1. 落ちたリンクの手前のノードが、head-endへPathErr(24,5)(No route available toward destination)を返す
  2. head-endはそのLSPを捨て、path-optionを番号順に試し直す。strictだけの明示経路は同じ経路しか計算できないので、次のpath-option(動的経路)で張り直す
  3. looseを含む明示経路は、head-endがlooseの区間を計算し直せるので、同じpath-optionのまま別の経路で張り直す
  4. どちらも古い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 - PE210 ×3 = 30IGPの最短。動的経路はここ
下 PE1 - P3 - P4 - PE220 ×3 = 60明示経路で通す
横木 P1 - P3 / P2 - P430looseの迂回路
ルータLo0役割ラベル範囲
PE12.2.2.2head-end24000 - 24999
P1 / P23.3.3.3 / 4.4.4.4上ルート33000 - / 44000 -
P3 / P45.5.5.5 / 6.6.6.6下ルート55000 - / 66000 -
PE27.7.7.7tail-end77000 - 77999
CE1 / CE21.1.1.1 / 8.8.8.8AS 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の最短は上ルート
1path-option 10 dynamicIGPと同じ上ルート。PathとResv
2明示経路(下ルートをすべてstrict)を10、動的経路を20に下ルートを通る。使用中のpath-optionを消したのでトンネルは張り直し
3P3 - P4を両端でshutdownPathErr(24,5)。path-option 20(上ルート)で張り直し
4P3 - P4を復旧し、手動で再最適化復旧しても20のまま。再最適化で10へ戻り、途切れない
5明示経路を「P3はstrict、PE2はloose」に上書きEROはすべてstrict。上書きなので途切れない
6P3 - P4を再び両端でshutdownpath-option 10のまま横木経由で張り直し
7復旧し、直結していないstrict(P3の次にP2)を10に上書きhead-endが弾き、20で張る
8同じ明示経路にverbatimを付け、手動で再最適化Pathが送られ、途中のノードがエラーを返す
9撤去(最終状態)STEP 0と同じに戻る

以降の節はSTEP順ではなく、テーマごとに並べています。

動的経路と明示経路(STEP 1・2)

STEP 1 PE1にcommitした設定
interface tunnel-te0
 ipv4 unnumbered Loopback0
 destination 7.7.7.7
 record-route
 path-option 10 dynamic
!
STEP 1 PE1 show mpls traffic-eng tunnels(経路)
  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です。

STEP 1 No.6 PATH(PE1 → PE2、tshark -V 抜粋)
    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 Hop
上のtshark出力のパケット(No.6 PATH)のpcapをダウンロード

EROにhead-endが計算した経路がStrictで並びます。直後にP1から返ったResv(No.7)が、トンネルに積むラベルを運びます。

STEP 1 No.7 RESV(P1 → PE1、tshark -V 抜粋)
        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.7
上のtshark出力のパケット(No.7 RESV)のpcapをダウンロード

STEP 2で、下ルートをすべてstrictで並べた明示経路をpath-option 10にし、動的経路を20に回しました。

STEP 2 PE1にcommitした設定
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
!
STEP 2 PE1 show mpls traffic-eng tunnels(path-option)
    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
STEP 2 PE1 show mpls traffic-eng tunnels(経路)
  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.7

path-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を両端で落とします。

STEP 3 P3にcommitした設定
interface GigabitEthernet0/0/0/1
 shutdown
!
STEP 3 P4にcommitした設定
interface GigabitEthernet0/0/0/0
 shutdown
!
STEP 3 PE1 show mpls traffic-eng tunnels(path-option とエラー)
    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.5

P3(10.5.6.5)がPathErr(24,5)を返し、トンネルはpath-option 20の動的経路(上ルート)で張り直されました。PE1 - P3間のNo.127がそのPathErrです。

STEP 3 No.127 PATH ERROR(P3 → PE1、tshark -V 抜粋)
        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)
上のtshark出力のパケット(No.127 PATH ERROR)のpcapをダウンロード
STEP 3 PE1 show mpls traffic-eng tunnels(経路)
  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(送れなかった)でした。

STEP 3 PE1 ping mpls traffic-eng tunnel-te 0(リンク断をまたいで600発)
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 2026

STEP 4でリンクを戻し、90秒待ってから状態を見ました。

STEP 4 PE1 show mpls traffic-eng tunnels 0(復旧から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.5
STEP 4 PE1 show mpls traffic-eng topology path(明示経路で試算)
RP/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のままです。 手動で再最適化しました。

STEP 4 PE1 手動の再最適化
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
STEP 4 PE1 show mpls traffic-eng tunnels 0(再最適化の後、path-option)
    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
STEP 4 PE1 show mpls traffic-eng tunnels 0(再最適化の後、経路)
    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.7

path-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に上書きしました。

STEP 5 PE1にcommitした設定
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
!
STEP 5 PE1 show mpls traffic-eng tunnels detail(送ったERO、抜粋)
        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 Set

looseを指定したのに、EROは4つともStrictです。 head-endがlooseの区間(P3からPE2まで)を計算して埋めています。PE1 - P3間のNo.4のPathでも、Lビットはどのサブオブジェクトにもありませんでした。

STEP 5 No.4 PATH(PE1 → P3、tshark -V 抜粋)
        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
上のtshark出力のパケット(No.4 PATH)のpcapをダウンロード
STEP 5 PE1 show mpls traffic-eng tunnels(経路)
  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を再び両端で落としました。

STEP 6 P3にcommitした設定
interface GigabitEthernet0/0/0/1
 shutdown
!
STEP 6 P4にcommitした設定
interface GigabitEthernet0/0/0/0
 shutdown
!
STEP 6 PE1 show mpls traffic-eng tunnels(path-option)
    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
STEP 6 PE1 show mpls traffic-eng tunnels(経路)
  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.7

P3が同じPathErr(24,5)を返しましたが、今度はpath-option 10のまま、P3 → P1(横木)→ P2 → PE2で張り直されました(path weight 70)。張り直し直後のPath(No.127)のEROです。

STEP 6 No.127 PATH(PE1 → P3、tshark -V 抜粋)
        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
上のtshark出力のパケット(No.127 PATH)のpcapをダウンロード

迂回したのは途中のP3ではなく、head-endです。トンネルは一度落ちて13:10:40から数え直され、LSP Pingは3発落ちました。

STEP 6 PE1 ping mpls traffic-eng tunnel-te 0(リンク断をまたいで600発)
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に上書きしました。

STEP 7 PE1にcommitした設定
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
!
STEP 7 P3にcommitした設定
interface GigabitEthernet0/0/0/1
 no shutdown
!
STEP 7 P4にcommitした設定
interface GigabitEthernet0/0/0/0
 no shutdown
!
STEP 7 PE1 show mpls traffic-eng tunnels(path-option とエラー)
    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)
STEP 7 PE1 show mpls traffic-eng tunnels(経路)
  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.7

head-endは経路を計算できず(No path to destination)、path-option 20の上ルートでmake-before-breakしました。このPathはどのリンクにも出ていません(キャプチャーに10.4.7.4を含むRSVPは0件)。

STEP 8で同じ明示経路にverbatimを付けました。

STEP 8 PE1にcommitした設定
interface tunnel-te0
 path-option 10 explicit name BAD-STRICT verbatim
!
STEP 8 PE1 show mpls traffic-eng tunnels 0 detail(commitの後、抜粋)
    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で、それが条件を満たしているので、再最適化のきっかけがないからです。手動で再最適化しました。

STEP 8 PE1 手動の再最適化
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 UTC

PE1はEROをそのまま送りました(PE1 - P3間のNo.32)。

STEP 8 No.32 PATH(PE1 → P3、tshark -V 抜粋)
        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 Hop
上のtshark出力のパケット(No.32 PATH)のpcapをダウンロード

P3はBad strict nodeを返さず、自分のサブオブジェクトを外して、IGPの経路でP4へ転送しました(P3 - P4間のNo.33)。

STEP 8 No.33 PATH(P3 → P4、tshark -V 抜粋)
    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 Hop
上のtshark出力のパケット(No.33 PATH)のpcapをダウンロード

EROの先頭が自分ではないので、P4がBad initial subobject(24,4)を返しました(No.34)。

STEP 8 No.34 PATH ERROR(P4 → P3、tshark -V 抜粋)
        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)
上のtshark出力のパケット(No.34 PATH ERROR)のpcapをダウンロード
STEP 8 PE1 show mpls traffic-eng tunnels 0 detail(再最適化の後、抜粋)
    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
110(dynamic)上--
210(strict)下あり(noで消した)-
320(dynamic)上あり(PathErr 24,5)599/600
410(strict)下なし(再最適化)-
510(loose)下なし(上書き)-
610(loose)P3 → P1 → P2あり(PathErr 24,5)597/600
720(dynamic)上なし(再最適化)-
820(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.txtshow 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.txtping / traceroute mpls traffic-eng tunnel-te 0とping / traceroute mpls ipv4(PE1・PE2)
..._trace.txtshow mpls traffic-eng trace head-end / linkとshow rsvp trace signalling(コア6台)
..._commit.cfgそのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ
..._lspping.txtSTEP 3・6でリンク断をまたいで流したLSP Ping(PE1)
..._debug.txtSTEP 4・8で再最適化の前後にPE1で取ったshowとmpls traffic-eng reoptimize 0

STEP 0:初期状態(トンネルなし)

ルータshow出力syslogrunning-configクリアpingOAMtrace
CE1showlogrunclearping——
PE1showlogrunclearpingoamtrace
P1showlogrunclearping—trace
P2showlogrunclear——trace
P3showlogrunclearping—trace
P4showlogrunclear——trace
PE2showlogrunclearpingoamtrace
CE2showlogrunclearping——

STEP 1:path-option 10 dynamic

ルータshow出力syslogrunning-configクリアpingOAMtrace投入した設定
CE1showlogrunclearping———
PE1showlogrunclearpingoamtracecfg
P1showlogrunclearping—trace—
P2showlogrunclear——trace—
P3showlogrunclearping—trace—
P4showlogrunclear——trace—
PE2showlogrunclearpingoamtrace—
CE2showlogrunclearping———

STEP 2:明示経路(下ルートをすべてstrict)を10、動的経路を20に

ルータshow出力syslogrunning-configクリアpingOAMtrace投入した設定
CE1showlogrunclearping———
PE1showlogrunclearpingoamtracecfg
P1showlogrunclearping—trace—
P2showlogrunclear——trace—
P3showlogrunclearping—trace—
P4showlogrunclear——trace—
PE2showlogrunclearpingoamtrace—
CE2showlogrunclearping———

STEP 3:P3 - P4を両端でshutdown

ルータshow出力syslogrunning-configクリアpingOAM断の測定trace投入した設定
CE1showlogrunclearping————
PE1showlogrunclearpingoamlsppingtrace—
P1showlogrunclearping——trace—
P2showlogrunclear———trace—
P3showlogrunclearping——tracecfg
P4showlogrunclear———tracecfg
PE2showlogrunclearpingoam—trace—
CE2showlogrunclearping————

STEP 4:P3 - P4を復旧し、手動で再最適化

ルータshow出力syslogrunning-configクリアpingOAMtrace投入した設定追加の記録
CE1showlogrunclearping————
PE1showlogrunclearpingoamtrace—debug
P1showlogrunclearping—trace——
P2showlogrunclear——trace——
P3showlogrunclearping—tracecfg—
P4showlogrunclear——tracecfg—
PE2showlogrunclearpingoamtrace——
CE2showlogrunclearping————

STEP 5:明示経路を「P3はstrict、PE2はloose」に上書き

ルータshow出力syslogrunning-configクリアpingOAMtrace投入した設定
CE1showlogrunclearping———
PE1showlogrunclearpingoamtracecfg
P1showlogrunclearping—trace—
P2showlogrunclear——trace—
P3showlogrunclearping—trace—
P4showlogrunclear——trace—
PE2showlogrunclearpingoamtrace—
CE2showlogrunclearping———

STEP 6:P3 - P4を再び両端でshutdown

ルータshow出力syslogrunning-configクリアpingOAM断の測定trace投入した設定
CE1showlogrunclearping————
PE1showlogrunclearpingoamlsppingtrace—
P1showlogrunclearping——trace—
P2showlogrunclear———trace—
P3showlogrunclearping——tracecfg
P4showlogrunclear———tracecfg
PE2showlogrunclearpingoam—trace—
CE2showlogrunclearping————

STEP 7:復旧し、直結していないstrict(P3の次にP2)を10に上書き

ルータshow出力syslogrunning-configクリアpingOAMtrace投入した設定
CE1showlogrunclearping———
PE1showlogrunclearpingoamtracecfg
P1showlogrunclearping—trace—
P2showlogrunclear——trace—
P3showlogrunclearping—tracecfg
P4showlogrunclear——tracecfg
PE2showlogrunclearpingoamtrace—
CE2showlogrunclearping———

STEP 8:同じ明示経路にverbatimを付け、手動で再最適化

ルータshow出力syslogrunning-configクリアpingOAMtrace投入した設定追加の記録
CE1showlogrunclearping————
PE1showlogrunclearpingoamtracecfgdebug
P1showlogrunclearping—trace——
P2showlogrunclear——trace——
P3showlogrunclearping—trace——
P4showlogrunclear——trace——
PE2showlogrunclearpingoamtrace——
CE2showlogrunclearping————

STEP 9:撤去(最終状態)

ルータshow出力syslogrunning-configクリアpingOAMtrace投入した設定
CE1showlogrunclearping———
PE1showlogrunclearpingoamtracecfg
P1showlogrunclearping—trace—
P2showlogrunclear——trace—
P3showlogrunclearping—trace—
P4showlogrunclear——trace—
PE2showlogrunclearpingoamtrace—
CE2showlogrunclearping———

パケットキャプチャーはSTEPごとに4つの区間で取得しています。

STEPPE1 - P1間PE1 - P3間P1 - P3間P3 - P4間
0pcappcappcappcap
1pcappcappcappcap
2pcappcappcappcap
3pcappcappcappcap
4pcappcappcappcap
5pcappcappcappcap
6pcappcappcappcap
7pcappcappcappcap
8pcappcappcappcap
9pcappcappcappcap

参考

出典参照した箇所
RFC 3209 RSVP-TE: Extensions to RSVP for LSP Tunnels1.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)での観測です。