In this part we are going to look at the L2VNI setup of the topology. This is basically the VLAN setup of the topology where we can define the vlans in use.

Lets remind ourselves of the topology:

Image

The L2VNI setup is isolated to the leaves as the spines are not involved and are not specifically configured with the underlying VNI setup.

L2VNI Configuration

In our topology, we have servers in vlan 1000 and vlan 1001. By the end of this part, the servers on the same vlan will be able to communicate at layer 2 despite being separated by layer 3 boundaries.

The L2VNI configuration is nice and simple and means it can be replicated for as many layer 2 domain as your needs require.

This is the config for the Leaves in both DCs:

vlan 1000
  vn-segment 2001000
vlan 1001
  vn-segment 2001001

interface nve1
  member vni 2001000
    suppress-arp
    mcast-group 239.0.0.1
  member vni 2001001
    suppress-arp
    mcast-group 239.0.0.1

evpn
  vni 2001000 l2
    rd auto
    route-target import auto
    route-target export auto
  vni 2001001 l2
    rd auto
    route-target import auto
    route-target export auto

The configuration above creates the vlan and assigns the vn-segment ID for the vlan, this should match across the topology for this vlan. Next, we add the vni into the nve interface and add the command to suppress arp, this is a very useful command which allows the leaves to cache mac addresses of nodes attached to prevent excessive ARP messages being sent across the fabric.

The last part of the configuration adds the vni to the evpn control plane so it can be pushed into the MP-BGP topology.

We also need to put a similar config on the Core switches too but this has some multisite specific commands in it:

vlan 1000
  vn-segment 2001000
vlan 1001
  vn-segment 2001001

interface nve1
  member vni 2001000
    multisite ingress-replication
    ingress-replication protocol bgp
  member vni 2001001
    multisite ingress-replication
    ingress-replication protocol bgp

evpn
  vni 2001000 l2
    rd auto
    route-target import auto
    route-target export auto
  vni 2001001 l2
    rd auto
    route-target import auto
    route-target export auto

This is all the config we need!

Verification

We should in theory now have layer 2 communication between the servers, lets test that fact between VL1000-PC1 and VL1000-PC2 which are in the same DC:

VPCS> show ip        

NAME        : VPCS[1]
IP/MASK     : 10.10.1.10/24
GATEWAY     : 10.10.1.254
DNS         : 
MAC         : 00:50:79:66:68:01
LPORT       : 20000
RHOST:PORT  : 127.0.0.1:30000
MTU         : 1500

VPCS> ping 10.10.1.11

84 bytes from 10.10.1.11 icmp_seq=1 ttl=64 time=12.952 ms
84 bytes from 10.10.1.11 icmp_seq=2 ttl=64 time=8.834 ms
84 bytes from 10.10.1.11 icmp_seq=3 ttl=64 time=11.593 ms
84 bytes from 10.10.1.11 icmp_seq=4 ttl=64 time=9.253 ms
84 bytes from 10.10.1.11 icmp_seq=5 ttl=64 time=8.356 ms

Success! we have layer 2 connectivity. Lets do a few commands to confirm whats happening.

We can check the arp cache on the leaves to show the flood and learn technique in action:

DC1-LEAF1# show ip arp suppression-cache vlan 1000

Flags: + - Adjacencies synced via CFSoE
       L - Local Adjacency
       R - Remote Adjacency
       L2 - Learnt over L2 interface
       PS - Added via L2RIB, Peer Sync
       RO - Dervied from L2RIB Peer Sync Entry

Ip Address      Age      Mac Address    Vlan Physical-ifindex    Flags    Remote Vtep Addrs

10.10.1.10      00:00:38 0050.7966.6801 1000 Ethernet1/3         L2
10.10.1.11      00:00:43 0050.7966.6814 1000 (null)              R        10.0.0.11      

We can see from DC1-LEAF1 we have 10.10.1.10 (VL1000-PC1) learnt locally and then 10.10.1.11 (VL1000-PC2) learnt remotely from the remote vtep of 10.0.0.11 which is DC1-LEAF2 and is where VL1000-PC2 is connected.

We can also check the BGP l2vpn evpn table for the address 10.10.1.11 on DC1-LEAF1:

DC1-LEAF1# show bgp l2vpn evpn 10.10.1.11
BGP routing table information for VRF default, address family L2VPN EVPN
Route Distinguisher: 10.0.0.9:33767    (L2VNI 2001000)
BGP routing table entry for [2]:[0]:[0]:[48]:[0050.7966.6814]:[32]:[10.10.1.11]/248, version 8
Paths: (1 available, best #1)
Flags: (0x000212) (high32 00000000) on xmit-list, is in l2rib/evpn, is not in HW

  Advertised path-id 1
  Path type: internal, path is valid, is best path, no labeled nexthop, in rib
             Imported from 10.0.0.11:33767:[2]:[0]:[0]:[48]:[0050.7966.6814]:[32]:[10.10.1.11]/248 
  AS-Path: NONE, path sourced internal to AS
    10.0.0.11 (metric 81) from 10.0.0.5 (10.0.0.5)
      Origin IGP, MED not set, localpref 100, weight 0
      Received label 2001000
      Extcommunity: RT:100:2001000 ENCAP:8
      Originator: 10.0.0.11 Cluster list: 10.0.0.5 

  Path-id 1 not advertised to any peer

Route Distinguisher: 10.0.0.11:33767
BGP routing table entry for [2]:[0]:[0]:[48]:[0050.7966.6814]:[32]:[10.10.1.11]/248, version 7
Paths: (2 available, best #2)
Flags: (0x000202) (high32 00000000) on xmit-list, is not in l2rib/evpn, is not in HW

  Path type: internal, path is valid, not best reason: Neighbor Address, no labeled nexthop
  AS-Path: NONE, path sourced internal to AS
    10.0.0.11 (metric 81) from 10.0.0.6 (10.0.0.6)
      Origin IGP, MED not set, localpref 100, weight 0
      Received label 2001000
      Extcommunity: RT:100:2001000 ENCAP:8
      Originator: 10.0.0.11 Cluster list: 10.0.0.6 

  Advertised path-id 1
  Path type: internal, path is valid, is best path, no labeled nexthop
             Imported to 1 destination(s)
             Imported paths list: L2-2001000
  AS-Path: NONE, path sourced internal to AS
    10.0.0.11 (metric 81) from 10.0.0.5 (10.0.0.5)
      Origin IGP, MED not set, localpref 100, weight 0
      Received label 2001000
      Extcommunity: RT:100:2001000 ENCAP:8
      Originator: 10.0.0.11 Cluster list: 10.0.0.5 

  Path-id 1 not advertised to any peer

Now, thats a lot of output. But, lets break it down. We can see the top route is attached to the RD 10.0.0.9:33767. We can see that it was imported from the RD 10.0.0.11:33767 which is DC1-LEAF2. This makes sense because the route originated from 10.0.0.11. The reason there is only a single route within 10.0.0.9:33767 is because only a single route from the DC1-LEAF2 RD was marked as Best and that was the one that was imported. We can verify that by looking at the Cluster list. This is the RID of the Route Reflector (a spine).

We can also see the MAC address and IP address of VL1000-PC2 in the entry to confirm its the correct mapping.

There will be an entry on DC1-LEAF2 for the IP-MAC mapping for VL1000-PC1 for the return traffic.

Note - The mac addresses are learnt as normal so a host has to communicate on the network for the leaf to grab its MAC address and advertise it. This is the role of arp suppression in flood and learn.

Now we have communication within the local DC, lets test over the DCI!

Lets ping from VL1000-PC1 to VL1000-PC3 in DC2:

VPCS> show ip        

NAME        : VPCS[1]
IP/MASK     : 10.10.1.10/24
GATEWAY     : 10.10.1.254
DNS         : 
MAC         : 00:50:79:66:68:01
LPORT       : 20000
RHOST:PORT  : 127.0.0.1:30000
MTU         : 1500

VPCS> ping 10.10.1.12

84 bytes from 10.10.1.12 icmp_seq=1 ttl=64 time=19.652 ms
84 bytes from 10.10.1.12 icmp_seq=2 ttl=64 time=18.857 ms
84 bytes from 10.10.1.12 icmp_seq=3 ttl=64 time=15.974 ms
84 bytes from 10.10.1.12 icmp_seq=4 ttl=64 time=15.716 ms
84 bytes from 10.10.1.12 icmp_seq=5 ttl=64 time=20.179 ms

And a quick look at the L2VPN BGP entry for 10.10.1.10 on a leaf in DC2:

DC2-LEAF1# show bgp l2vpn evpn 10.10.1.10
BGP routing table information for VRF default, address family L2VPN EVPN
Route Distinguisher: 200:2001000
BGP routing table entry for [2]:[0]:[0]:[48]:[0050.7966.6801]:[32]:[10.10.1.10]/248, version 163
Paths: (2 available, best #1)
Flags: (0x000202) (high32 00000000) on xmit-list, is not in l2rib/evpn, is not in HW

  Advertised path-id 1
  Path type: internal, path is valid, is best path, no labeled nexthop
             Imported to 1 destination(s)
             Imported paths list: L2-2001000
  AS-Path: 100 , path sourced external to AS
    10.222.222.1 (metric 81) from 10.0.0.7 (10.0.0.7)
      Origin IGP, MED 2000, localpref 100, weight 0
      Received label 2001000
      Extcommunity: RT:200:2001000 ENCAP:8
      Originator: 10.0.0.3 Cluster list: 10.0.0.7 

  Path type: internal, path is valid, not best reason: Neighbor Address, no labeled nexthop
  AS-Path: 100 , path sourced external to AS
    10.222.222.1 (metric 81) from 10.0.0.8 (10.0.0.8)
      Origin IGP, MED 2000, localpref 100, weight 0
      Received label 2001000
      Extcommunity: RT:200:2001000 ENCAP:8
      Originator: 10.0.0.3 Cluster list: 10.0.0.8 

  Path-id 1 not advertised to any peer

Route Distinguisher: 10.0.0.10:33767    (L2VNI 2001000)
BGP routing table entry for [2]:[0]:[0]:[48]:[0050.7966.6801]:[32]:[10.10.1.10]/248, version 171
Paths: (1 available, best #1)
Flags: (0x000212) (high32 00000000) on xmit-list, is in l2rib/evpn, is not in HW

  Advertised path-id 1
  Path type: internal, path is valid, is best path, no labeled nexthop, in rib
             Imported from 200:2001000:[2]:[0]:[0]:[48]:[0050.7966.6801]:[32]:[10.10.1.10]/248 
  AS-Path: 100 , path sourced external to AS
    10.222.222.1 (metric 81) from 10.0.0.7 (10.0.0.7)
      Origin IGP, MED 2000, localpref 100, weight 0
      Received label 2001000
      Extcommunity: RT:200:2001000 ENCAP:8
      Originator: 10.0.0.3 Cluster list: 10.0.0.7 

  Path-id 1 not advertised to any peer

We can see that the route has come from AS100 which is DC1 and its been advertised by the Route Reflectors in DC2 (Spines). The IP address (10.222.222.1) in the BGP table is the loopback100 interface of DC2-CORE1 which is denoted as the multisite border-gateway loopback interface on the nve interface.

In the next part we will look at setting up anycast gateways for the L2VNIs so we can start the process of getting the hosts of their layer 2 network!


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *