Site icon Karneliuk

Inter-AS VPN Option C between Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR

Hello my friend,

I haven’t been posting for a while, but since now I hope that I’ll be able to blogging further. Due to some reason, I’m no more Nokia’s employee. But now I’ve got amazing chance to take part in development of Vodafone’s network, which I find a very good step further for me. But back to article. Today I’ll speak about Inter-AS BGP/MPLS IP VPN Option C between Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR

1
2
3
4
5
No part of this blogpost could be reproduced, stored in a
retrieval system, or transmitted in any form or by any
means, electronic, mechanical or photocopying, recording,
or otherwise, for commercial purposes without the
prior permission of the author.

What is it about?

This type of inter-AS VPN is the most scalable on the one hand, and the most complex on the another. In the previous article I’ve provided the brief comparison of all Inter-AS BGP/MPLS IP VPNs, so you can refer the for more information, but here I’ll remind, how Option C looks like:

The complexity arises due to deep mutual penetration of both ASes (autonomous systems) into each other. In Option-B we were just making BGP-peering between ASBRs (autonomous system border routers) for VPNv4/VPNv6 address family (AFI/SAFI 1/128 and 2/128 respectively) and didn’t care about alignment of IP addresses. In Option-C we establish BGP peering between route reflectors (RR), which are typically far away from the network border. Moreover, you need to activate MPLS at RR in order to build MPLS LSP from RR. At the ASBR level we establish BGP IPv4 labeled unicast (BGP-LU) sessions and announce loopbacks of RRs and PEs (provider edge) routers to each other. If we are speaking about big ISPs, usually it isn’t the problem, because they take part in Internet transit and therefore have often public IPv4 addresses assigned to their loopbacks (or even interconnects). In case of private addressing, it’s necessary to check, if there are no overlapping IP addresses for PE/RR, otherwise you will have to forget BGP/MPLS IP VPN with Option C and will have to look for something else.

What are we going to test?

In this lab we’ll built Inter-AS BGP/MPLS IP VPN (simply, MPLS L3VPN) across two routing domains and will discover the BGP topology and MPLS Label processing.

Topology

Below you can find the physical topology of our lab:

You might spot that it’s a little bit modified, though you have seen similar topology in one of the articles previously (link).

The reason for new topology as I’ve managed to launch 4 virtual routers simultaneously: 2 Nokia (Alcatel-Lucent) VSRs and 2 Cisco IOS XRv, what I find totally amazing as it’s broaden much my possibilities for labbing anywhere and anytime.

The logical topology with IP addressing and some basic routing is just the following pic:

As you can see, we have two routing domains. Each routing domain will represent separate AS. Right now only system interfaces (or loopbacks 0) are advertised inside each routing domain. In one routing domain (Nokia (Alcatel-Lucent) SR OS based) ISIS is used as IGP (in level 2 mode), whereas in another domain (Cisco IOS XR based) OSPF is used (just backbone area 0). All other configuration will be done and explained as usual in the article below. In order to shorten your time, you can use these configuration files that include necessary commands to build the provided physical and logical topologies.

Intra-AS MPLS LSP / Transport layer

The first step to build any kind of MPLS VPN is for sure the establishment of MPLS tunnels (MPLS LSPs), which forms transport layer for all other type of traffic. In case of intra-AS MPLS L3VPN Option C there will be two levels of transport, as we span two separate IGP domains with its own MPLS LSPs in one hierarchical MPLS LSP. So, let’s first focus on the very basic MPLS LSPs:

As you can see from the image, we will use RSVP-TE (link) based MPLS LSP in Nokia domain and LDP (link) in Cisco domain. To turn the service above into reality we need the following configuration:

Nokia (Alcatel-Lucent) SR OS Cisco IOS XR
SR1 XR3

A:SR1>edit-cfg# candidate view
==============================
configure
router
mpls
interface “system”
no shutdown
exit
interface “toSR2”
no shutdown
exit
exit
rsvp
interface “system”
no shutdown
exit
interface “toSR2”
no shutdown
exit
no shutdown
exit
mpls
path “loose”
no shutdown
exit
lsp “SR1_to_SR2”
to 10.1.255.2
cspf
least-fill
primary “loose”
bandwidth 55
exit
no shutdown
exit
no shutdown
exit
exit
exit
==============================

RP/0/0/CPU0:XR3#show run
!
router ospf CORE
area 0.0.0.0
interface GigabitEthernet0/0/0/0.34
mpls ldp sync
!
!
!
mpls oam
!
mpls ldp
router-id 10.2.255.3
address-family ipv4
label
local
allocate for host-routes
!
!
!
!
end

SR2 XR4

A:SR2>edit-cfg# candidate view
==============================
mpls
interface “system”
no shutdown
exit
interface “toSR1”
no shutdown
exit
exit
rsvp
interface “system”
no shutdown
exit
interface “toSR1”
no shutdown
exit
no shutdown
exit
mpls
path “loose”
no shutdown
exit
lsp “SR2_to_SR1”
to 10.1.255.1
cspf
least-fill
primary “loose”
bandwidth 55
exit
no shutdown
exit
no shutdown
exit
exit
==============================

RP/0/0/CPU0:XR4#show run
!
router ospf CORE
mpls ldp auto-config
area 0.0.0.0
interface GigabitEthernet0/0/0/0.34
mpls ldp sync
!
!
!
mpls oam
!
mpls ldp
router-id 10.2.255.4
address-family ipv4
label
local
allocate for host-routes
!
!
!
!
end

I won’t go into details for the verification part, please, use the links above.

Just let’s briefly check LFIB at our routers in order see if we have necessary LSPs to system interfaces / loopback 0 IPv4 addresses of peering routers inside IGP domains. Let’s start with Nokia (Alcatel-Lucent) SR OS part first:

A:SR1# show router tunnel-table
===============================================================================
IPv4 Tunnel Table (Router: Base)
===============================================================================
Destination       Owner     Encap TunnelId  Pref     Nexthop        Metric
——————————————————————————-
10.1.255.2/32     rsvp      MPLS  1         7        10.1.0.1       10
——————————————————————————-
Flags: B = BGP backup route available
.      E = inactive best-external BGP route
===============================================================================
!
!
A:SR2# show router tunnel-table
===============================================================================
IPv4 Tunnel Table (Router: Base)
===============================================================================
Destination       Owner     Encap TunnelId  Pref     Nexthop        Metric
——————————————————————————-
10.1.255.1/32     rsvp      MPLS  1         7        10.1.0.0       10
——————————————————————————-
Flags: B = BGP backup route available
.      E = inactive best-external BGP route
===============================================================================

So far it looks good. What are about Cisco IOS XR routers?

RP/0/0/CPU0:XR3#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
—— ———– —————— ———— ————— ————
24000  Pop         10.2.255.4/32      Gi0/0/0/0.34 10.2.0.1        432
!
!
RP/0/0/CPU0:XR4#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
—— ———– —————— ———— ————— ————
24000  Pop         10.2.255.3/32      Gi0/0/0/0.34 10.2.0.0        490

Both intra-AS MPLS LSPs are established, so the first milestone in launching BGP/MPLS IP VPN Option C is achieved. So it’s time for us to move further!

Inter-AS MPLS LSP based on BGP-LU / Transport layer

BGP Labeled Unicast (or shortly BGP-LU representing AFI/SAFI 1/4) isn’t something new for us, because we have already used it for IGP-free Data Center (link) and Seamless MPLS (link) configuration in our series. The particular logical topology for this lab from BGP-LU prospective is as follows:

The main thing you should take care of is using of proper IPv4 addresses for BGP sessions establishment and proper next-hop changes at ASBRs in order to get end-to-end reachability from SR1 to XR4. The configuration is as follows:

Pay attention to static route that is necessary to add at Cisco IOS XR ASBR XR3 at BGP/MPLS enabled interface in direction of Nokia SR OS router SR2.

Nokia (Alcatel-Lucent) SR OS Cisco IOS XR
SR1 XR3

A:SR1>edit-cfg# candidate view
==============================
configure
router
autonomous-system 65001
policy-options
begin
prefix-list “PL_IPV4_LU_ENDPOINT”
prefix 10.1.255.0/24 longer
exit
policy-statement “RP_BGP_LU_EXPORT”
entry 10
from
protocol direct
prefix-list “PL_IPV4_LU_ENDPOINT”
exit
action accept
exit
exit
default-action drop
exit
exi
commit
exit
bgp
router-id 10.1.255.1
next-hop-resolution
label-route-transport-tunnel
family vpn
resolution-filter
ldp
exit
resolution any
exit
exit
exit
group “iBGP_LU”
family label-ipv4
export “RP_BGP_LU_EXPORT”
peer-as 65001
local-address 10.1.255.1
advertise-inactive
neighbor 10.1.255.2
exit
exit
exit
exit
exit
==============================

RP/0/0/CPU0:XR3#show run
!
prefix-set PS_IPV4_BGP_LU_LOOPBACKS
10.1.255.0/24 eq 32,
10.2.255.0/24 eq 32
end-set
!
route-policy RP_IPV4_BGP_LU
if destination in PS_IPV4_BGP_LU_LOOPBACKS then
pass
endif
end-policy
!
router static
address-family ipv4 unicast
194.0.2.0/32 GigabitEthernet0/0/0/0.23
!
!
router bgp 65002
bgp router-id 10.2.255.3
mpls activate
interface GigabitEthernet0/0/0/0.23
!
bgp log neighbor changes detail
address-family ipv4 unicast
allocate-label route-policy RP_IPV4_BGP_LU
!
neighbor 194.0.2.0
remote-as 65001
address-family ipv4 labeled-unicast
send-community-ebgp
route-policy RP_IPV4_BGP_LU in
route-policy RP_IPV4_BGP_LU out
send-extended-community-ebgp
!
!
neighbor 10.2.255.4
remote-as 65002
update-source Loopback0
address-family ipv4 labeled-unicast
next-hop-self
!
!
!
end

SR2 XR4

A:SR2>edit-cfg# candidate view
==============================
configure
router
autonomous-system 65001
bgp
router-id 10.1.255.2
next-hop-resolution
label-route-transport-tunnel
family label-ipv4
resolution-filter
ldp
exit
resolution any
exit
exit
exit
group “eBGP_LU”
family label-ipv4
peer-as 65002
local-address 194.0.2.0
advertise-inactive
neighbor 194.0.2.1
exit
exit
group “iBGP_LU”
family label-ipv4
next-hop-self
peer-as 65001
local-address 10.1.255.2
advertise-inactive
neighbor 10.1.255.1
exit
exit
no shutdown
exit
exit
exit
==============================

RP/0/0/CPU0:XR4#show run
!
prefix-set PS_IPV4_BGP_LU_LOOPBACKS
10.1.255.0/24 eq 32,
10.2.255.0/24 eq 32
end-set
!
route-policy RP_IPV4_BGP_LU
if destination in PS_IPV4_BGP_LU_LOOPBACKS then
pass
endif
end-policy
!
router bgp 65002
bgp router-id 10.2.255.4
bgp log neighbor changes detail
address-family ipv4 unicast
network 10.2.255.4/32
allocate-label route-policy RP_IPV4_BGP_LU
!
neighbor 10.2.255.3
remote-as 65002
update-source Loopback0
address-family ipv4 labeled-unicast
next-hop-self
!
!
!
end

Again, we have already done the comprehensive explanation of BGP Labeled Unicast (BGP-LU) configuration and verification. There are two things that we are going to check now. The first one is the content of BGP Local-RIB:

A:SR1# show router bgp routes label-ipv4
===============================================================================
BGP Router ID:10.1.255.1       AS:65001       Local AS:65001
===============================================================================
Legend –
Status codes : u – used, s – suppressed, h – history, d – decayed, * – valid
.              l – leaked, x – stale, > – best, b – backup, p – purge
Origin codes : i – IGP, e – EGP, ? – incomplete
===============================================================================
BGP Routes
===============================================================================
Flag  Network                                          LocalPref   MED
.     Nexthop (Router)                                 Path-Id     Label
.     As-Path
——————————————————————————-
u*>i 10.2.255.4/32                                     100         None
.    10.1.255.2                                        None        262141
.    65002
——————————————————————————-
Routes : 1
===============================================================================
!
!
A:SR2# show router bgp routes label-ipv4
===============================================================================
BGP Router ID:10.1.255.2 AS:65001 Local AS:65001
===============================================================================
Legend –
Status codes : u – used, s – suppressed, h – history, d – decayed, * – valid
.              l – leaked, x – stale, > – best, b – backup, p – purge
Origin codes : i – IGP, e – EGP, ? – incomplete
===============================================================================
BGP Routes
===============================================================================
Flag  Network                                          LocalPref   MED
.     Nexthop (Router)                                 Path-Id     Label
.     As-Path
——————————————————————————-
*i    10.1.255.1/32                                    100         None
.     10.1.255.1                                       None        262142
.     No As-Path
u*>i  10.2.255.4/32                                    None        None
.     194.0.2.1                                        None        24000
.     65002
——————————————————————————-
Routes : 2
===============================================================================
!
!
RP/0/0/CPU0:XR3#show bgp ipv4 labeled-unicast labels
Status codes: s suppressed, d damped, h history, * valid, > best
.             i – internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i – IGP, e – EGP, ? – incomplete
.  Network            Next Hop        Rcvd Label      Local Label
*> 10.1.255.1/32      194.0.2.0       262141          24003
*>i10.2.255.4/32      10.2.255.4      3               24000
Processed 2 prefixes, 2 paths
!
!
RP/0/0/CPU0:XR4#show bgp ipv4 labeled-unicast labels
Status codes: s suppressed, d damped, h history, * valid, > best
.             i – internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i – IGP, e – EGP, ? – incomplete
.  Network            Next Hop        Rcvd Label      Local Label
*>i10.1.255.1/32      10.2.255.3      24003           24001
*> 10.2.255.4/32      0.0.0.0         nolabel         3
Processed 2 prefixes, 2 paths

The long output above provides you information about MPLS labels assigned for system interface at Nokia SR1 and loopback 0 at Cisco XR4 distributers. Another thing I want to show you is test of end-to-end reachability between SR1 and XR4. Here is the basic ping for that:

A:SR1# ping 10.2.255.4 source 10.1.255.1 count 1
PING 10.2.255.4 56 data bytes
64 bytes from 10.2.255.4: icmp_seq=1 ttl=255 time=191ms.
—- 10.2.255.4 PING Statistics —-
1 packet transmitted, 1 packet received, 0.00% packet loss
round-trip min = 191ms, avg = 191ms, max = 191ms, stddev = 0.000ms

And here is the packet capture:

The difference in number of packets at the link XR3-XR4 is result of PHP (penultimate hop popping) behavior of MPLS LSP at Cisco (link).

Now we have established end-to-end hierarchical MPLS LSP that spans two separate network domains (Nokia/ISIS/RSVP-TE and Cisco/OSPF/LDP). The latest building block for this solution is MPLS L3VPN itself, which will finalize inter-AS BGP/MPLS IP VPN Option-C.

Inter-AS MPLS L3 VPN / Service layer

As I usually do in my series, I’ll provide you the working solution both for IPv4 and IPv6 addresses, as we have finally reach the time, when IPv6 is starting coming into play. From the service configuration point of view, we have VPRN/VRF instances only at Nokia (Alcatel-Lucent) SR OS SR1 router and Cisco IOS XR XR4 router, and these two routers are interconnected by BGP VPNv4/VPNv6 session to exchange that routing information.

During making configuration don’t forget to enable eBGP-multihop function for your VPNv4/VPNv6 session, as you make external BGP peering, not internal, what we were mainly doing in previous labs (link). Here is the configuration itself:

Nokia (Alcatel-Lucent) SR OS Cisco IOS XR
SR1 XR4

A:SR1>edit-cfg# candidate view
==============================
configure
router
policy-option
begin
community “CL_VPN_AS65002_IN” members “target:65001:100”
community “CL_VPN_AS65002_OUT” members “target:65002:100”
policy-statement “RP_BGP_VPN_IN”
entry 10
description “VPN from AS 65002”
from
community “CL_VPN_AS65002_IN”
exit
action accept
exit
exit
default-action drop
exit
exit
policy-statement “RP_BGP_VPN_OUT”
entry 10
description “VPN to AS 65002”
from
community “CL_VPN_AS65002_OUT”
exit
action accept
exit
exit
default-action drop
exit
exit
commit
exit
bgp
next-hop-resolution
label-route-transport-tunnel
family label-ipv4
resolution-filter
ldp
exit
resolution any
exit
exit
exit
group “eBGP_VPN”
family vpn-ipv4 vpn-ipv6
multihop 255
import “RP_BGP_VPN_IN”
export “RP_BGP_VPN_OUT”
peer-as 65002
local-address 10.1.255.1
neighbor 10.2.255.4
exit
exit
exit
exit
exit
==============================

RP/0/0/CPU0:XR3#show run
!
vrf CUST100
address-family ipv4 unicast
import route-target
65002:100
!
export route-target
65001:100
!
!
address-family ipv6 unicast
import route-target
65002:100
!
export route-target
65001:100
!
!
!
interface Loopback100
vrf CUST100
ipv4 address 192.168.2.1 255.255.255.0
ipv6 address fc00::192:168:2:1/112
!
route-policy RP_BGP_VPN_AS65001_IN
if extcommunity rt matches-any (ios-regex ‘65002:.*’) then
pass
endif
end-policy
!
route-policy RP_BGP_VPN_AS65001_OUT
if extcommunity rt matches-any (ios-regex ‘65001:.*’) then
pass
endif
end-policy
!
router bgp 65002
address-family vpnv4 unicast
!
address-family vpnv6 unicast
!
neighbor 10.1.255.1
remote-as 65001
ebgp-multihop 255
update-source Loopback0
address-family vpnv4 unicast
route-policy RP_BGP_VPN_AS65001_IN in
route-policy RP_BGP_VPN_AS65001_OUT out
!
address-family vpnv6 unicast
route-policy RP_BGP_VPN_AS65001_IN in
route-policy RP_BGP_VPN_AS65001_OUT out
!
!
vrf CUST100
rd 10.2.255.4:100
address-family ipv4 unicast
redistribute connected
!
address-family ipv6 unicast
redistribute connected
!
!
!
end

Main discussion about configuration of BGP/MPLS IP VPNs was already done, so for the most of details I invite you to read that article (link).

The most interesting thing here is the filtering of prefixes, which are announced between ASes. Typicaly we don’t do it inside one AS, but you will definitely want to do it, when you peer with someone else. We have already done similar filtering previously for standard communities (link). The only difference in extended communities that you need to define community type and explicitely stress in Cisco IOS XR that communities are extended. Everything other should be familiar to you, so we go for checks.
First of all, make sure that you have established BGP for the correct address-family between correct neighbors. At Nokia (Alcatel-Lucent) SR OS side you do it with very basic command that shows you all configured BGP peering:

A:SR1# show router bgp summary
===============================================================================
BGP Summary
===============================================================================
Legend : D – Dynamic Neighbor
===============================================================================
Neighbor
Description
.                  AS PktRcvd InQ  Up/Down   State|Rcv/Act/Sent (Addr Family)
PktSent OutQ
——————————————————————————-
10.1.255.2
.               65001      95    0 00h45m49s 1/1/1 (Lbl-IPv4)
.                          95    0
10.2.255.4
.               65002       8    0 00h02m15s 1/1/2 (VpnIPv4)
.                           8    0           1/1/2 (VpnIPv6)
——————————————————————————-

In Cisco IOS XR you have to issue the similar command several times, once per corresponding address family:

RP/0/0/CPU0:XR4#show bgp vpnv4 unicast summary
Neighbor        Spk    AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down  St/PfxRcd
10.1.255.1        0 65001      10      10        6    0    0  00:03:11         1
!
!
RP/0/0/CPU0:XR4# show bgp vpnv6 unicast summary
Neighbor        Spk    AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down  St/PfxRcd
10.1.255.1        0 65001      11      11        3    0    0  00:03:59         1

Now let’s check, if we have routes installed in VPRN/VRF routing tables. For IPv4 address for both vendors being tested (Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR) it looks like as follows:

A:SR1# show router 100 route-table ipv4
===============================================================================
Route Table (Service: 100)
===============================================================================
Dest Prefix[Flags]                            Type    Proto     Age        Pref
.     Next Hop[Interface Name]                                     Metric
——————————————————————————-
192.168.1.0/24                                Local   Local     00h25m24s  0
.     CUST100                                                      0
192.168.2.0/24                                Remote  BGP VPN   00h02m07s  170
.     10.2.255.4 (tunneled:BGP)                                    0
——————————————————————————-
No. of Routes: 2
!
!
RP/0/0/CPU0:XR4#show route vrf CUST100
B    192.168.1.0/24 [20/0] via 10.1.255.1 (nexthop in vrf default), 00:13:43
C    192.168.2.0/24 is directly connected, 00:03:50, Loopback100
L    192.168.2.1/32 is directly connected, 00:03:50, Loopback100

For IPv6 address you just add “ipv6” as a key word:

A:SR1# show router 100 route-table ipv6
===============================================================================
IPv6 Route Table (Service: 100)
===============================================================================
Dest Prefix[Flags]                            Type    Proto     Age        Pref
.     Next Hop[Interface Name]                                     Metric
——————————————————————————-
fc00::192:168:1:0/112                         Local   Local     00h00m46s  0
.     CUST100                                                      0
fc00::192:168:2:0/112                         Remote  BGP VPN   00h02m10s  170
.     10.2.255.4 (tunneled:BGP)                                    0
——————————————————————————-
No. of Routes: 2
!
!
RP/0/0/CPU0:XR4#show route vrf CUST100 ipv6
B    fc00::192:168:1:0/112
.     [20/0] via ::ffff:10.1.255.1 (nexthop in vrf default), 00:02:33
C    fc00::192:168:2:0/112 is directly connected,
.     00:04:19, Loopback100
L    fc00::192:168:2:1/128 is directly connected,
.     00:04:19, Loopback100

As the routing tables are populated in all the VRFs, the last thing we need to do is to check, what labels are used for this VPN. At Nokia (Alcatel-Lucent) SR OS part we do it by reviewing the information in BGP RIB for VPNv4/VPNv6 address family:

A:SR1# show router bgp routes vpn-ipv4
===============================================================================
BGP Router ID:10.1.255.1 AS:65001 Local AS:65001
===============================================================================
Legend –
Status codes : u – used, s – suppressed, h – history, d – decayed, * – valid
.              l – leaked, x – stale, > – best, b – backup, p – purge
Origin codes : i – IGP, e – EGP, ? – incomplete
===============================================================================
BGP VPN-IPv4 Routes
===============================================================================
Flag  Network                                          LocalPref   MED
.     Nexthop (Router)                                 Path-Id     Label
.     As-Path
——————————————————————————-
u*>?  10.2.255.4:100:192.168.2.0/24                    None        0
.     10.2.255.4                                       None        24002
.     65002
——————————————————————————-
Routes : 1
===============================================================================
!
!
A:SR1# show router bgp routes vpn-ipv6
===============================================================================
BGP Router ID:10.1.255.1 AS:65001 Local AS:65001
===============================================================================
Legend –
Status codes : u – used, s – suppressed, h – history, d – decayed, * – valid
l – leaked, x – stale, > – best, b – backup, p – purge
Origin codes : i – IGP, e – EGP, ? – incomplete
===============================================================================
BGP VPN-IPv6 Routes
===============================================================================
Flag  Network                                          LocalPref   MED
.     Nexthop (Router)                                 Path-Id     Label
.     As-Path
——————————————————————————-
u*>?  10.2.255.4:100:fc00::192:168:2:0/112             None        0
.     ::ffff:10.2.255.4                                None        24003
.     65002
——————————————————————————-
Routes : 1
===============================================================================

What about Cisco IOS XR? The answer is straightforward; we should do the same:

RP/0/0/CPU0:XR4#show bgp vpnv4 unicast vrf CUST100 labels
Status codes: s suppressed, d damped, h history, * valid, > best
.             i – internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i – IGP, e – EGP, ? – incomplete
.  Network            Next Hop        Rcvd Label      Local Label
Route Distinguisher: 10.2.255.4:100 (default for vrf CUST100)
*> 192.168.1.0/24     10.1.255.1      262141          nolabel
*> 192.168.2.0/24     0.0.0.0         nolabel         24002
Processed 2 prefixes, 2 paths
!
!
RP/0/0/CPU0:XR4#show bgp vpnv6 unicast vrf CUST100 labels
Status codes: s suppressed, d damped, h history, * valid, > best
.             i – internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i – IGP, e – EGP, ? – incomplete
.  Network            Next Hop        Rcvd Label      Local Label
Route Distinguisher: 10.2.255.4:100 (default for vrf CUST100)
*> fc00::192:168:1:0/112
.                     10.1.255.1      262141          nolabel
*> fc00::192:168:2:0/112
.                     ::              nolabel         24003
Processed 2 prefixes, 2 paths

Now we are sure that inter-AS BGP/MPLS IP VPN option C is configured between Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR routes. Now we can make some traffic simulation to see the life of the packet on the wire. Let’s do it! IPv4 comes first:

A:SR1# ping router 100 192.168.2.1 source 192.168.1.1 count 1
PING 192.168.2.1 56 data bytes
64 bytes from 192.168.2.1: icmp_seq=1 ttl=255 time=6.47ms.
—- 192.168.2.1 PING Statistics —-
1 packet transmitted, 1 packet received, 0.00% packet loss
round-trip min = 6.47ms, avg = 6.47ms, max = 6.47ms, stddev = 0.000ms

This command results in the following trace:

Though we have discussed similar outputs in previous articles (link), let’s briefly review it again, as it’s vital for understanding of the overall process. Forward path SR1->XR4:

Backward path XR4->SR1 also show differences between Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR in terms of PHP and label processing:

Here is the example for IPv6:

A:SR1# ping router 100 fc00::192:168:2:1 source fc00::192:168:1:1 count 1
PING fc00::192:168:2:1 56 data bytes
64 bytes from fc00::192:168:2:1 icmp_seq=1 hlim=64 time=27.4ms.
—- fc00::192:168:2:1 PING Statistics —-
1 packet transmitted, 1 packet received, 0.00% packet loss
round-trip min = 27.4ms, avg = 27.4ms, max = 27.4ms, stddev = 0.000ms

And its trace:

That’s it. The final configuration you can find in the following links:

Lessons learned

In the beginning I’ve tried to use SPRING (segment routing) as a MPLS transport technology in one of the domains, but it was unsuccessful. I’ve received the following syslog message in Cisco IOS XRv:

ROUTING-RIB-3-LABEL_ERR_ADD

One of the first links, which I have found, led me to the description of the bug at Cisco’s website (link). Here is the explanation:

If the router has learned a label from BGP Labeled-Unicast in addition to the ISIS segment-routing label a “local-label conflict” can occur leaving the forwarding table out of sync with the routing table for the tunnel destination prefix.

Well, I’ve started to thinking about the root cause of the issue. After having spent some time, I’ve realized, why it so. Take a look at LDP binding for prefix of XR4 and BGP label announced to SR2 from XR3 (Cisco IOS XR router) prospective:

RP/0/0/CPU0:XR3#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
—— ———– —————— ———— ————— ————
24003  Pop         194.0.2.0/32       Gi0/0/0/0.23 194.0.2.0       3173
24004  Pop         10.2.255.4/32      Gi0/0/0/0.34 10.2.0.1        127750
24005  262141      10.1.255.1/32      Gi0/0/0/0.23 194.0.2.0       0
!
!
RP/0/0/CPU0:XR3#show bgp ipv4 labeled-unicast labels
Status codes: s suppressed, d damped, h history, * valid, > best
.             i – internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i – IGP, e – EGP, ? – incomplete
.  Network            Next Hop        Rcvd Label      Local Label
*> 10.1.255.1/32      194.0.2.0       262141          24005
*>i10.2.255.4/32      10.2.255.4      3               24004
Processed 2 prefixes, 2 paths

Both labels have the same value, or more precisely, it’s just the same label. Both Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR implements per platform address space, what means that independently of the ingress interface the MPLS label ultimately is mapped to one egress interface (and destination prefix). In case of SPRING (Segment routing) we separate MPLS label space for the prefixes to be used solely for segment routing. In Nokia (Alcatel-Lucent) SR OS there is no preconfigure address space and we define it manually ourselves, whereas in Cisco IOS XR this value lays in the range from 16000 till 23999. In Cisco IOS XR the labels allocated by BGP starts from the value of 24000. It results in two separated values for the same prefix (destination IP address). XR4 announces its loopback 0 via OSPF (including Segment Routing SID) and internal BGP-LU (including MPLS label). Segment routing has higher preference than BGP-LU in terms of installing label in LFIB, what results in SPRIN label being installed there. Meanwhile the MPLS label learned from BGP is announced further to SR2 effectively breaking end-to-end MPLS LSP between SR2 and XR4, due to the fact that XR3 doesn’t know what to do with incoming from SR2 packet, as there is no such label in XR3’s LFIB

In Nokia (Alcatel-Lucent) SR OS we can modify the preference for the SPRING labels, so that iBGP MPLS label is installed in the LFIB. But it doesn’t solve the problem, rather moves it from PE to P router, which doesn’t BGP and has only SPRING labels

Conclusion

We have covered all the possibly options for BGP/MPLS IP VPNs in terms of using technologies. There were: intra-AS L3VPN (link), inter-AS option B L3VPN (link) and now inter-AS option C L3VPN. I hope you enjoy these articles and they are useful bookmarks for the references.

Meanwhile I’m moving further and will cover another topics regarding joint operation of Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR in the communication service provider (CSP) networks.

Support us





BR,

Anton Karneliuk

Exit mobile version