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

MPLS TEのFRR(リンク保護とノード保護)

目次

MPLS TEのFRR(リンク保護とノード保護)

MPLS TEのトンネルは、途中のリンクやノードが落ちるとhead-endが別の経路で張り直します。張り直しが終わるまで、トラフィックは流れません。FRR(Fast Reroute)は、障害の手前のルータが用意しておいたバイパスへすぐに切り替え、head-endを待たずに転送を続ける仕組みです(RFC 4090)。仕組みを解説し、IOS XR(XRd)のラボで、L3VPNのパケットが迂回するときのラベルと、CEから見た断を確かめます。

トンネルと明示経路の基本はMPLS TE(RSVP-TE)とはで解説しています。

PLRとMP

用語意味(RFC 4090 2節)
PLR(Point of Local Repair)バイパスの入口。障害の直前にいて、トラフィックをバイパスへ切り替える
MP(Merge Point)バイパスの出口。保護するLSPに合流する
NHOPバイパス直後のリンクを避ける。リンク障害を守る
NNHOPバイパス次のノードを避け、その次のノードで合流する。ノード障害を守る

保護は2か所の設定で成り立ちます。head-endがトンネルに保護を要求し、途中のルータがPLRとしてバイパスを用意します。RFC 4090は、保護するLSP上のegress以外のすべてのLSRにPLRの振る舞いを求めています(6節)。

one-to-oneとfacility

方式バイパス
one-to-one backup保護するLSPごとに迂回用のLSP(detour)を張る3.1節
facility backup1本のバイパストンネルで、同じリンクやノードを通る複数のLSPを守る3.2節

facility backupはMPLSのラベルスタックを使います。PLRは、ラベルをMPが保護するLSPとして理解できるものに付け替え、その上にバイパストンネルのラベルを積みます(3.2節)。迂回中のパケットはラベルが1段増えます。 IOS XRで使えるのはfacility backupで、トンネルのfast-rerouteの下にdetourの選択肢はありません。

保護の要求とRROのフラグ

head-endは、PathメッセージのSESSION_ATTRIBUTEのフラグで保護を要求します(4.3節)。

フラグ意味
Local protection desired0x01FRRを求める
Label recording desired0x02各LSRが受け取るラベルをRROに記録させる
Node protection desired0x10ノード保護を求める

RFC 4090は、head-endに「local protection desiredを立てるか、FAST_REROUTEオブジェクトを入れるか、その両方」と、保護を求めるLSPでのlabel recording desiredを求めています(5節、どちらもMUST)。IOS XRはFAST_REROUTEオブジェクトを使わず、フラグだけで要求します。MPが保護するLSPに付けたラベルは、RROに記録されたラベルからPLRが知ります。

PLRは、Resvで返すRROの自分のサブオブジェクトに状態を載せます(4.4節、6節)。

フラグ立てる条件
Local protection available0x01バックアップ経路がある(MUST)
Local protection in use0x02実際にバイパスへ流している
Node protection0x08バックアップが直後のノードの障害も守る(SHOULD)

ノード保護が求められていれば、PLRはまずノード保護を試み、できなければリンク保護を試みます(6節)。同じインタフェースにNHOPとNNHOPのバイパスがあれば、ノード保護を求めるLSPにはNNHOPが使われます。

迂回中のラベル

次節の構成で、CE1からCE2へ向かうVPNのパケットに付くラベルは次のとおりです。

リンク通常時NHOPで迂回中NNHOPで迂回中
PE1 - P12段(トンネル+VPN)2段2段
P1 - P4-3段(バイパス+P2のラベル+VPN)3段(バイパス+P3のラベル+VPN)
バイパスの最後のリンク-2段(P5 - P2)2段(P6 - P3)
P3 - PE21段(VPN)1段1段

バイパスのラベルはMPの1つ手前で外れ(PHP)、MPは保護するLSPのラベルを受け取ってそのまま転送します(3.2節)。

head-endへの通知と張り直し

迂回した経路は最適とは限りません。PLRはhead-endへPathErr(Error Code 25 Notify、値3 Tunnel locally repaired)を送り(6.5.1節、SHOULD)、head-endはより良い経路でLSPを張り直します。バイパスでトラフィックが流れ続けているので、head-endは新しいLSPを張ってから古いLSPを消せます(make-before-break)。トンネルは落ちません。 張り直しが終わるまでの間、トラフィックはバイパスを通り続けます。

FRRが無ければ、途中のルータはPathErr(24,5)を返すか、head-endが明示経路を使えないと判断し、トンネルを落としてから張り直します。 その間はVPNの転送路が無くなります。

障害をどう検知するかはRFC 4090の範囲外です(リンクダウンやBFDなど、実装に任されます)。

検証構成

上の段を通る2本のトンネル(PE1 → PE2、PE2 → PE1)をstrictの明示経路で張り、autoroute announceで相手PEのLoopbackへの経路をトンネルに向けます。CE1とCE2はVRF CUST-AでPEにつながり、PE1 - PE2はVPNv4のiBGPです。全リンクのOSPF costは10です。

ルータLo0役割
PE1 / PE211.11.11.11 / 22.22.22.22head-end / tail-end
P11.1.1.1行きのPLR
P22.2.2.2行きのNHOPのMP、戻りのPLR(リンク保護)
P33.3.3.3行きのNNHOPのMP、戻りのPLR(ノード保護)
P4 / P5 / P64.4.4.4 / 5.5.5.5 / 6.6.6.6バイパスが通る
CE1 / CE2101.101.101.101 / 102.102.102.102192.168.1.0/24 / 192.168.2.0/24
  • LDPのセッションは張りません。 トランスポートは両方向のトンネルだけです。ただしIOS XRは、mpls ldpの行が無いとVPNの経路をトンネル経由で解決しないので、PEにはmpls ldp(インタフェースなし)だけを入れています
  • 障害は両端を同時にshutdownして作ります。 CMLのXRdは片側のshutdownが対向に伝わらないため、PLR側も落として「PLRが障害を検知した状態」にします
  • 断はCE1からのpingで測りますcount 300 interval 100 timeout 1)。応答が無い間は1発ごとに1秒待つので、落ちた発数が断の秒数の目安になります

検証の全体像

STEP操作確かめること
0両方向のトンネル(上の段をstrictで10、動的経路を20)とautorouteCEの疎通。VPNのパケットのラベルは2段
1FRRなしでP1 - P2を両端shutdownトンネルが落ちて張り直す。CEの断
2復旧し、両方向のトンネルにfast-reroute、再最適化で上の段へSESSION_ATTRIBUTEのフラグ
3P1とP2にNHOPバイパスとbackup-pathFRRのDBがReady、RROのフラグと記録されたラベル
4P1 - P2を両端shutdownバイパス上で3段、PathErr(25,3)、トンネルは落ちない。CEの断
5復旧し、再最適化で上の段へFRRのDBがReadyに戻る
6fast-reroute protect nodeと、P1とP3にNNHOPバイパスNNHOPが選ばれる、RROのNode protection
7P2の障害(P2の全IFとP1側・P3側をshutdown)3段目がMP(P3)のラベル。CEの断
8撤去(最終状態)

FRRなしのリンク断(STEP 0・1)

STEP 0 PE1にcommitした設定
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Tue Sep 15 02:33:59.900 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
explicit-path name UPPER
 index 10 next-address strict ipv4 unicast 10.1.11.1
 index 20 next-address strict ipv4 unicast 10.1.2.2
 index 30 next-address strict ipv4 unicast 10.2.3.3
 index 40 next-address strict ipv4 unicast 10.3.22.22
!
interface tunnel-te0
 ipv4 unnumbered Loopback0
 autoroute announce
 !
 destination 22.22.22.22
 record-route
 path-option 10 explicit name UPPER
 path-option 20 dynamic
!
end
STEP 0 CE1 traceroute 192.168.2.1
RP/0/RP0/CPU0:CE1#traceroute 192.168.2.1 source 192.168.1.1
Tue Sep 15 02:39:10.973 UTC

Type escape sequence to abort.
Tracing the route to 192.168.2.1

 1  10.11.101.11 23 msec  4 msec  4 msec 
 2  10.1.11.1 [MPLS: Labels 24000/24015 Exp 0] 19 msec  16 msec  39 msec 
 3  10.1.2.2 [MPLS: Labels 24000/24015 Exp 0] 19 msec  18 msec  19 msec 
 4  10.2.3.3 [MPLS: Labels 24000/24015 Exp 0] 19 msec  21 msec  19 msec 
 5  10.3.22.22 [MPLS: Label 24015 Exp 0] 21 msec  21 msec  19 msec 
 6  10.22.102.102 33 msec  *  20 msec 

P1からP3まではトンネルとVPNの2段、P3がトンネルのラベルを外し、PE2へはVPNの1段で届きます。PE1 - P1間のNo.377がCE1のecho requestです。

STEP 0 No.377 ICMP Echo request(PE1 → P1、tshark -V 抜粋)
MultiProtocol Label Switching Header, Label: 24000, Exp: 0, S: 0, TTL: 254
MultiProtocol Label Switching Header, Label: 24015, Exp: 0, S: 1, TTL: 254
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.2.1
    Type: Echo (ping) request (8)
上のtshark出力のパケット(No.377 Echo request)のpcapをダウンロード

STEP 1で、FRRを設定しないままP1 - P2を両端で落としました。

STEP 1 CE1 ping 192.168.2.1(リンク断をまたいで300発)
RP/0/RP0/CPU0:CE1#ping 192.168.2.1 source 192.168.1.1 count 300 interval 100 timeout 1

Tue Sep 15 02:41:52.000 UTC
Type escape sequence to abort.
Sending 300, 100-byte ICMP Echos to 192.168.2.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!................!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!
Success rate is 94 percent (284/300), round-trip min/avg/max = 16/29/148 ms

16発が落ちました(約16秒)。

STEP 1 PE2 show mpls traffic-eng tunnels(抜粋)
    path option 20,  type dynamic  (Basis for Setup, path weight 60)
      Accumulative metrics: TE 60 IGP 60 Delay 1800000 
      Accumulative biased metrics: TE 60 IGP 60 Delay 1800000 
    path option 10,  type explicit UPPER
    Last PCALC Error: Tue Sep 15 02:42:03 2026
      Info: No path to destination, 11.11.11.11 (holdown)
    Last Signalled Error : Tue Sep 15 02:42:03 2026
      Info: [3] PathErr(24,5)-(Error: routing (24), Suberror: no route to dest (5)) at 10.1.2.2
STEP 1 PE2 show mpls traffic-eng tunnels(抜粋)
  History:
    Tunnel has been up for: 00:04:20 (since Tue Sep 15 02:42:03 UTC 2026)
    Current LSP:
      Uptime: 00:04:20 (since Tue Sep 15 02:42:03 UTC 2026)
    Prior LSP:
      ID: 3 Path Option: 10
      Removal Trigger: path error

P2(10.1.2.2)がPathErr(24,5)を返し、トンネルはTunnel has been up forが02:42:03から数え直され、動的経路で張り直されました。張り直した後のパケットは、P1 - P4間でも2段です(No.30)。

STEP 1 No.30 ICMP Echo request(P1 → P4、tshark -V 抜粋)
MultiProtocol Label Switching Header, Label: 24000, Exp: 0, S: 0, TTL: 253
MultiProtocol Label Switching Header, Label: 24015, Exp: 0, S: 1, TTL: 254
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.2.1
    Type: Echo (ping) request (8)
上のtshark出力のパケット(No.30 Echo request)のpcapをダウンロード

保護の要求とバイパス(STEP 2・3)

STEP 2 PE1にcommitした設定
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Tue Sep 15 02:51:10.401 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface tunnel-te0
 fast-reroute
!
end

再最適化で上の段に戻した後のPath(PE1 - P1間のNo.74)です。

STEP 2 No.74 PATH(PE1 → P1、tshark -V 抜粋)
Internet Protocol Version 4, Src: 10.1.11.11, Dst: 10.1.11.1
            Message Type: PATH Message.  (1)
        SESSION ATTRIBUTE: SetupPrio 7, HoldPrio 7, Local Protection, Label Recording, SE Style,  [PE1_t0]
            Flags: 0x07
                .... ...1 = Local protection: Desired
                .... ..1. = Label recording: Desired
                .... .1.. = SE style: Desired
                .... 0... = Bandwidth protection: Not Desired
                ...0 .... = Node protection: Not Desired
上のtshark出力のパケット(No.74 PATH)のpcapをダウンロード

Local protectionとLabel recordingがDesiredです。この時点ではバイパスが無いので、保護はまだ効きません。

STEP 3 P1にcommitした設定
RP/0/RP0/CPU0:P1#show configuration commit changes last 1
Tue Sep 15 02:59:16.470 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
explicit-path name NHOP-P2
 index 10 next-address strict ipv4 unicast 10.1.4.4
 index 20 next-address strict ipv4 unicast 10.4.5.5
 index 30 next-address strict ipv4 unicast 10.2.5.2
!
interface tunnel-te100
 ipv4 unnumbered Loopback0
 destination 2.2.2.2
 path-option 10 explicit name NHOP-P2
!
mpls traffic-eng
 interface GigabitEthernet0/0/0/1
  backup-path tunnel-te 100
 !
!
end

backup-pathで、Gi0/0/0/1(P2向け)を守るバイパスとしてtunnel-te100を指定します。

STEP 3 P1 show mpls traffic-eng fast-reroute database
RP/0/RP0/CPU0:P1#show mpls traffic-eng fast-reroute database
Tue Sep 15 03:00:35.829 UTC
LSP midpoint FRR information:
LSP identifier                   In-label Out Intf : Label   FRR Intf : Label   Status 
-------------------------------- -------- ------------------ ------------------ -------
11.11.11.11 0 [5]                24002    Gi0/0/0/1:24002    tt100:24002        Ready  
STEP 3 P1 show mpls traffic-eng tunnels protection(抜粋)
PE1_t0 Tunnel Id: 0 
  LSP Midpoint, signaled, connection up
  Src: 11.11.11.11, Dest: 22.22.22.22, Instance: 5
  Fast Reroute Protection: Requested
    Inbound: FRR Inactive
     LSP signalling info:
      Original: in i/f: GigabitEthernet0/0/0/0, label:  24002, phop: 10.1.11.11
    Outbound: FRR Ready
     Backup tunnel-te100 to LSP nhop
      tunnel-te100: out i/f: GigabitEthernet0/0/0/2
     LSP signalling info:
      Original: out i/f: GigabitEthernet0/0/0/1, label:  24002, nhop: 10.1.2.2
      With FRR: out i/f: tunnel-te100, label:  24002
     LSP bw: 0 kbps, Backup level: any-class unlimited, type: CT0 
STEP 3 P1 show mpls forwarding detail(抜粋)
24002  24002       TE: 0              Gi0/0/0/1    10.1.2.2        107         
     Updated: Sep 15 02:59:16.069
     Path Flags: 0x400 [  BKUP-IDX:1 (0x8aa5a0a0) ]
     Version: 17, Priority: 2
     Label Stack (Top -> Bottom): { 24002 }
     NHID: 0x5, Encap-ID: N/A, Path idx: 0, Backup path idx: 1, Weight: 0
     MAC/Encaps: 14/18, MTU: 1500
     Outgoing Interface: GigabitEthernet0/0/0/1 (ifhandle 0x00000010)
     Packets Switched: 2

       24002       TE: 0              tt100        point2point     0            (!)
     Updated: Sep 15 02:59:15.972
     Path Flags: 0x100 [  BKUP, NoFwd ]
     Version: 17, Priority: 2
     Label Stack (Top -> Bottom): { 24002 24002 }
     NHID: 0x0, Encap-ID: N/A, Path idx: 1, Backup path idx: 0, Weight: 0
     MAC/Encaps: 14/22, MTU: 1500
     Outgoing Interface: tunnel-te100 (ifhandle 0x0000001c)
     Packets Switched: 0
     (!): FRR pure backup

転送表に、バイパス用のラベルスタック{ 24002 24002 }が入りました。 上の24002はバイパスの次のP4のラベル、下の24002はMP(P2)が保護するLSPに付けたラベルです。P1がPE1へ返したResv(No.11)のRROに、このラベルが記録されています。

STEP 3 No.11 RESV(P1 → PE1、tshark -V 抜粋)
Internet Protocol Version 4, Src: 10.1.11.1, Dst: 10.1.11.11
            Message Type: RESV Message.  (2)
        RECORD ROUTE: IPv4 1.1.1.1 (Node-id), Label 24002, IPv4 10.1.11.1, ... (Node-id) (Node-id) (Node-id)
            IPv4 Subobject - 1.1.1.1 (Node-id), Local Protection Available
                Flags: 0x21
                    .... ...1 = Local Protection: Available
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
            IPv4 Subobject - 10.1.11.1, Local Protection Available
                Flags: 0x01
                    .... ...1 = Local Protection: Available
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
            IPv4 Subobject - 2.2.2.2 (Node-id)
                Flags: 0x20
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
            IPv4 Subobject - 10.1.2.2
                Flags: 0x00
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
上のtshark出力のパケット(No.11 RESV)のpcapをダウンロード

P1のサブオブジェクトはLocal Protection Available、P2(2.2.2.2)の後ろのラベルが24002です。

FRRありのリンク断(STEP 4・5)

STEP 4 CE1 ping 192.168.2.1(リンク断をまたいで300発)
RP/0/RP0/CPU0:CE1#ping 192.168.2.1 source 192.168.1.1 count 300 interval 100 timeout 1

Tue Sep 15 03:06:28.413 UTC
Type escape sequence to abort.
Sending 300, 100-byte ICMP Echos to 192.168.2.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (299/300), round-trip min/avg/max = 15/32/187 ms

落ちたのは1発です。 落ちたのは戻りのreplyで、行きのrequestは300発すべてP1が転送していました。

STEP 4 P1 show mpls traffic-eng fast-reroute database(落とした直後)
RP/0/RP0/CPU0:P1#show mpls traffic-eng fast-reroute database

Tue Sep 15 03:06:45.151 UTC
LSP midpoint FRR information:
LSP identifier                   In-label Out Intf : Label   FRR Intf : Label   Status 
-------------------------------- -------- ------------------ ------------------ -------
11.11.11.11 0 [5]                24002    tt100:24002                           Active 
STEP 4 P1 show mpls traffic-eng tunnels protection(落とした直後、抜粋)
PE1_t0 Tunnel Id: 0 
  LSP Midpoint, signaled, connection up
  Src: 11.11.11.11, Dest: 22.22.22.22, Instance: 5
  Fast Reroute Protection: Requested
    Inbound: FRR Inactive
     LSP signalling info:
      Original: in i/f: GigabitEthernet0/0/0/0, label:  24002, phop: 10.1.11.11
    Outbound: FRR Active
     Backup tunnel-te100 to LSP nhop
      tunnel-te100: out i/f: GigabitEthernet0/0/0/2
     LSP signalling info:
      Original: out i/f: GigabitEthernet0/0/0/1, label:  24002, nhop: 10.1.2.2
      With FRR: out i/f: tunnel-te100, label:  24002
     LSP bw: 0 kbps, Backup level: any-class unlimited, type: CT0 

バイパス上のCE1のパケット(P1 - P4間のNo.16)です。

STEP 4 No.16 ICMP Echo request(P1 → P4、tshark -V 抜粋)
MultiProtocol Label Switching Header, Label: 24002, Exp: 0, S: 0, TTL: 253
MultiProtocol Label Switching Header, Label: 24002, Exp: 0, S: 0, TTL: 253
MultiProtocol Label Switching Header, Label: 24015, Exp: 0, S: 1, TTL: 254
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.2.1
    Type: Echo (ping) request (8)
上のtshark出力のパケット(No.16 Echo request)のpcapをダウンロード

ラベルは3段です。 同じころ、P1はPE1へPathErrを送りました(PE1 - P1間のNo.236、03:06:40.265)。

STEP 4 No.236 PATH ERROR(P1 → PE1、tshark -V 抜粋)
Internet Protocol Version 4, Src: 10.1.11.1, Dst: 10.1.11.11
            Message Type: PATH ERROR Message.  (3)
        ERROR: IPv4, Error code: RSVP Notify Error, Value: 3, Error Node: 10.1.11.1
            Error node: 10.1.11.1
            Error code: RSVP Notify Error (25)
            Error value: Tunnel locally repaired (3)
上のtshark出力のパケット(No.236 PATH ERROR)のpcapをダウンロード
STEP 4 PE1 show mpls traffic-eng tunnels(抜粋)
    path option 20,  type dynamic  (Basis for Setup, path weight 60)
      Accumulative metrics: TE 60 IGP 60 Delay 1800000 
      Accumulative biased metrics: TE 60 IGP 60 Delay 1800000 
    path option 10,  type explicit UPPER
    Last PCALC Error [Reopt]: Tue Sep 15 03:06:40 2026
      Info: Explicit path has unknown address 10.1.2.2 in OSPF 1 area 0
    Last Signalled Error : Tue Sep 15 03:06:40 2026
      Info: [5] PathErr(25,3)-(Error: notify (25), Suberror: local repair (3)) at 10.1.11.1
STEP 4 PE1 show mpls traffic-eng tunnels(抜粋)
  History:
    Tunnel has been up for: 00:29:29 (since Tue Sep 15 02:42:03 UTC 2026)
    Current LSP:
      Uptime: 00:04:50 (since Tue Sep 15 03:06:42 UTC 2026)
    Reopt. LSP:
      Last Failure:
        LSP not signalled, has no S2Ls
        Date/Time: Tue Sep 15 03:06:40 UTC 2026 [00:04:52 ago]
    Prior LSP:
      ID: 5 Path Option: 10
      Removal Trigger: reoptimization completed

Tunnel has been up forは02:42:03から続いたまま、新しいLSPはreoptimization completedで入れ替わりました。STEP 5でリンクを戻し、再最適化で上の段に戻しています(FRRのDBはReadyに戻りました)。

ノード保護(STEP 6・7)

STEP 6 PE1にcommitした設定
RP/0/RP0/CPU0:PE1#show configuration commit changes last 1
Tue Sep 15 03:24:33.311 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
interface tunnel-te0
 fast-reroute protect node
!
end
STEP 6 P1にcommitした設定
RP/0/RP0/CPU0:P1#show configuration commit changes last 1
Tue Sep 15 03:24:46.377 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
explicit-path name NNHOP-P3
 index 10 next-address strict ipv4 unicast 10.1.4.4
 index 20 next-address strict ipv4 unicast 10.4.5.5
 index 30 next-address strict ipv4 unicast 10.5.6.6
 index 40 next-address strict ipv4 unicast 10.3.6.3
!
interface tunnel-te200
 ipv4 unnumbered Loopback0
 destination 3.3.3.3
 path-option 10 explicit name NNHOP-P3
!
mpls traffic-eng
 interface GigabitEthernet0/0/0/1
  backup-path tunnel-te 200
 !
!
end
STEP 6 No.7 PATH(PE1 → P1、tshark -V 抜粋)
Internet Protocol Version 4, Src: 10.1.11.11, Dst: 10.1.11.1
            Message Type: PATH Message.  (1)
        SESSION ATTRIBUTE: SetupPrio 7, HoldPrio 7, Local Protection, Label Recording, SE Style, Node Protection,  [PE1_t0]
            Flags: 0x17
                .... ...1 = Local protection: Desired
                .... ..1. = Label recording: Desired
                .... .1.. = SE style: Desired
                .... 0... = Bandwidth protection: Not Desired
                ...1 .... = Node protection: Desired
上のtshark出力のパケット(No.7 PATH)のpcapをダウンロード
STEP 6 P1 show mpls traffic-eng tunnels protection(抜粋)
PE1_t0 Tunnel Id: 0 
  LSP Midpoint, signaled, connection up
  Src: 11.11.11.11, Dest: 22.22.22.22, Instance: 7
  Fast Reroute Protection: Requested
    Inbound: FRR Inactive
     LSP signalling info:
      Original: in i/f: GigabitEthernet0/0/0/0, label:  24002, phop: 10.1.11.11
    Outbound: FRR Ready
     Backup tunnel-te200 to LSP nnhop
      tunnel-te200: out i/f: GigabitEthernet0/0/0/2
     LSP signalling info:
      Original: out i/f: GigabitEthernet0/0/0/1, label:  24002, nhop: 10.1.2.2
      With FRR: out i/f: tunnel-te200, label:  24002
     LSP bw: 0 kbps, Backup level: any-class unlimited, type: CT0 

Gi0/0/0/1にはNHOP(tunnel-te100)とNNHOP(tunnel-te200)の両方がありますが、PE1_t0にはNNHOPが使われました。

STEP 6 No.18 RESV(P1 → PE1、tshark -V 抜粋)
Internet Protocol Version 4, Src: 10.1.11.1, Dst: 10.1.11.11
            Message Type: RESV Message.  (2)
        RECORD ROUTE: IPv4 1.1.1.1 (Node-id), Label 24002, IPv4 10.1.11.1, ... (Node-id) (Node-id) (Node-id)
            IPv4 Subobject - 1.1.1.1 (Node-id), Local Protection Available, Backup is Next-Next-Hop
                Flags: 0x29
                    .... ...1 = Local Protection: Available
                    .... 1... = Node Protection: Available
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
            IPv4 Subobject - 10.1.11.1, Local Protection Available, Backup is Next-Next-Hop
                Flags: 0x09
                    .... ...1 = Local Protection: Available
                    .... 1... = Node Protection: Available
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
            IPv4 Subobject - 2.2.2.2 (Node-id)
                Flags: 0x20
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
            IPv4 Subobject - 10.1.2.2
                Flags: 0x00
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
            IPv4 Subobject - 3.3.3.3 (Node-id)
                Flags: 0x20
            Label Subobject - 24002, The label will be understood if received on any interface
                Flags: 0x01
                Label: 24002
上のtshark出力のパケット(No.18 RESV)のpcapをダウンロード

P1のサブオブジェクトにNode Protection Availableが立ち、P3(3.3.3.3)の後ろにラベル24002が記録されています。P1の転送表のバックアップは{ 24004 24002 }で、24002はP3のラベルです。

STEP 6 P1 show mpls forwarding detail(抜粋)
24002  24002       TE: 0              Gi0/0/0/1    10.1.2.2        28808       
     Updated: Sep 15 03:24:45.967
     Path Flags: 0x400 [  BKUP-IDX:1 (0x8aa22190) ]
     Version: 29, Priority: 2
     Label Stack (Top -> Bottom): { 24002 }
     NHID: 0x6, Encap-ID: N/A, Path idx: 0, Backup path idx: 1, Weight: 0
     MAC/Encaps: 14/18, MTU: 1500
     Outgoing Interface: GigabitEthernet0/0/0/1 (ifhandle 0x00000010)
     Packets Switched: 276

       24002       TE: 0              tt200        point2point     0            (!)
     Updated: Sep 15 03:24:45.967
     Path Flags: 0x100 [  BKUP, NoFwd ]
     Version: 29, Priority: 2
     Label Stack (Top -> Bottom): { 24004 24002 }
     NHID: 0x0, Encap-ID: N/A, Path idx: 1, Backup path idx: 0, Weight: 0
     MAC/Encaps: 14/22, MTU: 1500
     Outgoing Interface: tunnel-te200 (ifhandle 0x00000024)
     Packets Switched: 0
     (!): FRR pure backup
STEP 6 P3 show mpls forwarding
RP/0/RP0/CPU0:P3#show mpls forwarding
Tue Sep 15 03:26:45.836 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24002  Pop         TE: 0              Gi0/0/0/1    10.3.22.22      29243       
24003  24003       TE: 0              Gi0/0/0/0    10.2.3.2        214         
       24003       TE: 0              tt200        point2point     0            (!)
24004  24001       TE: 200            Gi0/0/0/2    10.3.6.6        0           

STEP 7で、P2の全インタフェースと、P1とP3のP2向けのインタフェースを同時に落としました。

STEP 7 CE1 ping 192.168.2.1(ノード障害をまたいで300発)
RP/0/RP0/CPU0:CE1#ping 192.168.2.1 source 192.168.1.1 count 300 interval 100 timeout 1

Tue Sep 15 03:31:52.062 UTC
Type escape sequence to abort.
Sending 300, 100-byte ICMP Echos to 192.168.2.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (299/300), round-trip min/avg/max = 17/32/188 ms

落ちたのは1発です。 落ちたのはP2を落とした瞬間にP2を通っていた戻りのreplyで、行きのrequestは300発すべてP1が転送していました。

STEP 7 P1 show mpls traffic-eng fast-reroute database(落とした直後)
RP/0/RP0/CPU0:P1#show mpls traffic-eng fast-reroute database

Tue Sep 15 03:32:09.142 UTC
LSP midpoint FRR information:
LSP identifier                   In-label Out Intf : Label   FRR Intf : Label   Status 
-------------------------------- -------- ------------------ ------------------ -------
11.11.11.11 0 [7]                24002    tt200:24002                           Active 
STEP 7 P3 show mpls traffic-eng fast-reroute database(落とした直後)
RP/0/RP0/CPU0:P3#show mpls traffic-eng fast-reroute database

Tue Sep 15 03:32:13.000 UTC
LSP midpoint FRR information:
LSP identifier                   In-label Out Intf : Label   FRR Intf : Label   Status 
-------------------------------- -------- ------------------ ------------------ -------
22.22.22.22 0 [8]                24003    tt200:24003                           Active 

バイパスの入口(P1 - P4間のNo.14)と出口の手前(P6 - P3間のNo.13)のパケットです。

STEP 7 No.14 ICMP Echo request(P1 → P4、tshark -V 抜粋)
MultiProtocol Label Switching Header, Label: 24004, Exp: 0, S: 0, TTL: 253
MultiProtocol Label Switching Header, Label: 24002, Exp: 0, S: 0, TTL: 253
MultiProtocol Label Switching Header, Label: 24015, Exp: 0, S: 1, TTL: 254
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.2.1
    Type: Echo (ping) request (8)
上のtshark出力のパケット(No.14 Echo request)のpcapをダウンロード
STEP 7 No.13 ICMP Echo request(P6 → P3、tshark -V 抜粋)
MultiProtocol Label Switching Header, Label: 24002, Exp: 0, S: 0, TTL: 250
MultiProtocol Label Switching Header, Label: 24015, Exp: 0, S: 1, TTL: 254
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.2.1
    Type: Echo (ping) request (8)
上のtshark出力のパケット(No.13 Echo request)のpcapをダウンロード

P1 - P4では3段(24004 / 24002 / 24015)、P6がバイパスのラベルを外し、P3にはP3のラベル24002とVPNの2段で届きます。

STEP 7 PE1 show mpls traffic-eng tunnels(抜粋)
    path option 20,  type dynamic  (Basis for Setup, path weight 60)
      Accumulative metrics: TE 60 IGP 60 Delay 1800000 
      Accumulative biased metrics: TE 60 IGP 60 Delay 1800000 
    path option 10,  type explicit UPPER
    Last PCALC Error [Reopt]: Tue Sep 15 03:32:03 2026
      Info: Explicit path has unknown address 10.2.3.3 in OSPF 1 area 0
    Last Signalled Error : Tue Sep 15 03:32:03 2026
      Info: [7] PathErr(25,3)-(Error: notify (25), Suberror: local repair (3)) at 10.1.11.1

STEPごとの結果

STEP障害CE1 → CE2迂回中のラベル(P1 - P4)トンネル
1リンク(FRRなし)284/300(約16秒)2段(張り直したLSP)落ちて張り直し
4リンク(NHOP)299/3003段 24002 / 24002 / 24015落ちない(PathErr 25,3)
7ノード(NNHOP)299/3003段 24004 / 24002 / 24015落ちない(PathErr 25,3)

XRdはソフトウェアで転送するので、断の長さは参考値です。

設計上の注意

  • 保護はhead-endの要求(fast-reroute)とPLRのバイパスの両方がそろって初めて効きます。片方だけでは0 protectedのままです
  • ノード保護を求めるなら、PLRにNNHOPのバイパスを用意します。NNHOPはMPの手前でノードを1つ飛ばすので、tail-endの1つ手前のルータでは作れません
  • FRRが守るのは切り替えの瞬間だけです。障害の検知(リンクダウンやBFD)が遅ければ、その分だけ断が延びます

検証Configおよびshow結果

各STEPで10台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。

ファイル内容
..._show.txtshow version / show route / show mpls traffic-eng tunnels系 / show mpls traffic-eng fast-reroute database / show mpls traffic-eng tunnels backupprotection / show mpls forwarding detail / show rsvp系 / VPNのshowほか
..._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(PE1・PE2)
..._trace.txtshow mpls traffic-eng trace head-end / link / bselectshow rsvp trace signalling(コア8台)
..._commit.cfgそのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ
..._failping.txtSTEP 1・4・7で障害をまたいで流したCE1のping
..._debug.txt障害の直後と再最適化の前後に取ったshow
.pcapそのSTEPのキャプチャー(PE1 - P1 / P1 - P2 / P1 - P4 / P2 - P5 / P3 - P6)

STEP 0:両方向のトンネル(上の段をstrictで10、動的経路を20)とautoroute

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtracecfg
P1showlogrun--trace-
P2showlogrun--trace-
P3showlogrun--trace-
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtracecfg
CE2showlogrunping---

STEP 1:FRRなしでP1 - P2を両端shutdown

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtrace-
P1showlogrun--tracecfg
P2showlogrun--tracecfg
P3showlogrun--trace-
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtrace-
CE2showlogrunping---

追加の記録: CE1 failping

STEP 2:復旧し、両方向のトンネルにfast-reroute、再最適化で上の段へ

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtracecfg
P1showlogrun--tracecfg
P2showlogrun--tracecfg
P3showlogrun--trace-
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtracecfg
CE2showlogrunping---

追加の記録: PE1 debug / PE2 debug

STEP 3:P1とP2にNHOPバイパスとbackup-path

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtrace-
P1showlogrun--tracecfg
P2showlogrun--tracecfg
P3showlogrun--trace-
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtrace-
CE2showlogrunping---

STEP 4:P1 - P2を両端shutdown

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtrace-
P1showlogrun--tracecfg
P2showlogrun--tracecfg
P3showlogrun--trace-
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtrace-
CE2showlogrunping---

追加の記録: CE1 failping / PE1 debug / P1 debug / P2 debug

STEP 5:復旧し、再最適化で上の段へ

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtrace-
P1showlogrun--tracecfg
P2showlogrun--tracecfg
P3showlogrun--trace-
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtrace-
CE2showlogrunping---

追加の記録: PE1 debug / PE2 debug

STEP 6:fast-reroute protect nodeと、P1とP3にNNHOPバイパス

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtracecfg
P1showlogrun--tracecfg
P2showlogrun--trace-
P3showlogrun--tracecfg
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtracecfg
CE2showlogrunping---

STEP 7:P2の障害(P2の全IFとP1側・P3側をshutdown)

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtrace-
P1showlogrun--tracecfg
P2showlogrun--tracecfg
P3showlogrun--tracecfg
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtrace-
CE2showlogrunping---

追加の記録: CE1 failping / PE1 debug / P1 debug / P3 debug

STEP 8:撤去(最終状態)

ルータshow出力syslogrunning-configpingOAMtracecommit
CE1showlogrunping---
PE1showlogrunpingoamtracecfg
P1showlogrun--tracecfg
P2showlogrun--tracecfg
P3showlogrun--tracecfg
P4showlogrun--trace-
P5showlogrun--trace-
P6showlogrun--trace-
PE2showlogrunpingoamtracecfg
CE2showlogrunping---

パケットキャプチャーはSTEPごとに、次の5本のリンクで取得しています。

STEPPE1 - P1間P1 - P2間P1 - P4間P2 - P5間P3 - P6間
0pcappcappcappcappcap
1pcappcappcappcappcap
2pcappcappcappcappcap
3pcappcappcappcappcap
4pcappcappcappcappcap
5pcappcappcappcappcap
6pcappcappcappcappcap
7pcappcappcappcappcap
8pcappcappcappcappcap

参考

出典参照した箇所
RFC 4090 Fast Reroute Extensions to RSVP-TE for LSP Tunnels2節(PLR / MP / NHOP / NNHOP)、3.1節・3.2節(one-to-oneとfacility、ラベルの積み方)、4.3節・4.4節(SESSION_ATTRIBUTEとRROのフラグ)、5節(head-endの要求、label recording)、6節(PLRの振る舞いとRROのフラグ)、6.2節(tail-endの1つ手前ではノード保護できない)、6.5.1節(PathErr Notify / Tunnel locally repaired)

IOS XRのmpls ldpの要否、facility backupしか選べないこと、切り替えの時間は、検証機(XRd 26.1.1)での観測です。