ISP LAB (MPLS Cloud) – Part3

As mentioned in ISP LAB Topology – Part1 before getting into the configuration part we will give a brief about the technologies/protocols used in our task. In our first task ISP LAB (Implementing IGP) – Part 2 we configured the ISP routers to advertise their loopback addresses using ISIS (Layer3 routing protocol used as IGP) so that all ISP routers have an identical LSDB (Link State Data Base) and can reach each others loopback addresses. lets validate our reachability inside the ISP network on the core router P1 for example:

P1 ISIS neghbors
P1#show isis neighbors
System Id      Type Interface   IP Address      State Holdtime Circuit Id
PE01           L2   Fa1/0       10.1.10.1       UP    24       P1.02
P2             L2   Fa2/0       10.10.20.20     UP    21       P1.04
P3             L2   Fa1/1       10.10.30.30     UP    23       P1.03

P1 is maintaining level-2 neighborships with PE01, P2 and P3

P1 routing table
P1#show ip route | i L2
       i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
i L2     1.1.1.1 [115/20] via 10.1.10.1, 03:08:56, FastEthernet1/0
i L2     2.2.2.2 [115/30] via 10.10.30.30, 03:08:56, FastEthernet1/1
i L2     3.3.3.3 [115/30] via 10.10.30.30, 03:08:46, FastEthernet1/1
i L2     10.1.20.0/24 [115/20] via 10.10.20.20, 03:08:56, FastEthernet2/0
i L2     10.2.30.0/24 [115/20] via 10.10.30.30, 03:08:56, FastEthernet1/1
i L2     10.3.30.0/24 [115/20] via 10.10.30.30, 03:08:56, FastEthernet1/1
i L2     10.20.30.0/24 [115/20] via 10.10.30.30, 03:08:56, FastEthernet1/1
i L2     20.20.20.20 [115/20] via 10.10.20.20, 03:08:56, FastEthernet2/0
i L2     30.30.30.30 [115/20] via 10.10.30.30, 03:08:56, FastEthernet1/1

The routing table of P1 (showing only ISIS level-2 routes), so lets pick 2 routes and try to reach

Sending ICMP (Ping) packets to PE02 and P2
P1#ping 2.2.2.2Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/54/112 ms
P1#ping 20.20.20.20Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.20.20.20, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/26/56 ms

Now we are sure that P1 – and all routers respectively – has routes to every router in the network and can reach it.
The previous validation is for being sure that everything is OK before building the MPLS network which rely on the IGP (ISIS in our case) to build LSPs (Label Switched Paths).

MPLS flows are connection oriented & only defines the forwarding mechanism that rely on other two separate protocols (IGP & LDP) to establish the LSPs. For more details it is recommended to read MPLS Summary & MPLS Study Notes [Part1].

We finished the first step by implementing the IGP and we need to implement the signalling protocol LDP (Label Distribution Protocol) to close the circuit.

LDP function is that for each router to assigns local labels for it’s own and connected routes/prefixes such as Loopback addresses, then distribute these labels to the LDP neighbors, and the neighbors do the same operation for both received labels and local routes/prefixes till reaching the edge of the network, and now the LSPs are build correctly.

First of all we need to instruct the router to use LDP instead of TDP (Tag Distribution Protocol – Cisco only):

P1 LDP configuration
P1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
P1(config)#mpls label protocol ?
ldp  Use LDP (default)
tdp  Use TDP
P1(config)#mpls label protocol ldp

It is just a simple piece of  configuration, now we have two ways for enabling MPLS on all routers:
1st: Configuring MPLS for each interface connected to an ISP router.
2nd: Configuring MPLS automatic configuration on all enabled IGP interfaces.

First way is just doing “mpls ip” command under all ISP connected interfaces, but obviously there is a scalability problem and human errors could appear if we forgot to enable an interface and this interface is chosen as the best path by the IGP so we will have a broken LSP which will drop all packets the going through.

Second one is the most recommended because you will just do it once per router and also you will have no broken LSPs because all IGP enabled interfaces are also MPLS enabled, for more details also it is recommended to use MPLS LDP-IGP Synchronization to avoid such problems that could happen due to slow convergence or whatever.

Lets take a look at the two ways of configuration:

1st way (one command per interface)
P1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
P1(config)#int fa 1/0
P1(config-if)#mpls ip
2nd way (one command per router)
P1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
P1(config)#router isis abc
P1(config-router)#mpls ldp autoconfig

I believe that everyone of you will prefer to chose the second way PLUS synchronization

MPLS LDP SYNC
P1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
P1(config)#router isis abc
P1(config-router)#mpls ldp sync

Lets check if everything is OK with our configuration:

LDP Neighbors
P1#show mpls ldp neighbor
Peer LDP Ident: 20.20.20.20:0; Local LDP Ident 10.10.10.10:0
TCP connection: 20.20.20.20.45861 – 10.10.10.10.646
State: Oper; Msgs sent/rcvd: 236/234; Downstream
Up time: 03:11:52
LDP discovery sources:
FastEthernet2/0, Src IP addr: 10.10.20.20
Addresses bound to peer LDP Ident:
10.1.20.20      10.20.30.20     10.10.20.20     20.20.20.20
Peer LDP Ident: 30.30.30.30:0; Local LDP Ident 10.10.10.10:0
TCP connection: 30.30.30.30.54795 – 10.10.10.10.646
State: Oper; Msgs sent/rcvd: 236/234; Downstream
Up time: 03:11:50
LDP discovery sources:
FastEthernet1/1, Src IP addr: 10.10.30.30
Addresses bound to peer LDP Ident:
10.10.30.30     10.20.30.30     10.2.30.30      10.3.30.30
30.30.30.30
Peer LDP Ident: 1.1.1.1:0; Local LDP Ident 10.10.10.10:0
TCP connection: 1.1.1.1.646 – 10.10.10.10.56795
State: Oper; Msgs sent/rcvd: 234/235; Downstream
Up time: 03:11:49
LDP discovery sources:
FastEthernet1/0, Src IP addr: 10.1.10.1
Addresses bound to peer LDP Ident:
10.1.10.1       10.1.20.1       1.1.1.1

Generally the output of “show mpls ldp neighbor” on Cisco IOS devices shows many information about the LDP neighbors, UP Time, TCP port (646 for LDP and 711 for TDP), interface and addresses bounded to the peer/neighbor.
Lets see what this output shows us: The LDP neighbors of P1 which are P2 (20.20.20.20), P3(30.30.30.30) and PE01(1.1.1.1) and my local LDP ID (10.10.10.10) is used for the connectivity, also the output shows that all neighbors are using TCP 646 to establish the LDP connection which is TRUE.

MPLS Forwarding table LFIB(Label Forwarding Information Base)
PE01#show mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         Pop Label  10.10.10.10/32   0             Fa1/0      10.1.10.10
17         Pop Label  20.20.20.20/32   0             Fa1/1      10.1.20.20
18         22         30.30.30.30/32   0             Fa1/0      10.1.10.10
           16         30.30.30.30/32   0             Fa1/1      10.1.20.20
19         Pop Label  10.10.20.0/24    0             Fa1/0      10.1.10.10
           Pop Label  10.10.20.0/24    0             Fa1/1      10.1.20.20
20         Pop Label  10.10.30.0/24    0             Fa1/0      10.1.10.10
21         Pop Label  10.20.30.0/24    0             Fa1/1      10.1.20.20
22         25         10.2.30.0/24     0             Fa1/0      10.1.10.10
           19         10.2.30.0/24     0             Fa1/1      10.1.20.20
23         26         10.3.30.0/24     0             Fa1/0      10.1.10.10
           20         10.3.30.0/24     0             Fa1/1      10.1.20.20
24         28         2.2.2.2/32       0             Fa1/0      10.1.10.10
           24         2.2.2.2/32       0             Fa1/1      10.1.20.20
25         27         3.3.3.3/32       0             Fa1/0      10.1.10.10
           23         3.3.3.3/32       0             Fa1/1      10.1.20.20

The output shows the Local Label that is advertised by the local router to its neighbors, the Outgoing Label which is received by the Next Hop and the local router uses to reach the destination by binding it to the packet and forward the labeled packet to the Outgoing interface.
If the Outgoing Label shows “Pop Label” it means that the local router is the PHP (Penultimate Hop Popping) router and the destination is local or directly connected to the Next Hop.

Traceroute from PE01 to PE02
PE01#traceroute 2.2.2.2Type escape sequence to abort.
Tracing the route to 2.2.2.2  1 10.1.20.20 [MPLS: Label 24 Exp 0] 80 msec
    10.1.10.10 [MPLS: Label 28 Exp 0] 68 msec
    10.1.20.20 [MPLS: Label 24 Exp 0] 64 msec
  2 10.10.30.30 [MPLS: Label 17 Exp 0] 64 msec
    10.20.30.30 [MPLS: Label 17 Exp 0] 36 msec
    10.10.30.30 [MPLS: Label 17 Exp 0] 72 msec
  3 10.2.30.2 56 msec *  84 msec

The output of the Traceroute from PE01 to PE02 shows that we are using labels along the path till the Penultimate hop is popping up the top most label of the stack – only one label per stack in our case – before sending it to the last hop/destination.

Now we have a ready network for implementing applications and services for the customers, and this network is IP/MPLS based, so keep your eyes opened for a very interesting part about MP-BGP in the next task.

Enjoy,