Week: 1 -- Carrier and WAN Protocols
Points: 20
Time estimate: 90 min lab + 3 hr independent
Deliverable: lab-1-report.md + Containerlab topology file + captured screenshots
Objectives
- Deploy a multi-router SR-MPLS topology in Containerlab using FRRouting 9.x.
- Configure IS-IS with SR extensions; assign Prefix-SIDs to each router.
- Verify label-switched path connectivity using
traceroutewith MPLS label observation. - Demonstrate non-shortest-path forwarding using an SR Policy.
Topology
R1 (SR-Node-SID: 101)
/ \
/ \
R2 R3
\ /
\ /
R4 (SR-Node-SID: 104)
|
R5 (SR-Node-SID: 105) -- destination
5 FRR routers; IS-IS area 49.0001; SR Global Block 16000-23999.
Part A: Containerlab Topology Bootstrap (30 min)
Create lab1/topology.yaml:
name: sr-mpls-lab1
topology:
nodes:
r1:
kind: linux
image: frrouting/frr:v9.1.0
binds:
- lab1/configs/r1/frr.conf:/etc/frr/frr.conf
- lab1/configs/r1/daemons:/etc/frr/daemons
r2:
kind: linux
image: frrouting/frr:v9.1.0
binds:
- lab1/configs/r2/frr.conf:/etc/frr/frr.conf
- lab1/configs/r2/daemons:/etc/frr/daemons
r3:
kind: linux
image: frrouting/frr:v9.1.0
binds:
- lab1/configs/r3/frr.conf:/etc/frr/frr.conf
- lab1/configs/r3/daemons:/etc/frr/daemons
r4:
kind: linux
image: frrouting/frr:v9.1.0
binds:
- lab1/configs/r4/frr.conf:/etc/frr/frr.conf
- lab1/configs/r4/daemons:/etc/frr/daemons
r5:
kind: linux
image: frrouting/frr:v9.1.0
binds:
- lab1/configs/r5/frr.conf:/etc/frr/frr.conf
- lab1/configs/r5/daemons:/etc/frr/daemons
links:
- endpoints: ["r1:eth1", "r2:eth1"]
- endpoints: ["r1:eth2", "r3:eth1"]
- endpoints: ["r2:eth2", "r4:eth1"]
- endpoints: ["r3:eth2", "r4:eth2"]
- endpoints: ["r4:eth3", "r5:eth1"]
Enable the MPLS kernel modules before deploying:
sudo modprobe mpls_router mpls_gso mpls_iptunnel
sudo containerlab deploy -t lab1/topology.yaml
Create the daemons file for each router:
zebra=yes
isisd=yes
Part B: IS-IS with SR Extensions (30 min)
Configure IS-IS and Segment Routing on each router. Example for R1:
! /etc/frr/frr.conf for R1
!
hostname R1
!
interface lo
ip address 10.255.0.1/32
ip router isis 1
isis passive
!
interface eth1
ip address 10.0.12.1/30
ip router isis 1
isis network point-to-point
!
interface eth2
ip address 10.0.13.1/30
ip router isis 1
isis network point-to-point
!
router isis 1
net 49.0001.0000.0000.0001.00
is-type level-2-only
!
segment-routing on
segment-routing global-block 16000 23999
segment-routing node-msd 8
!
segment-routing prefix 10.255.0.1/32 index 101
!
Assign Prefix-SID indexes:
- R1: index 101 → label 16101
- R2: index 102 → label 16102
- R3: index 103 → label 16103
- R4: index 104 → label 16104
- R5: index 105 → label 16105
Verify adjacencies from R1:
docker exec clab-sr-mpls-lab1-r1 vtysh -c "show isis neighbor"
docker exec clab-sr-mpls-lab1-r1 vtysh -c "show isis segment-routing prefix-sids"
Record: are all expected neighbors adjacent? Are Prefix-SID entries present?
Part C: SR Policy for Non-Shortest-Path Forwarding (30 min)
The IGP shortest path from R1 to R5 is R1 → R2 → R4 → R5 (or R1 → R3 → R4 → R5; both are equal cost). Create an SR Policy on R1 that forces traffic to R5 via the explicit path R1 → R3 → R4 → R5:
! On R1: explicit-path SR Policy
segment-routing
traffic-eng
segment-list explicit-via-r3
index 1 mpls label 16103 ! Adj-SID to R3 (use actual Adj-SID from 'show isis segment-routing adjacencies')
index 2 mpls label 16104 ! Node-SID for R4
index 3 mpls label 16105 ! Node-SID for R5
!
policy color 100 endpoint 10.255.0.5
name "via-R3"
candidate-paths
preference 100
explicit segment-list explicit-via-r3
Verify using traceroute with MPLS label observation:
# From R1 to R5 loopback -- should show 3 hops via R3, R4
docker exec clab-sr-mpls-lab1-r1 traceroute -M mpls 10.255.0.5
# Without the SR Policy (IGP default -- via R2 or R3, equal-cost)
docker exec clab-sr-mpls-lab1-r1 traceroute 10.255.0.5
Record: do the two traceroutes take different paths? What labels are observed at each hop?
Lab Report
Create lab-1-report.md with:
show isis neighboroutput from R1 (verify all neighbors adjacent)show isis segment-routing prefix-sidsoutput (verify all 5 Prefix-SIDs present)- Traceroute output: IGP default path vs. SR Policy path -- confirm they differ
- Label stack observed at each hop of the SR Policy path
- One-paragraph analysis: explain why SR-MPLS can enforce a non-shortest path without RSVP-TE state at transit routers
Grading
| Component | Points |
|---|---|
| IS-IS adjacencies: all 5 routers adjacent | 4 |
| Prefix-SIDs: all 5 present with correct labels | 4 |
| SR Policy: traceroute confirms non-shortest path via R3 | 8 |
| Analysis paragraph: RSVP-TE state comparison correct | 4 |
| Total | 20 |