Friday, November 30, 2018

CCIE SPv4 MPLS L2VPN VPLS BGP-AD LDP Signaling Inter AS Option B

In this post we will be taking a look at Inter AS Option B for VPLS. I have to say, this was probably one of the most complicated L2VPN configurations I have dealt with thus far. There are a lot of moving parts and at first, it didn't work, one side of the topology would appear to be working but the other side would not. It made for some very tedious troubleshooting, rebuilding the lab a couple times due to reloading several CSRs after all the logical troubleshooting had been exhausted. I will be laying out all of the configuration I "threw" at the lab to get it to work.

Unlike Option A, where we are able to terminate the PWs at the ASBR and leverage the connection between the ASBRs as an AC. Option A is the easiest transition to any Inter AS design, L2 and L3 in my opinion. Option B is not so easy and very unforgiving if something isn't correctly configured. One key thing that I noticed was that if the PE to PE PWs that form when things are working, won't form if end to end connectivity isn't working correctly, it becomes a node by node troubleshooting scenario that becomes time consuming.

Like L3 VPN, there are 3 separate LSPs connecting the PEs together. PE to ASBR, ASBR to ASBR and ASBR to PE. Unline L3 VPN, tracing from the PE to PE or CE to CE doesn't expose the label binding or LSPs, since we are creating transparent L2 connectivity between two ISPs, we have to trace and ping between PEs to accomplish this. We'll focus on the verification at the end.

The logic we use for Intra AS VPLS still applies, so if you have an existing VPLS deployment, you can leverage that to play with Inter AS Option B. Some key things that need to be added, the ASBR to ASBR connectivity needs to be MPLS enabled, I added "mpls ip", "mpls bgp forwarding" and "mpls ldp discovery transport-address interface" to the interface facing the ASBRs. An eBGP L2VPN VPLS peering had to be created to allow the ASBRs to exchange BGP info from between the ASNs. MPLS needs to be enabled on the connected link, "mpls ip" does this. The ASBR need to be able to send/accept labeled packets over the configured interface, "mpls bgp forwarding" does this. The last command, "mpls ldp discovery transport-address interface" changes the discovery address from the loopback to the connected interface enabling LDP to form the adjacency. The last MPLS command that needs to be added is "mpls ldp discovery targeted-hello accept" which will allow multi-hop LDP peerings to be created, which will be needed for the PE to PE tLDP peerings.

The L2VPN configuration, normally the VFI configuration is enough, for Intra AS, but for Inter AS, there are some additional things that need to be added. On the PEs, we need to enable PW routing, specifically, "terminating-pe tie breaker", both PEs will be in active mode when forming the multi-segment PWs, with Option B, one of the two PEs needs to be in passive mode, the system determines this based on the TAII from BGP and the SAII in LDP from the local router. I applied the command to all PEs and ASBRs. On the ASBRs I applied the additional command "switching-point vcid 1 200000" which is used to switch between the MS PW setup. This is similar to creating an "xconnect context" and calling two PWs to allow manual MSPW to allow 2 PEs to form an end to end LSP for a L2 connection for the CEs.

Additionally a template was used on the PEs and ASBRs and applied to the L2VPN construct to provide consistent PW attributes.


In the above topology, CSR1, CSR4, CSR10, CSR11 and CSR12 (PEs); CSR2 and CSR14 (ASBR) are configured. I will show you the configs from CSR1, CSR2 and CSR11 since there is so much repeated configuration. Then we'll dive into the verification. ISP 1 is BGP 100 and ISP 2 is BGP 200. The routers in ISP 100 use VPN ID 100 and VPLS ID 100:200. The routers in ISP 200 use VPN ID 200 and VPLS ID 100:200. To ensure I would import the correct info, I made sure to import the variations of the RT that might be seen. After configuration is complete, it may be required to hard clear BGP, I needed to do this to get the PWs to form between the PEs.


CSR1
!
mpls ldp discovery targeted-hello accept
!
l2vpn
 pseudowire routing
  terminating-pe tie-breaker
!
l2vpn vfi context VPLS
 vpn id 100
 autodiscovery bgp signaling ldp template TMP_VPLS
  vpls-id 100:200
  route-target import 100:100
  route-target import 200:200
  route-target import 100:200
!
template type pseudowire TMP_VPLS
 encapsulation mpls
 sequencing both
 control-word include
!
bridge-domain 1
 member GigabitEthernet3 service-instance 1
 member vfi VPLS
!       
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
 ip router isis 1
!
interface GigabitEthernet1
 ip address 10.1.13.1 255.255.255.0
 ip router isis 1
 negotiation auto
!
interface GigabitEthernet3
 no ip address
 negotiation auto
 service instance 1 ethernet
  encapsulation default
!       
router isis 1
 net 00.0000.0000.0001.00
 mpls ldp autoconfig
!
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 1.1.1.5 remote-as 100
 neighbor 1.1.1.5 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 1.1.1.5 activate
  neighbor 1.1.1.5 send-community extended
 exit-address-family
 !
 address-family l2vpn vpls
  neighbor 1.1.1.5 activate
 exit-address-family


CSR2 (ASBR)
!
mpls ldp discovery targeted-hello accept
!
l2vpn
 logging pseudowire status
 redundancy predictive enabled
 pseudowire routing
  switching-point vcid 1 200000
  terminating-pe tie-breaker
!
interface Loopback0
 ip address 1.1.1.2 255.255.255.255
 ip router isis 1
!
interface GigabitEthernet1
 ip address 10.2.11.2 255.255.255.0
 ip router isis 1
 negotiation auto
!
interface GigabitEthernet4
 ip address 90.2.14.2 255.255.255.0
 negotiation auto
 mpls ip
 mpls ldp discovery transport-address interface
 mpls bgp forwarding
!
router isis 1
 net 00.0000.0000.0002.00
 mpls ldp autoconfig
!
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 1.1.1.5 remote-as 100
 neighbor 1.1.1.5 update-source Loopback0
 neighbor 90.2.14.14 remote-as 200
 !
 address-family ipv4
 exit-address-family
 !
 address-family l2vpn vpls
  no bgp default route-target filter
  neighbor 1.1.1.5 activate
  neighbor 1.1.1.5 next-hop-self
  neighbor 90.2.14.14 activate
 exit-address-family



CSR11
!
mpls ldp discovery targeted-hello accept
!
!
multilink bundle-name authenticated
l2vpn
 logging pseudowire status
 pseudowire routing
  terminating-pe tie-breaker
!
l2vpn vfi context VPLS
 vpn id 200
 autodiscovery bgp signaling ldp template TMP_VPLS
  vpls-id 100:200
  route-target import 200:200
  route-target import 100:100
  route-target import 100:200
!
template type pseudowire TMP_VPLS
 encapsulation mpls
 sequencing both
 control-word include
!
redundancy
bridge-domain 200
 member GigabitEthernet3 service-instance 1
 member vfi VPLS
!
interface Loopback0
 ip address 2.2.2.11 255.255.255.255
!
interface GigabitEthernet1
 ip address 10.11.10.11 255.255.255.0
 negotiation auto
!
interface GigabitEthernet3
 no ip address
 negotiation auto
 service instance 1 ethernet
  encapsulation default
!
router ospf 1
 network 2.2.2.0 0.0.0.255 area 0
 network 10.0.0.0 0.255.255.255 area 0
 mpls ldp autoconfig
!
router bgp 200
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 2.2.2.14 remote-as 200
 neighbor 2.2.2.14 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family l2vpn vpls
  neighbor 2.2.2.14 activate
 exit-address-family


CSR1#show l2vpn atom vc

                                       Service
Interface Peer ID         VC ID      Type   Name                     Status
--------- --------------- ---------- ------ ------------------------ ----------
pw100003  1.1.1.4         100        vfi    VPLS                     UP     
pw100004  2.2.2.10        100        vfi    VPLS                     UP     
pw100006  2.2.2.11        100        vfi    VPLS                     UP     
pw100005  2.2.2.12        100        vfi    VPLS                     UP     



CSR1#show bridge-domain 1
Bridge-domain 1 (5 ports in all)
State: UP                    Mac learning: Enabled
Aging-Timer: 300 second(s)
    GigabitEthernet3 service instance 1
    vfi VPLS neighbor 1.1.1.4 100
    vfi VPLS neighbor 2.2.2.10 100
    vfi VPLS neighbor 2.2.2.12 100
    vfi VPLS neighbor 2.2.2.11 100
   AED MAC address    Policy  Tag       Age  Pseudoport
   0   5000.001F.0001 forward dynamic   297  VPLS.1004014
   0   5000.0022.0000 forward dynamic   299  VPLS.1004015
   0   5000.0019.0001 forward dynamic   297  VPLS.1004012
   0   5000.0018.0001 forward dynamic   298  GigabitEthernet3.EFP1
   0   5000.0021.0001 forward dynamic   296  VPLS.1004013



CSR2#          show l2vpn atom vc

                                       Service
Interface Peer ID         VC ID      Type   Name                     Status
--------- --------------- ---------- ------ ------------------------ ----------
pw100009  1.1.1.1         1          p2p    mpls 2.2.2.10:1          UP     
pw100007  1.1.1.1         2          p2p    mpls 2.2.2.11:2          UP     
pw100011  1.1.1.1         4          p2p    mpls 2.2.2.12:4          UP     
pw100001  1.1.1.4         1          p2p    mpls 2.2.2.11:1          UP     
pw100003  1.1.1.4         2          p2p    mpls 2.2.2.10:2          UP     
pw100005  1.1.1.4         3          p2p    mpls 2.2.2.12:3          UP     
pw100010  2.2.2.10        1          p2p    mpls 2.2.2.10:1          UP     
pw100004  2.2.2.10        2          p2p    mpls 2.2.2.10:2          UP     
pw100002  2.2.2.11        1          p2p    mpls 2.2.2.11:1          UP     
pw100008  2.2.2.11        2          p2p    mpls 2.2.2.11:2          UP     
pw100006  2.2.2.12        3          p2p    mpls 2.2.2.12:3          UP     
pw100012  2.2.2.12        4          p2p    mpls 2.2.2.12:4          UP     



CSR11#show l2vpn atom vc

                                       Service
Interface Peer ID         VC ID      Type   Name                     Status
--------- --------------- ---------- ------ ------------------------ ----------
pw100018  1.1.1.1         200        vfi    VPLS                     UP     
pw100014  1.1.1.4         200        vfi    VPLS                     UP     
pw100006  2.2.2.10        200        vfi    VPLS                     UP     
pw100011  2.2.2.12        200        vfi    VPLS                     UP     



CSR11#show bridge-domain 200
Bridge-domain 200 (5 ports in all)
State: UP                    Mac learning: Enabled
Aging-Timer: 300 second(s)
    GigabitEthernet3 service instance 1
    vfi VPLS neighbor 1.1.1.4 200
    vfi VPLS neighbor 2.2.2.10 200
    vfi VPLS neighbor 2.2.2.12 200
    vfi VPLS neighbor 1.1.1.1 200
   AED MAC address    Policy  Tag       Age  Pseudoport
   0   5000.001F.0001 forward dynamic   297  VPLS.100401f
   0   5000.0019.0001 forward dynamic   299  VPLS.100401d
   0   5000.0018.0001 forward dynamic   297  VPLS.1004020
   0   5000.0022.0000 forward dynamic   298  GigabitEthernet3.EFP1
   0   5000.0021.0001 forward dynamic   300  VPLS.100401e



IOSv1 (CE)
router eigrp 1
 network 10.1.1.0 0.0.0.255


IOSV1#show ip eigrp nei
EIGRP-IPv4 Neighbors for AS(1)
H   Address                 Interface              Hold Uptime   SRTT   RTO  Q  Seq
                                                   (sec)         (ms)       Cnt Num
3   10.1.1.7                Gi0/1                    12 02:25:49 1371  5000  0  24
2   10.1.1.9                Gi0/1                    14 02:25:49  134   804  0  22
1   10.1.1.10               Gi0/1                    12 02:25:49  128   768  0  3146
0   10.1.1.2                Gi0/1                    12 02:25:49  302  1812  0  3345



CSR1#ping mpls pseudowire 2.2.2.10 100
%Total number of MS-PW segments is less than segment number; Adjusting the segment number to 3
Sending 5, 72-byte MPLS Echos to 2.2.2.10,
     timeout is 2 seconds, send interval is 0 msec:

Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
  'L' - labeled output interface, 'B' - unlabeled output interface,
  'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
  'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
  'P' - no rx intf label prot, 'p' - premature termination of LSP,
  'R' - transit router, 'I' - unknown upstream index,
  'l' - Label switched with FEC change, 'd' - see DDMAP for return code,
  'X' - unknown return code, 'x' - return code 0

Type escape sequence to abort.
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 57/152/289 ms
 Total Time Elapsed 800 ms



CSR1#traceroute mpls pseudowire 2.2.2.10 100 segment 3
Tracing MS-PW segments within range [1-3] peer address 2.2.2.10 and timeout 2 seconds

Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
  'L' - labeled output interface, 'B' - unlabeled output interface,
  'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
  'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
  'P' - no rx intf label prot, 'p' - premature termination of LSP,
  'R' - transit router, 'I' - unknown upstream index,
  'l' - Label switched with FEC change, 'd' - see DDMAP for return code,
  'X' - unknown return code, 'x' - return code 0

Type escape sequence to abort.
L 1 10.2.11.2 55 ms [Labels: 40 Exp: 0]
    local 1.1.1.1 remote 2.2.2.10 vc id 100

L 2 90.2.14.14 115 ms [Labels: 41 Exp: 0]
    local 1.1.1.2 remote 2.2.2.14 vc id 1

! 3 10.10.10.10 105 ms [Labels: 25 Exp: 0]
    local 2.2.2.14 remote 2.2.2.10 vc id 1


Thanks for stopping by!
Rob Riker, CCIE #50693

No comments:

Post a Comment