3. Single-Pod VXLAN / EVPN – MP-BGP EVPN Control Plane

Since we’ve configured our UNDERLAY we can now proceed to configure the MP-BGP EVPN control plane. The L2VPN EVPN address family in BGP will provide a control plane for sharing MACs whilst enabling multi-tenancy with the use of RTs and RDs which controls VTEP specific MAC updates. When we mention multi-tenant VXLAN / EVPN we’re talking about additional VRFs. Each VRF is a tenant, but that’s another blog.

On to the BGP configuration, I have used the same topology and configuration as the UNDERLAY post.

The Spines will act as route-reflectors for the L2VPN EVPN peers again reducing configuration, this also makes for less effort in future if the fabric is scaled up to include more Leaf nodes. We utilise the L2VPN EVPN address family in BGP (MP-BGP) however only the Leaf nodes require EVPN specific configuration as shown below. Similar to VPNV4 configurations, only the PEs deal with the RTs using RDs as that’s where the VPNs terminate (With some exceptions, as always).


MP-BGP L2VPN EVPN SPINE Configuration

First we enable the required features, on the Spines and Leaf we must enable the BGP feature.

#POD1-SP1
feature bgp

We will also need the nv overlay evpn command to ensure we can configure the l2vpn evpn address family


#POD1-SP1
nv overlay evpn

Next we configure our Spines. First enable the l2vpn evpn address family. Under the l2vpn evpn address family we have configured retain route-target all, this ensures all the RTs that are received from Leaf nodes are kept in place! Without this command packets received at the Spine have the RTs removed, when they reach the Leaf with no RT the Leaf won’t know where to send the information

#POD1-SP1
router bgp 65001
  router-id 10.111.111.1
  log-neighbor-changes
  address-family ipv4 unicast
  address-family l2vpn evpn
    retain route-target all

Next i’ve configured peer templates, this ensure minimal configuration on a repeatable basis, all the Leaf nodes will peer with the Spines with the same configuration, the only difference being the loopback IP.

Note the template peer RR-CLIENTs which contains the l2vpn evpn address-family. We update the source as Lo0, it’s best practice to have a central point to peer on the router, we’re not reliant on one path in and out. Not forgetting we’re using ip unnumbered with ISIS.

It’s worth noting at this point all the peering is iBGP and the ASNs are the same on each device, only when we use eBGP in the underlay or peer externally outside of the fabric will we use a different ASN.

Within the l2vpn evpn address-family we have configured send community extended, this is because RTs are carried as extended community attributes. Without this we have no RTs again.

Finally we enable route-reflector-clients on our template and inherit the template on each of the Leaf neighbors as the Spine we’re configuring is the route-reflector.

This configuration is mirrored on all the other Spines, the only difference being the loopback IP of the Spine. To add, as we have no direct connection between the Spines there is no need to complicate the design with RR Clustering.

#POD1-SP1
router bgp 65001
  template peer RR-CLIENTS
    remote-as 65001
    update-source loopback0
    address-family ipv4 unicast
      send-community extended
    address-family l2vpn evpn
      send-community
      send-community extended
      route-reflector-client
  neighbor 10.222.222.1
    inherit peer RR-CLIENTS
  neighbor 10.222.222.2
    inherit peer RR-CLIENTS
  neighbor 10.222.222.3
    inherit peer RR-CLIENTS
  neighbor 10.222.222.4
    inherit peer RR-CLIENTS

MP-BGP L2VPN EVPN LEAF Configuration

Next we configure the Leaf nodes, similarly to the Spines we configure the l2vpn evpn address-family globally.

We then create our RR-SPINE template followed by our neighbor parameters, also again ensuring we send-community extended to ensure our RTs get to the destination leaf.

Finally our Spine peers inherit the template. Note there is no reference to route-reflectors here, the only RR configuration is required on the reflector itself not the clients.

#POD1-LF1
router bgp 65001
  router-id 10.222.222.2
  log-neighbor-changes
  address-family ipv4 unicast
  address-family l2vpn evpn
  template peer RR-SPINE
    remote-as 65001
    update-source loopback0
    address-family ipv4 unicast
      send-community extended
    address-family l2vpn evpn
      send-community
      send-community extended
  neighbor 10.111.111.1
    inherit peer RR-SPINE
  neighbor 10.111.111.2
    inherit peer RR-SPINE

There is more “BGP” related configuration to complete when we configure our VXLAN, L2VNI (BD) and L3VNI (VRF).

Only a basic check here just to confirm peers are established, we will go further into the L2VPN EVPN BGP RIB and confirm RTs once the configuration is completed.

POD1-LF1# sh bgp l2vpn evpn summ 
BGP summary information for VRF default, address family L2VPN EVPN
BGP router identifier 10.222.222.2, local AS number 65001
BGP table version is 436, L2VPN EVPN config peers 2, capable peers 2
20 network entries and 34 paths using 5224 bytes of memory
BGP attribute entries [18/2952], BGP AS path entries [0/0]
BGP community entries [0/0], BGP clusterlist entries [4/16]

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.111.111.1    4 65001     228     125      436    0    0 01:38:06 10        
10.111.111.2    4 65001     226     125      436    0    0 01:37:45 10   
POD1-SP1# sh bgp l2vpn evpn summ 
BGP summary information for VRF default, address family L2VPN EVPN
BGP router identifier 10.111.111.1, local AS number 65001
BGP table version is 268, L2VPN EVPN config peers 4, capable peers 4
18 network entries and 24 paths using 4776 bytes of memory
BGP attribute entries [10/1640], BGP AS path entries [0/0]
BGP community entries [0/0], BGP clusterlist entries [0/0]

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.222.222.1    4 65001     159     162      268    0    0 01:40:57 6         
10.222.222.2    4 65001     157     177      268    0    0 01:41:02 6         
10.222.222.3    4 65001     169     152      268    0    0 01:40:56 6         
10.222.222.4    4 65001     171     153      268    0    0 01:40:57 6       

Next onto our VXLAN configuration….