Getting started with MPLS, getting rid of BGP in the core
In this lab, we will do a very simple MPLS lab, to illustrate how we can have a network without BGP on the core transit routers in an AS. Here’s how the simple network looks like:
The complete configurations are listed at the end of the post.
We will start with just 3 routers in our AS 65001:
RLeft:
Loopback0: 192.168.255.10/32 –> Management, routed in EIGRP
Loopback1: 192.168.10.1/24 –> Simulated LAN, routed in iBGP
Fa0/0: 172.16.0.1/30 –> Interconnection to RCentre0, routed in EIGRP
RCentre0:
Loopback0: 192.168.255.11/32 –> Management, routed in EIGPR
Fa0/0: 172.16.0.2/30 –> Interconnection to RLeft, routed in EIGRP
Fa0/1: 172.16.0.5/30 –> Interconnection to RRight, routed in EIGRP
RRight:
Loopback0: 192.168.255.12/32 –> Management, routed in EIGPR
Loopback1: 192.168.20.1/24 –> Simulated LAN, routed in iBGP
Fa0/0: 172.16.0.6/30 –> Interconnection to RCentre0, routed in EIGRP
We have already enabled EIGRP across our network, and we have routed only the loopbacks and interconnection subnets (to make sure we have our neighborships up). Here’s the route information on all three routers we have, before we enable BGP:
RLeft:
Rleft#sh ip route eigrp
172.16.0.0/30 is subnetted, 2 subnets
D 172.16.0.4 [90/30720] via 172.16.0.2, 00:24:04, FastEthernet0/0
192.168.255.0/32 is subnetted, 3 subnets
D 192.168.255.12 [90/158720] via 172.16.0.2, 00:01:43, FastEthernet0/0
D 192.168.255.11 [90/156160] via 172.16.0.2, 00:00:31, FastEthernet0/0
Rleft#
RCentre0:
RCentre0#sh ip route eigrp
192.168.255.0/32 is subnetted, 3 subnets
D 192.168.255.12 [90/156160] via 172.16.0.6, 00:01:21, FastEthernet0/1
D 192.168.255.10 [90/156160] via 172.16.0.1, 00:00:38, FastEthernet0/0
RCentre0#
RRight:
RRight#sh ip route eigrp
172.16.0.0/30 is subnetted, 2 subnets
D 172.16.0.0 [90/30720] via 172.16.0.5, 00:16:36, FastEthernet0/0
192.168.255.0/32 is subnetted, 3 subnets
D 192.168.255.11 [90/156160] via 172.16.0.5, 00:00:36, FastEthernet0/0
D 192.168.255.10 [90/158720] via 172.16.0.5, 00:01:04, FastEthernet0/0
RRight#
We can see that we do not have routing for the two simulated LAN networks on Rleft and RRight respectively. These two networks will only be routed in our iBGP session between RLeft and RRight. We are bringing up an iBGP session between the Loopback0 interfaces of RLeft and RRight, relying on the internal EIGRP routing to provide the connectivity between the loopbacks:
On RLeft:
Rleft#sh run | sect router bgp
router bgp 65001
no synchronization
bgp router-id 192.168.255.10
bgp log-neighbor-changes
network 192.168.10.0
neighbor 192.168.255.12 remote-as 65001
neighbor 192.168.255.12 update-source Loopback0
neighbor 192.168.255.12 next-hop-self
neighbor 192.168.255.12 send-community
neighbor 192.168.255.12 soft-reconfiguration inbound
no auto-summary
Rleft#
And on RRight:
RRight#sh run | sect router bgp
router bgp 65001
no synchronization
bgp router-id 192.168.255.12
bgp log-neighbor-changes
network 192.168.20.0
neighbor 192.168.255.10 remote-as 65001
neighbor 192.168.255.10 update-source Loopback0
neighbor 192.168.255.10 next-hop-self
neighbor 192.168.255.10 send-community
neighbor 192.168.255.10 soft-reconfiguration inbound
no auto-summary
RRight#
The “send-community” and “soft-reconfiguration” parts are not relevant to the current scenario, but I just like to have them enabled.
After we have enabled BGP, we can see that the two /24 networks are being exchanged in BGP, they are in the routing tables of RLeft and RRight, but there is no reachability between them
Rleft#sh ip rou bgp
B 192.168.20.0/24 [200/0] via 192.168.255.12, 00:10:46
Rleft#
Rleft#
Rleft#sh ip route 192.168.255.12
Routing entry for 192.168.255.12/32
Known via "eigrp 65001", distance 90, metric 158720, type internal
Redistributing via eigrp 65001
Last update from 172.16.0.2 on FastEthernet0/0, 00:49:34 ago
Routing Descriptor Blocks:
* 172.16.0.2, from 172.16.0.2, 00:49:34 ago, via FastEthernet0/0
Route metric is 158720, traffic share count is 1
Total delay is 5200 microseconds, minimum bandwidth is 100000 Kbit
Reliability 255/255, minimum MTU 1500 bytes
Loading 1/255, Hops 2
Rleft#
Rleft#
Rleft#ping 192.168.20.1 sou 192.168.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.1
.....
Success rate is 0 percent (0/5)
Rleft#
because RCentre0, which is the next hop for them, does not know anything about these two remote networks:
RCentre0#sh ip route 192.168.10.0
% Network not in table
RCentre0#sh ip route 192.168.20.0
% Network not in table
RCentre0#
We now go ahead and enable MPLS. We will start with specifying LDP as the label distribution protocol, instead of the cisco-proprietary TDP, which works exactly like it anyway. Then, we will enable MPLS on both interfaces on RCentre0 and on the interfaces on RLeft and RRight connecting to RCentre0. Since we are using Ethernet interfaces, we will also set the mpls mtu to 1532, to accomodate for the 4-byte MPLS header, inserted in the frame. Let’s have a look:
Rleft(config)#mpls label protocol ldp
Rleft(config)#int fa0/0
Rleft(config-if)#mpls ip
Rleft(config-if)#mpls mtu 1532
*Mar 1 01:39:03.531: %TFIB-3-MPLS_MTU_SET: Setting mpls mtu to 1532 on FastEthernet0/0 which is higher than the interface mtu 1500 . This could lead to packet forwarding problems including packet drops.
Rleft(config-if)#end
Rleft#
If we have switches in the underlying connectivity between the routers, we have to make sure the switches support baby-giant or jumbo frames and that this feature is enabled on them.
After we have enabled MPLS, we see that RLeft has assigned labels to all networks in his routing-table (actually, CEF cache), except the BGP network. We do this by examining the Label Information Base, containing all known labels:
Rleft#sh mpls ldp bindings
tib entry: 172.16.0.0/30, rev 6
local binding: tag: imp-null
tib entry: 172.16.0.4/30, rev 4
local binding: tag: 16
tib entry: 192.168.10.0/24, rev 2
local binding: tag: imp-null
tib entry: 192.168.255.10/32, rev 12
local binding: tag: imp-null
tib entry: 192.168.255.11/32, rev 10
local binding: tag: 18
tib entry: 192.168.255.12/32, rev 8
local binding: tag: 17
Rleft#
Traffic to the networks labeled with “imp-null”, or implicit-null, will actually have their label header stripped off, and they will be routed as IP packets, instead of label-switched. At the moment, only the locally connected networks are labeled with “imp-null”. We can also see this in the Label Forwarding Information Base:
Rleft#sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Untagged 172.16.0.4/30 0 Fa0/0 172.16.0.2
17 Untagged 192.168.255.12/32 0 Fa0/0 172.16.0.2
18 Untagged 192.168.255.11/32 0 Fa0/0 172.16.0.2
Rleft#
Because we still have not enabled MPLS on RCentre0, there are no MPLS LDP neighbors for RLeft and no tags Rleft has received, this is why we see “Untagged” for all networks in the LFIB. The information for the assigned tag to a network, may be viewed from the CEF cache as well:
Rleft#sh ip cef 172.16.0.4
172.16.0.4/30, version 17, epoch 0, cached adjacency 172.16.0.2
0 packets, 0 bytes
tag information set
local tag: 16
via 172.16.0.2, FastEthernet0/0, 0 dependencies
next hop 172.16.0.2, FastEthernet0/0
valid cached adjacency
tag rewrite with Fa0/0, 172.16.0.2, tags imposed: {}
Rleft#
Also, we see that the BGP network is not in the LIB and in the LFIB. However, we can actually see that this network does have a label assigned, and it is the same label assigned to the next-hop for the network. We can see this in the CEF cache:
Rleft#sh ip cef 192.168.20.0
192.168.20.0/24, version 24, epoch 0, cached adjacency 172.16.0.2
0 packets, 0 bytes
tag information from 192.168.255.12/32, shared
local tag: 17
via 192.168.255.12, 0 dependencies, recursive
next hop 172.16.0.2, FastEthernet0/0 via 192.168.255.12/32
valid cached adjacency
tag rewrite with Fa0/0, 172.16.0.2, tags imposed: {}
Rleft#
Rleft#
Rleft#sh mpls forwarding 192.168.255.12
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
17 Untagged 192.168.255.12/32 0 Fa0/0 172.16.0.2
Rleft#
We can now go ahead and enable MPLS on RCentre and RRight, and have a look at the forwarding cache later. After the LDP neighbors have come up, and the labels have been exchanged between the routers, we can see the LIB on Rleft has grown a little:
Rleft#sh mpls ldp bindings
tib entry: 172.16.0.0/30, rev 6
local binding: tag: imp-null
remote binding: tsr: 192.168.255.11:0, tag: imp-null
tib entry: 172.16.0.4/30, rev 4
local binding: tag: 16
remote binding: tsr: 192.168.255.11:0, tag: imp-null
tib entry: 192.168.10.0/24, rev 2
local binding: tag: imp-null
tib entry: 192.168.255.10/32, rev 12
local binding: tag: imp-null
remote binding: tsr: 192.168.255.11:0, tag: 17
tib entry: 192.168.255.11/32, rev 10
local binding: tag: 18
remote binding: tsr: 192.168.255.11:0, tag: imp-null
tib entry: 192.168.255.12/32, rev 8
local binding: tag: 17
remote binding: tsr: 192.168.255.11:0, tag: 16
Rleft#
We can see now that the LIB on Rleft also holds the remote labels, i.e. the labels its peers have for the different destination networks. The key entry to our scenario is highlighted in red - this is the entry for the loopback0 interface of RRight, which we can see is tagged locally on Rleft with a label of 17, and on RCentre0 with a label of 16. So in essence, we will have label switching working for traffic to this IP. Traffic to this IP will be tagged with a label of 16 before being sent on to RCentre0, where the label of 16 will be popped (removed), and the packet will be sent on after an IP route lookup is performed. This is the first part of the Label-switched path between Rleft and RRight’s loopback interfaces. We can further see this from the LFIB on RLeft:
Rleft#sh mpls forwarding
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 172.16.0.4/30 0 Fa0/0 172.16.0.2
17 16 192.168.255.12/32 0 Fa0/0 172.16.0.2
18 Pop tag 192.168.255.11/32 0 Fa0/0 172.16.0.2
Rleft#
And, as we saw earlier, the label of 17 is being used for the BGP network 192.168.20.0, so traffic to this network will be switched in exactly the same way. Let’s view the second prt of the LSP, by checking the LFIB on RCentre0:
RCentre0#sh mpls forwarding
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 192.168.255.12/32 146 Fa0/1 172.16.0.6
17 Pop tag 192.168.255.10/32 254 Fa0/0 172.16.0.1
RCentre0#
Now, we should have reachability between the two remote networks 192.168.10.0/24 and 192.168.20.0/24 through the labeled packets between RLeft and RCentre0 and RRight and RCentre0.
Rleft#ping 192.168.20.1 sou 192.168.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/8/8 ms
Rleft#
Rleft#
Rleft#trace ip
Target IP address: 192.168.20.1
Source address: 192.168.10.1
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 192.168.20.1
1 172.16.0.2 [MPLS: Label 16 Exp 0] 20 msec 8 msec 8 msec
2 172.16.0.6 8 msec * 32 msec
Rleft#
Note that in this topology we do not have any label swapping as such, because we only have one router in the middle. Let’s add two more routers in the middle, RCentre1 and RCentre2, moving RRight to be connected to RCentre2. This way we can see the actual label swapping process.
This is how the topology looks like with the two new routers added:
The new core routers, RCentre1 and RCentre2 have an identical configuraiton to Rcentre0, with only the addressing being different. Here’s how the LIB and LFIB tables look on all the centre routers.
RCentre0 - Label Information base (all known labels, local and remote):
RCentre0#sh mpls ip binding
172.16.0.0/30
in label: imp-null
out label: 20 lsr: 192.168.255.13:0
out label: imp-null lsr: 192.168.255.10:0
172.16.0.4/30
in label: 19
out label: 17 lsr: 192.168.255.13:0 inuse
out label: 21 lsr: 192.168.255.10:0
172.16.0.8/30
in label: imp-null
out label: imp-null lsr: 192.168.255.13:0
out label: 17 lsr: 192.168.255.10:0
172.16.0.12/30
in label: 17
out label: imp-null lsr: 192.168.255.13:0 inuse
out label: 19 lsr: 192.168.255.10:0
192.168.10.0/24
out label: imp-null lsr: 192.168.255.10:0
192.168.255.10/32
in label: 21
out label: imp-null lsr: 192.168.255.10:0 inuse
out label: 21 lsr: 192.168.255.13:0
192.168.255.11/32
in label: imp-null
out label: 19 lsr: 192.168.255.13:0
out label: 16 lsr: 192.168.255.10:0
192.168.255.12/32
in label: 20
out label: 18 lsr: 192.168.255.13:0 inuse
out label: 22 lsr: 192.168.255.10:0
192.168.255.13/32
in label: 16
out label: imp-null lsr: 192.168.255.13:0 inuse
out label: 18 lsr: 192.168.255.10:0
192.168.255.14/32
in label: 18
out label: 16 lsr: 192.168.255.13:0 inuse
out label: 20 lsr: 192.168.255.10:0
RCentre0#
RCentre0 - Label Forwarding Information Base:
RCentre0#show mpls forwarding
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 192.168.255.13/32 0 Fa0/1 172.16.0.10
17 Pop tag 172.16.0.12/30 0 Fa0/1 172.16.0.10
18 16 192.168.255.14/32 0 Fa0/1 172.16.0.10
19 17 172.16.0.4/30 0 Fa0/1 172.16.0.10
20 18 192.168.255.12/32 3718 Fa0/1 172.16.0.10
21 Pop tag 192.168.255.10/32 3160 Fa0/0 172.16.0.1
RCentre0#
RCentre1 - Label information base:
RCentre1#sh mpls ip binding
172.16.0.0/30
in label: 20
out label: imp-null lsr: 192.168.255.11:0 inuse
out label: 20 lsr: 192.168.255.14:0
172.16.0.4/30
in label: 17
out label: imp-null lsr: 192.168.255.14:0 inuse
out label: 19 lsr: 192.168.255.11:0
172.16.0.8/30
in label: imp-null
out label: 18 lsr: 192.168.255.14:0
out label: imp-null lsr: 192.168.255.11:0
172.16.0.12/30
in label: imp-null
out label: imp-null lsr: 192.168.255.14:0
out label: 17 lsr: 192.168.255.11:0
192.168.255.10/32
in label: 21
out label: 21 lsr: 192.168.255.14:0
out label: 21 lsr: 192.168.255.11:0 inuse
192.168.255.11/32
in label: 19
out label: imp-null lsr: 192.168.255.11:0 inuse
out label: 19 lsr: 192.168.255.14:0
192.168.255.12/32
in label: 18
out label: 16 lsr: 192.168.255.14:0 inuse
out label: 20 lsr: 192.168.255.11:0
192.168.255.13/32
in label: imp-null
out label: 17 lsr: 192.168.255.14:0
out label: 16 lsr: 192.168.255.11:0
192.168.255.14/32
in label: 16
out label: imp-null lsr: 192.168.255.14:0 inuse
out label: 18 lsr: 192.168.255.11:0
RCentre1#
RCentre1 - Label Forwarding Information Base:
RCentre1# sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 192.168.255.14/32 0 Fa0/1 172.16.0.14
17 Pop tag 172.16.0.4/30 0 Fa0/1 172.16.0.14
18 16 192.168.255.12/32 4507 Fa0/1 172.16.0.14
19 Pop tag 192.168.255.11/32 0 Fa0/0 172.16.0.9
20 Pop tag 172.16.0.0/30 2348 Fa0/0 172.16.0.9
21 21 192.168.255.10/32 3659 Fa0/0 172.16.0.9
RCentre1#
RCentre2 - Label Information base:
RCentre2#sh mpls ip binding
172.16.0.0/30
in label: 20
out label: 21 lsr: 192.168.255.12:0
out label: 20 lsr: 192.168.255.13:0 inuse
172.16.0.4/30
in label: imp-null
out label: imp-null lsr: 192.168.255.12:0
out label: 17 lsr: 192.168.255.13:0
172.16.0.8/30
in label: 18
out label: imp-null lsr: 192.168.255.13:0 inuse
out label: 19 lsr: 192.168.255.12:0
172.16.0.12/30
in label: imp-null
out label: 17 lsr: 192.168.255.12:0
out label: imp-null lsr: 192.168.255.13:0
192.168.20.0/24
out label: imp-null lsr: 192.168.255.12:0
192.168.255.10/32
in label: 21
out label: 22 lsr: 192.168.255.12:0
out label: 21 lsr: 192.168.255.13:0 inuse
192.168.255.11/32
in label: 19
out label: 20 lsr: 192.168.255.12:0
out label: 19 lsr: 192.168.255.13:0 inuse
192.168.255.12/32
in label: 16
out label: imp-null lsr: 192.168.255.12:0 inuse
out label: 18 lsr: 192.168.255.13:0
192.168.255.13/32
in label: 17
out label: imp-null lsr: 192.168.255.13:0 inuse
out label: 18 lsr: 192.168.255.12:0
192.168.255.14/32
in label: imp-null
out label: 16 lsr: 192.168.255.12:0
out label: 16 lsr: 192.168.255.13:0
RCentre2#
RCentre2 - Label Forwarding Information base:
RCentre2#sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 192.168.255.12/32 4881 Fa0/1 172.16.0.6
17 Pop tag 192.168.255.13/32 0 Fa0/0 172.16.0.13
18 Pop tag 172.16.0.8/30 0 Fa0/0 172.16.0.13
19 19 192.168.255.11/32 0 Fa0/0 172.16.0.13
20 20 172.16.0.0/30 2412 Fa0/0 172.16.0.13
21 21 192.168.255.10/32 3813 Fa0/0 172.16.0.13
RCentre2#
It makes sense to list the LFIB tables of Rleft and RRight, as we have restarted the devices before adding the two new routers.
Rleft#sh mpls forwarding
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 192.168.255.11/32 0 Fa0/0 172.16.0.2
17 Pop tag 172.16.0.8/30 0 Fa0/0 172.16.0.2
18 16 192.168.255.13/32 0 Fa0/0 172.16.0.2
19 17 172.16.0.12/30 0 Fa0/0 172.16.0.2
20 18 192.168.255.14/32 0 Fa0/0 172.16.0.2
21 19 172.16.0.4/30 0 Fa0/0 172.16.0.2
22 20 192.168.255.12/32 0 Fa0/0 172.16.0.2
Rleft#
RRight#sh mpls forwarding
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 192.168.255.14/32 0 Fa0/0 172.16.0.5
17 Pop tag 172.16.0.12/30 0 Fa0/0 172.16.0.5
18 17 192.168.255.13/32 0 Fa0/0 172.16.0.5
19 18 172.16.0.8/30 0 Fa0/0 172.16.0.5
20 19 192.168.255.11/32 0 Fa0/0 172.16.0.5
21 20 172.16.0.0/30 0 Fa0/0 172.16.0.5
22 21 192.168.255.10/32 0 Fa0/0 172.16.0.5
RRight#
As we can see, we now have a few more prefixes in both the LIB and LFIB, and we can actually see the label swapping process. With the current configuration, traffic to 192.168.20.0/24 (BGP next-hop of 192.168.255.12) from RLeft will be tagged with a label of 20, and sent to RCentre0 at 172.16.0.2. Rcentre0 will strip this label and swap it with label 18, and send it to RCentre1 at 172.16.0.10. RCentre1 will swap label 18 for label 16 and forward the packet to RCentre2 at 172.16.0.14. RCentre2 will pop the label (remove it), and forward traffic to RRight. On the way back, labels will be reversed.
We can actually see this happening on the centre routers by enabling debug for mpls label-switched packets with “debug mpls packets”. Here’s how the switching of 5 ping packets from 192.168.10.1 to 192.168.20.1 looks on each of the centre routers with the debug command enabled. The echo requests are highlighted in red and the echo replies (from 192.168.20.1 back to 192.168.10.1) are highlighted in blue.
RCentre0:
RCentre0#
*Mar 1 00:56:27.179: MPLS: Fa0/0: recvd: CoS=0, TTL=255, Label(s)=20
*Mar 1 00:56:27.183: MPLS: Fa0/1: xmit: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:56:27.215: MPLS: Fa0/1: recvd: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:56:27.215: MPLS: Fa0/0: xmit: (no label)
*Mar 1 00:56:27.223: MPLS: Fa0/0: recvd: CoS=0, TTL=255, Label(s)=20
*Mar 1 00:56:27.223: MPLS: Fa0/1: xmit: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:56:27.227: MPLS: Fa0/1: recvd: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:56:27.231: MPLS: Fa0/0: xmit: (no label)
*Mar 1 00:56:27.243: MPLS: Fa0/0: recvd: CoS=0, TTL=255, Label(s)=20
*Mar 1 00:56:27.243: MPLS: Fa0/1: xmit: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:56:27.247: MPLS: Fa0/1: recvd: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:56:27.247: MPLS: Fa0/0: xmit: (no label)
*Mar 1 00:56:27.263: MPLS: Fa0/0: recvd: CoS=0, TTL=255, Label(s)=20
*Mar 1 00:56:27.263: MPLS: Fa0/1: xmit: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:56:27.271: MPLS: Fa0/1: recvd: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:56:27.271: MPLS: Fa0/0: xmit: (no label)
*Mar 1 00:56:27.283: MPLS: Fa0/0: recvd: CoS=0, TTL=255, Label(s)=20
*Mar 1 00:56:27.283: MPLS: Fa0/1: xmit: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:56:27.287: MPLS: Fa0/1: recvd: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:56:27.291: MPLS: Fa0/0: xmit: (no label)
RCentre0#
And here’s how it continues on RCentre1:
RCentre1#
*Mar 1 00:55:51.323: MPLS: Fa0/0: recvd: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:55:51.323: MPLS: Fa0/1: xmit: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:51.327: MPLS: Fa0/1: recvd: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:51.327: MPLS: Fa0/0: xmit: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:55:51.339: MPLS: Fa0/0: recvd: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:55:51.339: MPLS: Fa0/1: xmit: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:51.347: MPLS: Fa0/1: recvd: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:51.351: MPLS: Fa0/0: xmit: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:55:51.359: MPLS: Fa0/0: recvd: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:55:51.359: MPLS: Fa0/1: xmit: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:51.371: MPLS: Fa0/1: recvd: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:51.371: MPLS: Fa0/0: xmit: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:55:51.383: MPLS: Fa0/0: recvd: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:55:51.383: MPLS: Fa0/1: xmit: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:51.391: MPLS: Fa0/1: recvd: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:51.391: MPLS: Fa0/0: xmit: CoS=0, TTL=253, Label(s)=21
*Mar 1 00:55:51.403: MPLS: Fa0/0: recvd: CoS=0, TTL=254, Label(s)=18
*Mar 1 00:55:51.403: MPLS: Fa0/1: xmit: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:51.411: MPLS: Fa0/1: recvd: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:51.411: MPLS: Fa0/0: xmit: CoS=0, TTL=253, Label(s)=21
RCentre1#
And on RCentre2:
RCentre2#
*Mar 1 00:55:09.827: MPLS: Fa0/0: recvd: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:09.831: MPLS: Fa0/1: xmit: (no label)
*Mar 1 00:55:09.851: MPLS: Fa0/1: recvd: CoS=0, TTL=255, Label(s)=21
*Mar 1 00:55:09.851: MPLS: Fa0/0: xmit: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:09.859: MPLS: Fa0/0: recvd: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:09.859: MPLS: Fa0/1: xmit: (no label)
*Mar 1 00:55:09.867: MPLS: Fa0/1: recvd: CoS=0, TTL=255, Label(s)=21
*Mar 1 00:55:09.871: MPLS: Fa0/0: xmit: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:09.879: MPLS: Fa0/0: recvd: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:09.879: MPLS: Fa0/1: xmit: (no label)
*Mar 1 00:55:09.887: MPLS: Fa0/1: recvd: CoS=0, TTL=255, Label(s)=21
*Mar 1 00:55:09.891: MPLS: Fa0/0: xmit: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:09.899: MPLS: Fa0/0: recvd: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:09.903: MPLS: Fa0/1: xmit: (no label)
*Mar 1 00:55:09.911: MPLS: Fa0/1: recvd: CoS=0, TTL=255, Label(s)=21
*Mar 1 00:55:09.911: MPLS: Fa0/0: xmit: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:09.923: MPLS: Fa0/0: recvd: CoS=0, TTL=253, Label(s)=16
*Mar 1 00:55:09.923: MPLS: Fa0/1: xmit: (no label)
*Mar 1 00:55:09.931: MPLS: Fa0/1: recvd: CoS=0, TTL=255, Label(s)=21
*Mar 1 00:55:09.931: MPLS: Fa0/0: xmit: CoS=0, TTL=254, Label(s)=21
*Mar 1 00:55:15.003: MPLS: Fa0/0: recvd: CoS=6, TTL=253, Label(s)=16
*Mar 1 00:55:15.003: MPLS: Fa0/1: xmit: (no label)
*Mar 1 00:55:15.027: MPLS: Fa0/1: recvd: CoS=6, TTL=255, Label(s)=21
*Mar 1 00:55:15.027: MPLS: Fa0/0: xmit: CoS=6, TTL=254, Label(s)=21
*Mar 1 00:55:15.231: MPLS: Fa0/0: recvd: CoS=6, TTL=253, Label(s)=16
*Mar 1 00:55:15.231: MPLS: Fa0/1: xmit: (no label)
RCentre2#
The same path can be viewed with a traceroute from RLeft:
Rleft#trace ip
Target IP address: 192.168.20.1
Source address: 192.168.10.1
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 192.168.20.1
1 172.16.0.2 [MPLS: Label 20 Exp 0] 32 msec 20 msec 28 msec
2 172.16.0.10 [MPLS: Label 18 Exp 0] 16 msec 8 msec 16 msec
3 172.16.0.14 [MPLS: Label 16 Exp 0] 12 msec 16 msec 32 msec
4 172.16.0.6 16 msec * 12 msec
Rleft#
One thing worth mentioning is that the TTL of the IP packet is copied into the TTL of the MPLS header by the edge LSRs. If we want to hide our internal core from appearing in traceroutes, we can disable this TTL copying, with the command “no mpls ip propagate-ttl” on the edge Label Switch Routers. In that case, the traceroute will look like this:
Rleft#trace ip
Target IP address: 192.168.20.1
Source address: 192.168.10.1
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 192.168.20.1
1 172.16.0.6 20 msec * 24 msec
Rleft#
With TTL propagation disabled, even when the first IP packet is sent with TTL=1, the TTL is not copied by the edge router into the TTL field of the MPLS header, instead the default value of 255 is placed in the MPLS TTL field, and the packet is label switched all the way to the final destination, where the original IP packet is processed and an ICMP reply is sent back to the original source.
And finally, the complete configurations of the routers in this lab:
| RLeft.cfg | RCentre0.cfg | Rcentre1.cfg | RCentre2.cfg | RRight.cfg |
No comments yet.
Leave a comment
Българска версия
Chat
Recent Posts
Recent Comments
- ravi on VRF Lite - VRFs without MPLS
- Thiyagu on BGP RIB-Failure

