Basics
The FISH topology is a widely used tool for understanding the power of MPLS Traffic-Engineering. The principal is that traffic originating in A or B will normally take the shortest path via the route through C-D-G, assuming all circuits have the same BW/Cost. The exercise is to utilize the available, and typically idle, BW capabilities of the C-E-F-G path.
Specifics
The process to activate MPLS-TE is seemingly long, but not overly complex.
Prep the environment:
The first step is to make sure that MPLS is running on your network with full reachability provided by either OSPF or IS-IS. Most basic config to accomplish this is config on each router:
Router(config)#router ospf 100
Router(config-router)#router-id w.x.y.z
Router(config-router)#network 0.0.0.0 255.255.255.255 area 0
Router(config-router)#exit
Router(config)#mpls ip
Router(config)#mpls ldp router-id Loopback0
Router(config)#mpls label protocol ldp
Router(config)#inteface serial 1/0
Router(config-if)#mpls ip
Next, the routers along the path require that MPLS Traffic-Engineering be enabled globally and then on the interfaces. Each interface that has the potential for have a TE Tunnel traverse it will need to have the option activated.
Router(config)#mpls traffic-eng tunnels
Router(config)#interface serial 1/0
Router(config-if)#mpls traffic-eng tunnels
Prep the IGP:
Traffic Engineering information is carried by the IGP routing protocol, in this case OSPF. In this simple example the entire network is in area 0 within the ospf process.
Router(config)#router ospf 100
Router(config-router)#mpls traffic-eng router-id loopback 0
Router(config-router)#mpls traffic-eng area 0
OSPF uses the Opaque LSA's to carry TE information. The IS-IS protocol requires the additional step of using WIDE METRICS in order to carry that information.
Define the tunnel's path:
There are multiple ways in which you can The tunnel starts off similar to a GRE tunnel in terms of configuration, but the similarities beyond the name are few.
RouterC(config)#ip explicit-path name CEFG enable
RouterC(cfg-ip-expl-path)#next-address 12.12.23.3
RouterC(cfg-ip-expl-path)#next-address 12.12.34.4
RouterC(cfg-ip-expl-path)#next-address 12.12.46.6
Build the tunnel:
The tunnel starts off similar to a GRE tunnel in terms of configuration, but the similarities beyond the name are few.
Router(config)#interface Tunnel1
Router(config-if)#bandwidth 100000
Router(config-if)#ip unnumbered Loopback0
Router(config-if)#mpls ip
Router(config-if)#tunnel destination 12.12.6.6
Router(config-if)#tunnel mode mpls traffic-eng
Router(config-if)#tunnel mpls traffic-eng path-option 10 explicit name CEFG
Get traffic into the tunnel:
There are three ways of getting traffic into the tunnel:
- Policy Based Routing
- Autoroute Announce
- Static Routes
For simplicity we will allow traffic from A to route normally and use policy-based routing to forward traffic from B to follow the Traffic-Engineered path over the long path CEFG. Here we will match traffic coming from the loopback of B (12.12.7.7) headed to the loopback of G (12.12.6.6).
RouterC(config)#ip access-list extended TRAFFIC-MATCH
RouterC(config-ext-nacl)# permit ip host 12.12.7.7 host 12.12.6.6
!
RouterC(config)#route-map TE-BCEFG permit 10
RouterC(config-route-map)#match ip address TRAFFIC-MATCH
RouterC(config-route-map)#set interface Tunnel1
!
RouterC(config)#interface Serial1/3
RouterC(config-if)#description RouterC link to RouterB
RouterC(config-if)#ip policy route-map TE-BCEFG
Verification:
To verify the tunnel is operational simple show commands provide all the information you need.
Originating router:
RouterC#sho mpls traffic-eng tunnels
Name: RouterC_t1 (Tunnel1) Destination: 12.12.6.6
Status:
Admin: up Oper: up Path: valid Signalling: connected
path option 10, type explicit CEFG (Basis for Setup, path weight 192)
Config Parameters:
Bandwidth: 0 kbps (Global) Priority: 7 7 Affinity: 0x0/0xFFFF
Metric Type: TE (default)
AutoRoute: disabled LockDown: disabled Loadshare: 0 bw-based
auto-bw: disabled
InLabel : -
OutLabel : Serial1/1, 16
RSVP Signalling Info:
Src 12.12.2.2, Dst 12.12.6.6, Tun_Id 1, Tun_Instance 10
RSVP Path Info:
My Address: 12.12.23.2
Explicit Route: 12.12.23.3 12.12.34.4 12.12.46.6 12.12.6.6
Record Route: NONE
Tspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
RSVP Resv Info:
Record Route: NONE
Fspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
History:
Tunnel:
Time since created: 3 hours, 5 minutes
Time since path change: 3 hours, 5 minutes
Current LSP:
Uptime: 3 hours, 5 minutes
RouterC#
RouterC(config-ext-nacl)# permit ip host 12.12.7.7 host 12.12.6.6
!
RouterC(config)#route-map TE-BCEFG permit 10
RouterC(config-route-map)#match ip address TRAFFIC-MATCH
RouterC(config-route-map)#set interface Tunnel1
!
RouterC(config)#interface Serial1/3
RouterC(config-if)#description RouterC link to RouterB
RouterC(config-if)#ip policy route-map TE-BCEFG
Verification:
To verify the tunnel is operational simple show commands provide all the information you need.
Originating router:
RouterC#sho mpls traffic-eng tunnels
Name: RouterC_t1 (Tunnel1) Destination: 12.12.6.6
Status:
Admin: up Oper: up Path: valid Signalling: connected
path option 10, type explicit CEFG (Basis for Setup, path weight 192)
Config Parameters:
Bandwidth: 0 kbps (Global) Priority: 7 7 Affinity: 0x0/0xFFFF
Metric Type: TE (default)
AutoRoute: disabled LockDown: disabled Loadshare: 0 bw-based
auto-bw: disabled
InLabel : -
OutLabel : Serial1/1, 16
RSVP Signalling Info:
Src 12.12.2.2, Dst 12.12.6.6, Tun_Id 1, Tun_Instance 10
RSVP Path Info:
My Address: 12.12.23.2
Explicit Route: 12.12.23.3 12.12.34.4 12.12.46.6 12.12.6.6
Record Route: NONE
Tspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
RSVP Resv Info:
Record Route: NONE
Fspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
History:
Tunnel:
Time since created: 3 hours, 5 minutes
Time since path change: 3 hours, 5 minutes
Current LSP:
Uptime: 3 hours, 5 minutes
RouterC#
Intermediate router:
RouterC#show mpls traffic-eng tunnel
LSP Tunnel RouterC_t1 is signalled, connection is up
InLabel : Serial1/0, 16
OutLabel : Serial1/1, 16
RSVP Signalling Info:
Src 12.12.2.2, Dst 12.12.6.6, Tun_Id 1, Tun_Instance 10
RSVP Path Info:
My Address: 12.12.34.3
Explicit Route: 12.12.34.4 12.12.46.6 12.12.6.6
Record Route: NONE
Tspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
RSVP Resv Info:
Record Route: NONE
Fspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
Traceroute from Router A:
RouterA#R1#traceroute ip
Target IP address: 12.12.6.6
Source address: 12.12.1.1
- Truncated -
Type escape sequence to abort.
Tracing the route to 12.12.6.6
1 12.12.12.2 [MPLS: Label 20 Exp 0] 80 msec 20 msec 32 msec
2 12.12.25.5 [MPLS: Label 19 Exp 0] 328 msec 8 msec 16 msec
3 12.12.56.6 28 msec * 60 msec
RouterA#
The path Router A's loopback traffic takes to Router G is via the shortest path. We have not placed the traffic into the TE tunnel thus standard best path routing applies
Traceroute from Router B:
RouterB#traceroute ip
Target IP address: 12.12.6.6
Source address: 12.12.7.7
- Truncated -
Type escape sequence to abort.
Tracing the route to 12.12.6.6
1 12.12.27.2 28 msec 16 msec 8 msec
2 12.12.23.3 [MPLS: Label 16 Exp 0] 176 msec 136 msec 56 msec
3 12.12.34.4 [MPLS: Label 16 Exp 0] 168 msec 28 msec 52 msec
4 12.12.46.6 60 msec * 32 msec
RouterB#
The path that Router B's loopback takes is via the TE tunnel. The traceroute shows the additional hop through the network.
Advanced Topics
I am going to save the more advanced topics for a later post. The more advanced topics I would like to cover include:
- Priorities - Setup and Hold
- Dynamic Tunnel Pathing
- Affinity bits
- Autoroute Announce
- Taking suggestions - What would you like to know about