VLAN-Based Layer 2 Circuits with EoMPLS and l2circuit

I was recently asked to set up a LAN extension for a customer. After a spot of research, I was very impressed by this particular method which I've illustrated below.

Based on IETF RFC 4447 (Pseudowire Setup and Maintenance Using the Label Distribution Protocol).

 

Layer 2 services (such as Frame Relay, Asynchronous Transfer Mode, and Ethernet) can be "emulated" over an MPLS backbone by encapsulating the Layer 2 Protocol Data Units (PDU) and transmitting them over "pseudowires".

 

The service provider network is coloured orange and represents four towns/cities.
The customer network is coloured green with one site in Llanelli and one in Cardiff.

Goal
Extend the 10.77.11.0/24 network from Llanelli to Cardiff.

 

 

The end result should look like this when pinging the Llanelli site from Cardiff:

TurboKart-LLA#show ip int br
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            unassigned      YES NVRAM  administratively down down    
GigabitEthernet1/0         unassigned      YES NVRAM  up                    up      
GigabitEthernet1/0.11      10.77.11.1      YES NVRAM  up                    up      
GigabitEthernet2/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet3/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet4/0         unassigned      YES NVRAM  administratively down down    

TurboKart-LLA#ping 10.77.11.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.77.11.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/594/1012 ms

 

I'm using vMX 18.2R1.9 for the service provider network. You can get a free trial from Juniper's website.
The customer network employs version 15.2 of the trusty C7200-ADVENTERPRISEK9-M.

 

Configuring the service provider network
vMX is a hungry beast, requiring 2GB of RAM for the virtual control plane and 4GB for the virtual forwarding plane so, first things first, we'll configure the FPC for lite-mode. This reduces the requirement to 1GB and 2GB, respectively:

set chassis fpc 0 lite-mode

 

Next, pop an address on the loopback and then IP the core facing interfaces. Nothing fancy here. Enable the MPLS family on each interface, too:

set interfaces lo0 unit 0 family inet address 172.16.99.1/32
set interfaces lo0 unit 0 family mpls

set interfaces ge-0/0/1 unit 0 family inet address 10.10.1.1/24
set interfaces ge-0/0/1 unit 0 family mpls

set interfaces ge-0/0/2 unit 0 family inet address 10.10.2.1/24
set interfaces ge-0/0/2 unit 0 family mpls

 

Next, enable OSPF, LDP and MPLS under the protocols stanza:

set protocols mpls interface lo0.0
set protocols mpls interface ge-0/0/1.0
set protocols mpls interface ge-0/0/2.0
 
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/1.0
set protocols ospf area 0.0.0.0 interface ge-0/0/2.0

set protocols ldp interface ge-0/0/1.0
set protocols ldp interface ge-0/0/2.0
set protocols ldp interface lo0.0

 

That's the core configuration wrapped up. Repeat for all four routers, tweaking the IPs.

 

Configuring the access ports
For the customer-specific configuration, we'll need to configure an access port at each BT exchange (Llanelli and Cardiff) and a pseudowire (l2circuit) to transport the contents of that access port/VLAN to the other site. In this instance, we transport seven VLANs; 10 - 16. The following additional config is required:

 

Llanelli Exchange

set interfaces ge-0/0/3 description "Access port"
set interfaces ge-0/0/3 flexible-vlan-tagging
set interfaces ge-0/0/3 encapsulation flexible-ethernet-services
set interfaces ge-0/0/3 unit 1000 description "TurboKart - Llanelli"
set interfaces ge-0/0/3 unit 1000 encapsulation vlan-ccc
set interfaces ge-0/0/3 unit 1000 vlan-id-range 10-16

set protocols l2circuit neighbor 172.16.99.4 interface ge-0/0/3.1000 virtual-circuit-id 1000
set protocols l2circuit neighbor 172.16.99.4 interface ge-0/0/3.1000 encapsulation-type ethernet
set protocols l2circuit neighbor 172.16.99.4 interface ge-0/0/3.1000 ignore-mtu-mismatch

 

Cardiff Exchange

set interfaces ge-0/0/3 description "Access port"
set interfaces ge-0/0/3 flexible-vlan-tagging
set interfaces ge-0/0/3 encapsulation flexible-ethernet-services
set interfaces ge-0/0/3 unit 1000 description "TurboKart - Cardiff"
set interfaces ge-0/0/3 unit 1000 encapsulation vlan-ccc
set interfaces ge-0/0/3 unit 1000 vlan-id-range 10-16

set protocols l2circuit neighbor 172.16.99.1 interface ge-0/0/3.1000 virtual-circuit-id 1000
set protocols l2circuit neighbor 172.16.99.1 interface ge-0/0/3.1000 encapsulation-type ethernet
set protocols l2circuit neighbor 172.16.99.1 interface ge-0/0/3.1000 ignore-mtu-mismatch

 

All done, time to test.
Let's ping our fictitious customer's Llanelli site from VLAN 11 at Cardiff:

TurboKart-CAR#show ip int br    
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            unassigned      YES NVRAM  administratively down down    
GigabitEthernet1/0         unassigned      YES NVRAM  up                    up      
GigabitEthernet1/0.11      10.77.11.2      YES NVRAM  up                    up      
GigabitEthernet2/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet3/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet4/0         unassigned      YES NVRAM  administratively down down    

TurboKart-CAR#sh run int g1/0.11
Building configuration...

Current configuration : 100 bytes
!
interface GigabitEthernet1/0.11
 encapsulation dot1Q 11
 ip address 10.77.11.2 255.255.255.0
end

TurboKart-CAR#ping 10.77.11.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.77.11.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 544/816/1676 ms

Job done!

There's lots more we could do here to compliment this setup so stay tuned :)