メインコンテンツへスキップ
  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 dynamic CSPFが計算する(制約がなければIGPと同じ)

明示経路を10、動的経路を20にしておくのが典型です。明示経路が使えないときも、動的経路でトンネルを維持できます。

strictとloose

明示経路の各ホップはstrictlooseで指定します。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節)。

障害時の動き

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

  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 - 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)

STEP 1 PE1にcommitした設定
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
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.1078が、このときのPathです。

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

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

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

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

STEP 2 PE1にcommitした設定
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
STEP 2 PE1 show mpls traffic-eng tunnels(抜粋)
    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: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.7

path-option 10の明示経路で下ルート(P3 → P4)に移りました。ただしTunnel has been up forは12:34:11から数え直され、前のLSPはpath tearで消えています。使用中のpath-option 10 dynamicnoで消したので、トンネルは一度落ちて張り直されました。

リンク断と復旧(STEP 3・4)

明示経路の途中のP3 - P4を両端で落とします。

STEP 3 P3にcommitした設定
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
!
end
STEP 3 P4にcommitした設定
RP/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
STEP 3 PE1 show mpls traffic-eng tunnels(抜粋)
    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.5

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

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

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

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: 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.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

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のままです。 手動で再最適化しました。

STEP 4 PE1 手動の再最適化
RP/0/RP0/CPU0:PE1#mpls traffic-eng reoptimize 0

Sun Sep 13 12:53:22.034 UTC
STEP 4 PE1 show mpls traffic-eng tunnels 0(再最適化の後、抜粋)
    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 
STEP 4 PE1 show mpls traffic-eng tunnels 0(再最適化の後、抜粋)
    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.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した設定
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
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

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

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

STEP 6 P3にcommitした設定
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
!
end
STEP 6 P4にcommitした設定
RP/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
STEP 6 PE1 show mpls traffic-eng tunnels(抜粋)
    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 
STEP 6 PE1 show mpls traffic-eng tunnels(抜粋)
  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.7

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

STEP 6 No.2911 PATH(PE1 → P3、tshark -V 抜粋)
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
上のtshark出力のパケット(No.2911 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#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に上書きしました。

STEP 7 PE1にcommitした設定
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
!
end
STEP 7 P3にcommitした設定
RP/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
!
end
STEP 7 P4にcommitした設定
RP/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
STEP 7 PE1 show mpls traffic-eng tunnels(抜粋)
    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)
STEP 7 PE1 show mpls traffic-eng tunnels(抜粋)
  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.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した設定
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
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

Sun Sep 13 13:33:31.946 UTC

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

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

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

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

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

STEP 8 No.3687 PATH ERROR(P4 → P3、tshark -V 抜粋)
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)
上のtshark出力のパケット(No.3687 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] : 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 0ping / traceroute mpls ipv4(PE1・PE2)
..._trace.txt show mpls traffic-eng trace head-end / linkshow rsvp trace signalling(コア6台)
..._commit.cfg そのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ
..._lspping.txt STEP 3・6でリンク断をまたいで流したLSP Ping(PE1)
..._debug.txt STEP 4・8で再最適化の前後にPE1で取ったshowmpls 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)での観測です。