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 backup | 1本のバイパストンネルで、同じリンクやノードを通る複数の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 desired | 0x01 | FRRを求める |
| Label recording desired | 0x02 | 各LSRが受け取るラベルをRROに記録させる |
| Node protection desired | 0x10 | ノード保護を求める |
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 available | 0x01 | バックアップ経路がある(MUST) |
| Local protection in use | 0x02 | 実際にバイパスへ流している |
| Node protection | 0x08 | バックアップが直後のノードの障害も守る(SHOULD) |
ノード保護が求められていれば、PLRはまずノード保護を試み、できなければリンク保護を試みます(6節)。同じインタフェースにNHOPとNNHOPのバイパスがあれば、ノード保護を求めるLSPにはNNHOPが使われます。
迂回中のラベル
次節の構成で、CE1からCE2へ向かうVPNのパケットに付くラベルは次のとおりです。
| リンク | 通常時 | NHOPで迂回中 | NNHOPで迂回中 |
|---|---|---|---|
| PE1 - P1 | 2段(トンネル+VPN) | 2段 | 2段 |
| P1 - P4 | - | 3段(バイパス+P2のラベル+VPN) | 3段(バイパス+P3のラベル+VPN) |
| バイパスの最後のリンク | - | 2段(P5 - P2) | 2段(P6 - P3) |
| P3 - PE2 | 1段(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 / PE2 | 11.11.11.11 / 22.22.22.22 | head-end / tail-end |
| P1 | 1.1.1.1 | 行きのPLR |
| P2 | 2.2.2.2 | 行きのNHOPのMP、戻りのPLR(リンク保護) |
| P3 | 3.3.3.3 | 行きのNNHOPのMP、戻りのPLR(ノード保護) |
| P4 / P5 / P6 | 4.4.4.4 / 5.5.5.5 / 6.6.6.6 | バイパスが通る |
| CE1 / CE2 | 101.101.101.101 / 102.102.102.102 | 192.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)とautoroute | CEの疎通。VPNのパケットのラベルは2段 |
| 1 | FRRなしでP1 - P2を両端shutdown | トンネルが落ちて張り直す。CEの断 |
| 2 | 復旧し、両方向のトンネルにfast-reroute、再最適化で上の段へ | SESSION_ATTRIBUTEのフラグ |
| 3 | P1とP2にNHOPバイパスとbackup-path | FRRのDBがReady、RROのフラグと記録されたラベル |
| 4 | P1 - P2を両端shutdown | バイパス上で3段、PathErr(25,3)、トンネルは落ちない。CEの断 |
| 5 | 復旧し、再最適化で上の段へ | FRRのDBがReadyに戻る |
| 6 | fast-reroute protect nodeと、P1とP3にNNHOPバイパス | NNHOPが選ばれる、RROのNode protection |
| 7 | P2の障害(P2の全IFとP1側・P3側をshutdown) | 3段目がMP(P3)のラベル。CEの断 |
| 8 | 撤去(最終状態) |
FRRなしのリンク断(STEP 0・1)
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
!
endRP/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です。
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)STEP 1で、FRRを設定しないままP1 - P2を両端で落としました。
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 ms16発が落ちました(約16秒)。
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 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 errorP2(10.1.2.2)がPathErr(24,5)を返し、トンネルはTunnel has been up forが02:42:03から数え直され、動的経路で張り直されました。張り直した後のパケットは、P1 - P4間でも2段です(No.30)。
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)保護の要求とバイパス(STEP 2・3)
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)です。
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 DesiredLocal protectionとLabel recordingがDesiredです。この時点ではバイパスが無いので、保護はまだ効きません。
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
!
!
endbackup-pathで、Gi0/0/0/1(P2向け)を守るバイパスとしてtunnel-te100を指定します。
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 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 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に、このラベルが記録されています。
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: 24002P1のサブオブジェクトはLocal Protection Available、P2(2.2.2.2)の後ろのラベルが24002です。
FRRありのリンク断(STEP 4・5)
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が転送していました。
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 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)です。
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)ラベルは3段です。 同じころ、P1はPE1へPathErrを送りました(PE1 - P1間のNo.236、03:06:40.265)。
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) 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 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 completedTunnel has been up forは02:42:03から続いたまま、新しいLSPはreoptimization completedで入れ替わりました。STEP 5でリンクを戻し、再最適化で上の段に戻しています(FRRのDBはReadyに戻りました)。
ノード保護(STEP 6・7)
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
!
endRP/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
!
!
endInternet 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: DesiredPE1_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が使われました。
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: 24002P1のサブオブジェクトにNode Protection Availableが立ち、P3(3.3.3.3)の後ろにラベル24002が記録されています。P1の転送表のバックアップは{ 24004 24002 }で、24002はP3のラベルです。
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 backupRP/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向けのインタフェースを同時に落としました。
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が転送していました。
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 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)のパケットです。
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)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)P1 - P4では3段(24004 / 24002 / 24015)、P6がバイパスのラベルを外し、P3にはP3のラベル24002とVPNの2段で届きます。
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.1STEPごとの結果
| STEP | 障害 | CE1 → CE2 | 迂回中のラベル(P1 - P4) | トンネル |
|---|---|---|---|---|
| 1 | リンク(FRRなし) | 284/300(約16秒) | 2段(張り直したLSP) | 落ちて張り直し |
| 4 | リンク(NHOP) | 299/300 | 3段 24002 / 24002 / 24015 | 落ちない(PathErr 25,3) |
| 7 | ノード(NNHOP) | 299/300 | 3段 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.txt | show version / show route / show mpls traffic-eng tunnels系 / show mpls traffic-eng fast-reroute database / show mpls traffic-eng tunnels backup・protection / 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.txt | ping / traceroute mpls traffic-eng tunnel-te 0(PE1・PE2) |
..._trace.txt | show mpls traffic-eng trace head-end / link / bselectとshow rsvp trace signalling(コア8台) |
..._commit.cfg | そのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ |
..._failping.txt | STEP 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出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | cfg |
| P1 | show | log | run | - | - | trace | - |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | - | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | cfg |
| CE2 | show | log | run | ping | - | - | - |
STEP 1:FRRなしでP1 - P2を両端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 | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | cfg |
| P3 | show | log | run | - | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
追加の記録: CE1 failping
STEP 2:復旧し、両方向のトンネルにfast-reroute、再最適化で上の段へ
| ルータ | 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 | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | cfg |
| P3 | show | log | run | - | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | cfg |
| CE2 | show | log | run | ping | - | - | - |
STEP 3:P1とP2にNHOPバイパスとbackup-path
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | - |
| P1 | show | log | run | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | cfg |
| P3 | show | log | run | - | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
STEP 4:P1 - P2を両端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 | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | cfg |
| P3 | show | log | run | - | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
追加の記録: CE1 failping / PE1 debug / P1 debug / P2 debug
STEP 5:復旧し、再最適化で上の段へ
| ルータ | show出力 | syslog | running-config | ping | OAM | trace | commit |
|---|---|---|---|---|---|---|---|
| CE1 | show | log | run | ping | - | - | - |
| PE1 | show | log | run | ping | oam | trace | - |
| P1 | show | log | run | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | cfg |
| P3 | show | log | run | - | - | trace | - |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
STEP 6:fast-reroute protect nodeと、P1とP3にNNHOPバイパス
| ルータ | 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 | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | - |
| P3 | show | log | run | - | - | trace | cfg |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | cfg |
| CE2 | show | log | run | ping | - | - | - |
STEP 7:P2の障害(P2の全IFとP1側・P3側を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 | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | cfg |
| P3 | show | log | run | - | - | trace | cfg |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | - |
| CE2 | show | log | run | ping | - | - | - |
追加の記録: CE1 failping / PE1 debug / P1 debug / P3 debug
STEP 8:撤去(最終状態)
| ルータ | 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 | - | - | trace | cfg |
| P2 | show | log | run | - | - | trace | cfg |
| P3 | show | log | run | - | - | trace | cfg |
| P4 | show | log | run | - | - | trace | - |
| P5 | show | log | run | - | - | trace | - |
| P6 | show | log | run | - | - | trace | - |
| PE2 | show | log | run | ping | oam | trace | cfg |
| CE2 | show | log | run | ping | - | - | - |
パケットキャプチャーはSTEPごとに、次の5本のリンクで取得しています。
| STEP | PE1 - P1間 | P1 - P2間 | P1 - P4間 | P2 - P5間 | P3 - P6間 |
|---|---|---|---|---|---|
| 0 | pcap | pcap | pcap | pcap | pcap |
| 1 | pcap | pcap | pcap | pcap | pcap |
| 2 | pcap | pcap | pcap | pcap | pcap |
| 3 | pcap | pcap | pcap | pcap | pcap |
| 4 | pcap | pcap | pcap | pcap | pcap |
| 5 | pcap | pcap | pcap | pcap | pcap |
| 6 | pcap | pcap | pcap | pcap | pcap |
| 7 | pcap | pcap | pcap | pcap | pcap |
| 8 | pcap | pcap | pcap | pcap | pcap |
参考
| 出典 | 参照した箇所 |
|---|---|
| RFC 4090 Fast Reroute Extensions to RSVP-TE for LSP Tunnels | 2節(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)での観測です。
- 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)