Configure MPLS IP on Cisco IOS Router

MPLS or Multi-Protocol Label Switching is a mechanism of fast-forwarding a packet by attaching a special bit sequence to the packet called “the label“. It’s a bit complex to understand how MPLS works, but in summary it gives a router the ability to quickly forward packets without looking at the routing table. Therefore, MPLS is improving the network performance and often used to maintain scalability in ISP backbone environment. In this scenario, we are going to show how we Configure MPLS IP on Cisco IOS Router and use it to establish connectivity between two separated client’s network.

How to Configure MPLS IP on Cisco IOS Router

In this scenario, we are working for a fictional provider named “The MBG Network“. MBG has a client that requires connectivity between its two sites that located in different city. The whole network is built using Cisco IOS router with the topology as shown below:

Configure MPLS IP on Cisco IOS Router

There are three simple steps to configure MPLS IP on Cisco IOS router and make the client sites connected to each other.

1. Configure the provider backbone using iBGP

Before we configure iBGP, all the routers in provider backbone should be connected to each other through IGP. It can be OSPF, EIGRP, RIP, or anything as long as reachability between routers is guaranteed. As in this topology, all the routers in the provider backbone has been interconnected using OSPF. Therefore the next thing to do is configure the internal BGP relationship between PE routers.

The reason why we should use iBGP and not the other routing protocol will be explained later. For now, these are the iBGP configuration on PE1 and PE2:

PE1(config)#router bgp 65000
PE1(config-router)#neighbor 10.1.1.12 remote-as 65000
PE1(config-router)#neighbor 10.1.1.12 update-source loopback0
PE1(config-router)#neighbor 10.1.1.12 next-hop-self
PE2(config)#router bgp 65000
PE2(config-router)#neighbor 10.1.1.11 remote-as 65000
PE2(config-router)#neighbor 10.1.1.11 update-source loopback0
PE2(config-router)#neighbor 10.1.1.11 next-hop-self

And to verify BGP peering has been established, we should be able to see the neighbour address by issuing the show ip bgp summary command. The output for this example shown below:

PE1#sh ip bgp summ | b Neighbor
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down   State/PfxRcd
10.0.0.102      4 65000      19      20        2    0    0 00:15:57         0
PE2#sh ip bgp summ | b Neighbor
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down   State/PfxRcd
10.0.0.101      4 65000      20      19        2    0    0 00:15:09         0

Notice that BGP peering has been established but the current counter for received prefix is 0. Next, we will advertise the client prefix on BGP configuration on each PE.

2. Advertise the attached client prefix on each PE

The attached client prefix on PE1 is 11.0.0.0/24 and on PE2 is 22.0.0.0/24. With iBGP we can exchange this information between PE without having the intermediate routers (P1 and P2) to know this information, and this is the reason why iBGP is chosen for this the backbone connectivity.

The command to advertise the client prefix on each PE is shown below:

PE1(config)#router bgp 65000
PE1(config-router)#network 11.0.0.0 mask 255.255.255.0
PE2(config)#router bgp 65000
PE2(config-router)#network 22.0.0.0 mask 255.255.255.0

Wait for a while until routing information exchange is completed between PE. We know it when PE1 already obtained installed route to 22.0.0.0/24 in its routing table, and vice versa on PE2 for route to 11.0.0.0/24.

PE1#sh ip route bgp
     22.0.0.0/24 is subnetted, 1 subnets
B       22.0.0.0 [200/0] via 10.0.0.102, 00:23:34
PE2#sh ip route bgp
     11.0.0.0/24 is subnetted, 1 subnets
B       11.0.0.100 [200/2] via 10.0.0.101, 00:23:51

However, even if the route information exchange between PE has been successful, CE1 will still not be able to reach CE2 and vice versa.

CE1#ping 22.0.0.100

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 22.0.0.100, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

This is because the intermediate routers, or P1 and P2, doesn’t have any information about the client prefix so they don’t know where to forward the packet. Now to solve this, if we want to rely so much on routing, we can redistribute BGP into OSPF on both PE routers and let both P routers know the way to both client prefix. But this means we will still burden P routers with additional routing entries and from scalability perspective this is not a feasible solution.

The more client connected to MBG network means more burden on P routers as it needs learn every time a new prefix is established and this is not an ideal condition for a service provider. The better solution is to implement MPLS IP on the backbone network.

3. Enable MPLS IP on the provider backbone

As mentioned, the last step for this scenario is to implement MPLS IP on the ISP backbone. With MPLS, it’s as if we have a tunnel between PE routers so that packet can be forwarded between client prefix without informing the prefix information to the P routers. And this is the beauty of MPLS.

The command to configure MPLS IP on Cisco IOS router is as simple as typing “mpls ip“, but it needs to be applied on the global configuration and interface configuration of all routers that are going to participate in the MPLS network. In this case, they are P1, P2, PE1, and PE2.

P1(config)#mpls ip
P1(config)#interface f0/0 <-- interface connected to PE1
P1(config-int)#mpls ip
P1(config-int)#interface f0/1 <-- interface connected to PE2
P1(config-int)#mpls ip
P2(config)#mpls ip
P2(config)#interface f0/0 <-- interface connected to PE1
P2(config-int)#mpls ip
P2(config-int)#interface f0/1 <-- interface connected to PE2
P2(config-int)#mpls ip
PE1(config)#mpls ip
PE1(config)#interface f0/0 <-- interface connected to P1
PE1(config-int)#mpls ip
PE1(config-int)#interface f0/1 <-- interface connected to P2
PE1(config-int)#mpls ip
PE2(config)#mpls ip
PE2(config)#interface f0/0 <-- interface connected to P1
PE2(config-int)#mpls ip
PE2(config-int)#interface f0/1 <-- interface connected to P2
PE2(config-int)#mpls ip

Now after implementing the above command, all backbone routers will start exchanging label and after that ping between CE will works. See the output below:

CE1#ping 22.0.0.100

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 22.0.0.100, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 84/86/96 ms

Also, notice the second hop in the trace route below is utilizing MPLS to forward the packet.

CE1#trace 22.0.0.100

Type escape sequence to abort.
Tracing the route to 22.0.0.100

  1 11.0.0.1 8 msec 20 msec 24 msec
  2 10.1.1.1 [MPLS: Label 16 Exp 0] 52 msec 60 msec 72 msec
  3 10.1.1.6 64 msec 48 msec 68 msec
  4 22.0.0.100 96 msec 72 msec 96 msec

With this we have successfully implementing MPLS to connect between client sites.

Working with MPLS IP on Cisco IOS Router

As mentioned in the beginning of this article, MPLS works by utilizing something called the label. This label is assigned to a prefix that the router knows in its routing table, and all labels are stored in the MPLS forwarding-table. The command to verify MPLS label forwarding-table on Cisco IOS router is show mpls forwarding-table. Below is the example output on PE2:

PE2#show mpls forwarding-table
Local  Outgoing    Prefix           Bytes tag  Outgoing   Next Hop
tag    tag or VC   or Tunnel Id     switched   interface
16     Pop tag     10.0.0.1/32      0          Fa0/0      10.1.1.5
17     Pop tag     10.1.1.0/30      0          Fa0/0      10.1.1.5
18     17          10.0.0.101/32    0          Fa0/1      10.1.1.13
       17          10.0.0.101/32    0          Fa0/0      10.1.1.5
19     Pop tag     10.0.0.2/32      0          Fa0/1      10.1.1.13
20     Pop tag     10.1.1.8/30      0          Fa0/1      10.1.1.13

On the table above we can see the local tag a.k.a the label, the outgoing interface and the related next-hop information for a prefix. Thankfully all of these information are automatically calculated when we configure MPLS IP on Cisco IOS router. However, it is still important to know how the MPLS router make forwarding decision based on these information by understanding how MPLS works in Cisco IOS router.

The following two tabs change content below.
Arranda Saputra

Arranda Saputra

ITIL Certified, CCNA, CCDA, VCP6-DCV, MCSA Administering Windows Server 2012
I am IT practitioner in real life with specialization in network and server infrastructure. I have years of experience in design, analysis, operation, and optimization of infrastructure solutions for enterprise-scaled network. You can send me a message on LinkedIn or email to arranda.saputra@outlook.com for further inquiry regarding stuffs that I wrote or opportunity to collaborate in a project.
scroll to top