From 5e4b39d05d80e5096f7a0c32053ff073af3822a9 Mon Sep 17 00:00:00 2001 From: Damien Date: Sat, 18 Apr 2026 08:38:00 +0000 Subject: [PATCH 01/16] Extend topology with Core, Campus fabric and DC Border Leafs Add node declarations and links for: - DC Border Leaf MLAG pair (border-leaf-dc1/2) - Core routers (core1, core2) interconnected via eth5 - Campus spines, leafs, border leafs, access switches and two hosts - DC spine eth9/eth10 uplinks toward DC Border Leafs (underlay + EVPN) --- configs/spine1.cfg | 23 +++++ configs/spine2.cfg | 23 +++++ evpn-lab.clab.yml | 249 ++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 269 insertions(+), 26 deletions(-) diff --git a/configs/spine1.cfg b/configs/spine1.cfg index f6438b1..2e0090a 100644 --- a/configs/spine1.cfg +++ b/configs/spine1.cfg @@ -81,6 +81,19 @@ interface Ethernet8 ip address 10.0.1.14/31 mtu 9214 ! +! Underlay P2P interfaces to DC Border Leafs +interface Ethernet9 + description border-leaf-dc1 + no switchport + ip address 10.0.1.16/31 + mtu 9214 +! +interface Ethernet10 + description border-leaf-dc2 + no switchport + ip address 10.0.1.18/31 + mtu 9214 +! ! BGP Configuration router bgp 65000 router-id 10.0.250.1 @@ -98,6 +111,8 @@ router bgp 65000 neighbor 10.0.1.11 remote-as 65003 neighbor 10.0.1.13 remote-as 65004 neighbor 10.0.1.15 remote-as 65004 + neighbor 10.0.1.17 remote-as 65005 + neighbor 10.0.1.19 remote-as 65005 ! ! EVPN peer-group configuration neighbor evpn peer group @@ -125,6 +140,12 @@ router bgp 65000 neighbor 10.0.250.18 peer group evpn neighbor 10.0.250.18 remote-as 65004 ! + ! EVPN neighbors (to DC border-leaf loopbacks) + neighbor 10.0.250.21 peer group evpn + neighbor 10.0.250.21 remote-as 65005 + neighbor 10.0.250.22 peer group evpn + neighbor 10.0.250.22 remote-as 65005 + ! ! IPv4 address family address-family ipv4 neighbor 10.0.1.1 activate @@ -135,6 +156,8 @@ router bgp 65000 neighbor 10.0.1.11 activate neighbor 10.0.1.13 activate neighbor 10.0.1.15 activate + neighbor 10.0.1.17 activate + neighbor 10.0.1.19 activate network 10.0.250.1/32 ! ! EVPN address family diff --git a/configs/spine2.cfg b/configs/spine2.cfg index 6ae75d6..91018ce 100644 --- a/configs/spine2.cfg +++ b/configs/spine2.cfg @@ -81,6 +81,19 @@ interface Ethernet8 ip address 10.0.2.14/31 mtu 9214 ! +! Underlay P2P interfaces to DC Border Leafs +interface Ethernet9 + description border-leaf-dc1 + no switchport + ip address 10.0.2.16/31 + mtu 9214 +! +interface Ethernet10 + description border-leaf-dc2 + no switchport + ip address 10.0.2.18/31 + mtu 9214 +! ! BGP Configuration router bgp 65000 router-id 10.0.250.2 @@ -98,6 +111,8 @@ router bgp 65000 neighbor 10.0.2.11 remote-as 65003 neighbor 10.0.2.13 remote-as 65004 neighbor 10.0.2.15 remote-as 65004 + neighbor 10.0.2.17 remote-as 65005 + neighbor 10.0.2.19 remote-as 65005 ! ! EVPN peer-group configuration neighbor evpn peer group @@ -125,6 +140,12 @@ router bgp 65000 neighbor 10.0.250.18 peer group evpn neighbor 10.0.250.18 remote-as 65004 ! + ! EVPN neighbors (to DC border-leaf loopbacks) + neighbor 10.0.250.21 peer group evpn + neighbor 10.0.250.21 remote-as 65005 + neighbor 10.0.250.22 peer group evpn + neighbor 10.0.250.22 remote-as 65005 + ! ! IPv4 address family address-family ipv4 neighbor 10.0.2.1 activate @@ -135,6 +156,8 @@ router bgp 65000 neighbor 10.0.2.11 activate neighbor 10.0.2.13 activate neighbor 10.0.2.15 activate + neighbor 10.0.2.17 activate + neighbor 10.0.2.19 activate network 10.0.250.2/32 ! ! EVPN address family diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index 9467cd0..af88bec 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -11,7 +11,11 @@ topology: image: ceos:4.35.0F nodes: - # Spine Switches + # ===================================================== + # DATACENTER FABRIC + # ===================================================== + + # DC Spine Switches (AS 65000) spine1: kind: arista_ceos mgmt-ipv4: 172.16.0.1 @@ -22,7 +26,7 @@ topology: mgmt-ipv4: 172.16.0.2 startup-config: configs/spine2.cfg - # Leaf Switches - VTEP1 (AS 65001) + # DC Leaf Switches - VTEP1 (AS 65001) leaf1: kind: arista_ceos mgmt-ipv4: 172.16.0.25 @@ -33,7 +37,7 @@ topology: mgmt-ipv4: 172.16.0.50 startup-config: configs/leaf2.cfg - # Leaf Switches - VTEP2 (AS 65002) + # DC Leaf Switches - VTEP2 (AS 65002) leaf3: kind: arista_ceos mgmt-ipv4: 172.16.0.27 @@ -44,7 +48,7 @@ topology: mgmt-ipv4: 172.16.0.28 startup-config: configs/leaf4.cfg - # Leaf Switches - VTEP3 (AS 65003) + # DC Leaf Switches - VTEP3 (AS 65003) leaf5: kind: arista_ceos mgmt-ipv4: 172.16.0.29 @@ -55,7 +59,7 @@ topology: mgmt-ipv4: 172.16.0.30 startup-config: configs/leaf6.cfg - # Leaf Switches - VTEP4 (AS 65004) + # DC Leaf Switches - VTEP4 (AS 65004) leaf7: kind: arista_ceos mgmt-ipv4: 172.16.0.31 @@ -66,7 +70,18 @@ topology: mgmt-ipv4: 172.16.0.32 startup-config: configs/leaf8.cfg - # Access Switches - L2 only + # DC Border Leafs - MLAG pair (AS 65005) + border-leaf-dc1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.3 + startup-config: configs/border-leaf-dc1.cfg + + border-leaf-dc2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.4 + startup-config: configs/border-leaf-dc2.cfg + + # DC Access Switches - L2 only access1: kind: arista_ceos mgmt-ipv4: 172.16.0.41 @@ -87,7 +102,7 @@ topology: mgmt-ipv4: 172.16.0.44 startup-config: configs/access4.cfg - # Host devices - DUAL-HOMED with LACP bonding to access switches + # DC Host devices - dual-homed with LACP bonding host1: kind: linux mgmt-ipv4: 172.16.0.101 @@ -130,6 +145,7 @@ topology: - ip link set bond0.34 up - ip addr add 10.34.34.102/24 dev bond0.34 - ip route add 10.78.78.0/24 via 10.34.34.1 + - ip route add 10.60.0.0/16 via 10.34.34.1 host3: kind: linux @@ -175,9 +191,143 @@ topology: - ip link set bond0.78 up - ip addr add 10.78.78.104/24 dev bond0.78 - ip route add 10.34.34.0/24 via 10.78.78.1 + - ip route add 10.60.0.0/16 via 10.78.78.1 + + # ===================================================== + # CORE L3 (inter-fabric transit) + # ===================================================== + + # Core routers (AS 65500, iBGP between them) + core1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.10 + startup-config: configs/core1.cfg + + core2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.11 + startup-config: configs/core2.cfg + + # ===================================================== + # CAMPUS FABRIC + # ===================================================== + + # Campus Spines (AS 66000) + campus-spine1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.20 + startup-config: configs/campus-spine1.cfg + + campus-spine2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.21 + startup-config: configs/campus-spine2.cfg + + # Campus Border Leafs - MLAG pair (AS 66005) + border-leaf-campus1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.22 + startup-config: configs/border-leaf-campus1.cfg + + border-leaf-campus2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.23 + startup-config: configs/border-leaf-campus2.cfg + + # Campus Leafs - VTEP1 (AS 66001) + campus-leaf1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.51 + startup-config: configs/campus-leaf1.cfg + + campus-leaf2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.52 + startup-config: configs/campus-leaf2.cfg + + # Campus Leafs - VTEP2 (AS 66002) + campus-leaf3: + kind: arista_ceos + mgmt-ipv4: 172.16.0.53 + startup-config: configs/campus-leaf3.cfg + + campus-leaf4: + kind: arista_ceos + mgmt-ipv4: 172.16.0.54 + startup-config: configs/campus-leaf4.cfg + + # Campus Access switches - L2 only + campus-access1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.61 + startup-config: configs/campus-access1.cfg + + campus-access2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.62 + startup-config: configs/campus-access2.cfg + + # Campus Hosts - dual-homed with LACP bonding + campus-host1: + kind: linux + mgmt-ipv4: 172.16.0.105 + image: ghcr.io/hellt/network-multitool + cap-add: + - NET_ADMIN + exec: + - ip link add bond0 type bond mode 802.3ad + - ip link set dev bond0 type bond xmit_hash_policy layer3+4 + - ip link set dev eth1 down + - ip link set dev eth2 down + - ip link set eth1 master bond0 + - ip link set eth2 master bond0 + - ip link set dev eth1 up + - ip link set dev eth2 up + - ip link set dev bond0 type bond lacp_rate fast + - ip link set dev bond0 up + - ip link add link bond0 name bond0.50 type vlan id 50 + - ip link set bond0.50 up + - ip addr add 10.50.50.101/24 dev bond0.50 + - ip link add link bond0 name bond0.60 type vlan id 60 + - ip link set bond0.60 up + - ip addr add 10.60.60.101/24 dev bond0.60 + - ip route add 10.60.70.0/24 via 10.60.60.1 + - ip route add 10.34.34.0/24 via 10.60.60.1 + - ip route add 10.78.78.0/24 via 10.60.60.1 + + campus-host2: + kind: linux + mgmt-ipv4: 172.16.0.106 + image: ghcr.io/hellt/network-multitool + cap-add: + - NET_ADMIN + exec: + - ip link add bond0 type bond mode 802.3ad + - ip link set dev bond0 type bond xmit_hash_policy layer3+4 + - ip link set dev eth1 down + - ip link set dev eth2 down + - ip link set eth1 master bond0 + - ip link set eth2 master bond0 + - ip link set dev eth1 up + - ip link set dev eth2 up + - ip link set dev bond0 type bond lacp_rate fast + - ip link set dev bond0 up + - ip link add link bond0 name bond0.50 type vlan id 50 + - ip link set bond0.50 up + - ip addr add 10.50.50.102/24 dev bond0.50 + - ip link add link bond0 name bond0.70 type vlan id 70 + - ip link set bond0.70 up + - ip addr add 10.60.70.102/24 dev bond0.70 + - ip route add 10.60.60.0/24 via 10.60.70.1 + - ip route add 10.34.34.0/24 via 10.60.70.1 + - ip route add 10.78.78.0/24 via 10.60.70.1 links: - # Spine1 to Leaf connections (underlay fabric) + # ===================================================== + # DATACENTER FABRIC LINKS + # ===================================================== + + # Spine1 to Leaf/Border-Leaf connections (underlay) - endpoints: ["spine1:eth1", "leaf1:eth11"] - endpoints: ["spine1:eth2", "leaf2:eth11"] - endpoints: ["spine1:eth3", "leaf3:eth11"] @@ -186,8 +336,10 @@ topology: - endpoints: ["spine1:eth6", "leaf6:eth11"] - endpoints: ["spine1:eth7", "leaf7:eth11"] - endpoints: ["spine1:eth8", "leaf8:eth11"] + - endpoints: ["spine1:eth9", "border-leaf-dc1:eth11"] + - endpoints: ["spine1:eth10", "border-leaf-dc2:eth11"] - # Spine2 to Leaf connections (underlay fabric) + # Spine2 to Leaf/Border-Leaf connections (underlay) - endpoints: ["spine2:eth1", "leaf1:eth12"] - endpoints: ["spine2:eth2", "leaf2:eth12"] - endpoints: ["spine2:eth3", "leaf3:eth12"] @@ -196,43 +348,88 @@ topology: - endpoints: ["spine2:eth6", "leaf6:eth12"] - endpoints: ["spine2:eth7", "leaf7:eth12"] - endpoints: ["spine2:eth8", "leaf8:eth12"] + - endpoints: ["spine2:eth9", "border-leaf-dc1:eth12"] + - endpoints: ["spine2:eth10", "border-leaf-dc2:eth12"] - # MLAG Peer Links (leaf pairs) + # DC MLAG Peer Links (leaf pairs + border-leaf pair) - endpoints: ["leaf1:eth10", "leaf2:eth10"] - endpoints: ["leaf3:eth10", "leaf4:eth10"] - endpoints: ["leaf5:eth10", "leaf6:eth10"] - endpoints: ["leaf7:eth10", "leaf8:eth10"] + - endpoints: ["border-leaf-dc1:eth10", "border-leaf-dc2:eth10"] - # Access switch uplinks to leaf MLAG pairs (dual-homed via LACP) - # access1 dual-homed to leaf1 + leaf2 + # DC Access switch uplinks to leaf MLAG pairs (dual-homed via LACP) - endpoints: ["leaf1:eth1", "access1:eth1"] - endpoints: ["leaf2:eth1", "access1:eth2"] - - # access2 dual-homed to leaf3 + leaf4 - endpoints: ["leaf3:eth1", "access2:eth1"] - endpoints: ["leaf4:eth1", "access2:eth2"] - - # access3 dual-homed to leaf5 + leaf6 - endpoints: ["leaf5:eth1", "access3:eth1"] - endpoints: ["leaf6:eth1", "access3:eth2"] - - # access4 dual-homed to leaf7 + leaf8 - endpoints: ["leaf7:eth1", "access4:eth1"] - endpoints: ["leaf8:eth1", "access4:eth2"] - # Host connections to access switches (dual-homed via LACP) - # host1 dual-homed to access1 + # DC Host connections to access switches (dual-homed via LACP) - endpoints: ["access1:eth3", "host1:eth1"] - endpoints: ["access1:eth4", "host1:eth2"] - - # host2 dual-homed to access2 - endpoints: ["access2:eth3", "host2:eth1"] - endpoints: ["access2:eth4", "host2:eth2"] - - # host3 dual-homed to access3 - endpoints: ["access3:eth3", "host3:eth1"] - endpoints: ["access3:eth4", "host3:eth2"] - - # host4 dual-homed to access4 - endpoints: ["access4:eth3", "host4:eth1"] - endpoints: ["access4:eth4", "host4:eth2"] + + # ===================================================== + # CORE INTERCONNECT (DC Border Leafs <-> Core <-> Campus Border Leafs) + # ===================================================== + + # DC Border Leafs to Core routers (4 links) + - endpoints: ["border-leaf-dc1:eth13", "core1:eth1"] + - endpoints: ["border-leaf-dc1:eth14", "core2:eth1"] + - endpoints: ["border-leaf-dc2:eth13", "core1:eth2"] + - endpoints: ["border-leaf-dc2:eth14", "core2:eth2"] + + # Campus Border Leafs to Core routers (4 links) + - endpoints: ["border-leaf-campus1:eth13", "core1:eth3"] + - endpoints: ["border-leaf-campus1:eth14", "core2:eth3"] + - endpoints: ["border-leaf-campus2:eth13", "core1:eth4"] + - endpoints: ["border-leaf-campus2:eth14", "core2:eth4"] + + # Core routers interconnect + - endpoints: ["core1:eth5", "core2:eth5"] + + # ===================================================== + # CAMPUS FABRIC LINKS + # ===================================================== + + # Campus Spine1 to Leafs/Border-Leafs (underlay) + - endpoints: ["campus-spine1:eth1", "campus-leaf1:eth11"] + - endpoints: ["campus-spine1:eth2", "campus-leaf2:eth11"] + - endpoints: ["campus-spine1:eth3", "campus-leaf3:eth11"] + - endpoints: ["campus-spine1:eth4", "campus-leaf4:eth11"] + - endpoints: ["campus-spine1:eth5", "border-leaf-campus1:eth11"] + - endpoints: ["campus-spine1:eth6", "border-leaf-campus2:eth11"] + + # Campus Spine2 to Leafs/Border-Leafs (underlay) + - endpoints: ["campus-spine2:eth1", "campus-leaf1:eth12"] + - endpoints: ["campus-spine2:eth2", "campus-leaf2:eth12"] + - endpoints: ["campus-spine2:eth3", "campus-leaf3:eth12"] + - endpoints: ["campus-spine2:eth4", "campus-leaf4:eth12"] + - endpoints: ["campus-spine2:eth5", "border-leaf-campus1:eth12"] + - endpoints: ["campus-spine2:eth6", "border-leaf-campus2:eth12"] + + # Campus MLAG Peer Links (leaf pairs + border-leaf pair) + - endpoints: ["campus-leaf1:eth10", "campus-leaf2:eth10"] + - endpoints: ["campus-leaf3:eth10", "campus-leaf4:eth10"] + - endpoints: ["border-leaf-campus1:eth10", "border-leaf-campus2:eth10"] + + # Campus Access switch uplinks to leaf MLAG pairs (dual-homed via LACP) + - endpoints: ["campus-leaf1:eth1", "campus-access1:eth1"] + - endpoints: ["campus-leaf2:eth1", "campus-access1:eth2"] + - endpoints: ["campus-leaf3:eth1", "campus-access2:eth1"] + - endpoints: ["campus-leaf4:eth1", "campus-access2:eth2"] + + # Campus Host connections to access switches (dual-homed via LACP) + - endpoints: ["campus-access1:eth3", "campus-host1:eth1"] + - endpoints: ["campus-access1:eth4", "campus-host1:eth2"] + - endpoints: ["campus-access2:eth3", "campus-host2:eth1"] + - endpoints: ["campus-access2:eth4", "campus-host2:eth2"] From d3b3c38eadf0b10bdb9a9d5c70339bc4189c5f43 Mon Sep 17 00:00:00 2001 From: Damien Date: Sat, 18 Apr 2026 08:38:12 +0000 Subject: [PATCH 02/16] Add DC Border Leaf configs (AS 65005, MLAG pair) Both border leafs share VTEP Loopback1 10.0.255.15 and peer with DC spines in eBGP IPv4 + EVPN. Uplinks to core1/core2 use dot1q subinterfaces (.100 default underlay, .200 VRF gold) with OSPF area 0 and eBGP to AS 65500. VRF gold extended via vxlan vrf gold vni 100001 with RD :1 and RT 1:100001. --- configs/border-leaf-dc1.cfg | 234 ++++++++++++++++++++++++++++++++++++ configs/border-leaf-dc2.cfg | 234 ++++++++++++++++++++++++++++++++++++ 2 files changed, 468 insertions(+) create mode 100644 configs/border-leaf-dc1.cfg create mode 100644 configs/border-leaf-dc2.cfg diff --git a/configs/border-leaf-dc1.cfg b/configs/border-leaf-dc1.cfg new file mode 100644 index 0000000..98274a0 --- /dev/null +++ b/configs/border-leaf-dc1.cfg @@ -0,0 +1,234 @@ +! Border-Leaf-DC1 Configuration +! DC Border Leaf - AS 65005 (MLAG pair with border-leaf-dc2) +! Provides egress from DC EVPN-VXLAN fabric to Core L3 network +! +hostname border-leaf-dc1 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.3/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.0.199.246/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.0.3.8/31 + mtu 9214 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.0.250.21/32 +! +interface Loopback1 + description VTEP + ip address 10.0.255.15/32 +! +interface Loopback2 + description VRF-Gold-health + vrf gold + ip address 10.0.250.221/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Spines +interface Ethernet11 + description spine1 + no switchport + ip address 10.0.1.17/31 + mtu 9214 +! +interface Ethernet12 + description spine2 + no switchport + ip address 10.0.2.17/31 + mtu 9214 +! +! Uplink to Core1 (subinterfaced: .100 default VRF, .200 VRF gold) +interface Ethernet13 + description core1 + no switchport + mtu 9214 +! +interface Ethernet13.100 + description core1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.1/31 + mtu 9214 +! +interface Ethernet13.200 + description core1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.1/31 + mtu 9214 +! +! Uplink to Core2 (subinterfaced: .100 default VRF, .200 VRF gold) +interface Ethernet14 + description core2 + no switchport + mtu 9214 +! +interface Ethernet14.100 + description core2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.5/31 + mtu 9214 +! +interface Ethernet14.200 + description core2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.5/31 + mtu 9214 +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id border-leafs-dc + local-interface Vlan4090 + peer-address 10.0.199.247 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.4 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! OSPF for loopback reachability with Core (default VRF) +router ospf 1 + router-id 10.0.250.21 + passive-interface default + no passive-interface Ethernet13.100 + no passive-interface Ethernet14.100 + network 10.0.250.21/32 area 0 + network 10.0.4.0/31 area 0 + network 10.0.4.4/31 area 0 + max-lsa 12000 +! +! BGP Configuration +router bgp 65005 + router-id 10.0.250.21 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group (to DC spines) + neighbor underlay peer group + neighbor underlay remote-as 65000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.0.1.16 peer group underlay + neighbor 10.0.2.16 peer group underlay + ! + ! iBGP peer-group (to MLAG peer) + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 65005 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.0.3.9 peer group underlay_ibgp + ! + ! EVPN peer-group (to DC spines) + neighbor evpn peer group + neighbor evpn remote-as 65000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.0.250.1 peer group evpn + neighbor 10.0.250.2 peer group evpn + ! + ! eBGP to Core routers (default VRF, underlay peer-group for /31 sessions) + neighbor core peer group + neighbor core remote-as 65500 + neighbor core send-community extended + neighbor core maximum-routes 12000 warning-only + neighbor 10.0.4.0 peer group core + neighbor 10.0.4.4 peer group core + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + neighbor core activate + network 10.0.250.21/32 + network 10.0.255.15/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.0.250.21:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + router-id 10.0.250.21 + neighbor 10.0.14.0 remote-as 65500 + neighbor 10.0.14.0 send-community extended + neighbor 10.0.14.0 maximum-routes 12000 warning-only + neighbor 10.0.14.4 remote-as 65500 + neighbor 10.0.14.4 send-community extended + neighbor 10.0.14.4 maximum-routes 12000 warning-only + redistribute connected + redistribute learned +! +end diff --git a/configs/border-leaf-dc2.cfg b/configs/border-leaf-dc2.cfg new file mode 100644 index 0000000..41edd3f --- /dev/null +++ b/configs/border-leaf-dc2.cfg @@ -0,0 +1,234 @@ +! Border-Leaf-DC2 Configuration +! DC Border Leaf - AS 65005 (MLAG pair with border-leaf-dc1) +! Provides egress from DC EVPN-VXLAN fabric to Core L3 network +! +hostname border-leaf-dc2 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.4/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.0.199.247/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.0.3.9/31 + mtu 9214 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.0.250.22/32 +! +interface Loopback1 + description VTEP + ip address 10.0.255.15/32 +! +interface Loopback2 + description VRF-Gold-health + vrf gold + ip address 10.0.250.222/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Spines +interface Ethernet11 + description spine1 + no switchport + ip address 10.0.1.19/31 + mtu 9214 +! +interface Ethernet12 + description spine2 + no switchport + ip address 10.0.2.19/31 + mtu 9214 +! +! Uplink to Core1 (subinterfaced: .100 default VRF, .200 VRF gold) +interface Ethernet13 + description core1 + no switchport + mtu 9214 +! +interface Ethernet13.100 + description core1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.3/31 + mtu 9214 +! +interface Ethernet13.200 + description core1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.3/31 + mtu 9214 +! +! Uplink to Core2 (subinterfaced: .100 default VRF, .200 VRF gold) +interface Ethernet14 + description core2 + no switchport + mtu 9214 +! +interface Ethernet14.100 + description core2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.7/31 + mtu 9214 +! +interface Ethernet14.200 + description core2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.7/31 + mtu 9214 +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id border-leafs-dc + local-interface Vlan4090 + peer-address 10.0.199.246 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.3 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! OSPF for loopback reachability with Core (default VRF) +router ospf 1 + router-id 10.0.250.22 + passive-interface default + no passive-interface Ethernet13.100 + no passive-interface Ethernet14.100 + network 10.0.250.22/32 area 0 + network 10.0.4.2/31 area 0 + network 10.0.4.6/31 area 0 + max-lsa 12000 +! +! BGP Configuration +router bgp 65005 + router-id 10.0.250.22 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group (to DC spines) + neighbor underlay peer group + neighbor underlay remote-as 65000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.0.1.18 peer group underlay + neighbor 10.0.2.18 peer group underlay + ! + ! iBGP peer-group (to MLAG peer) + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 65005 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.0.3.8 peer group underlay_ibgp + ! + ! EVPN peer-group (to DC spines) + neighbor evpn peer group + neighbor evpn remote-as 65000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.0.250.1 peer group evpn + neighbor 10.0.250.2 peer group evpn + ! + ! eBGP to Core routers (default VRF) + neighbor core peer group + neighbor core remote-as 65500 + neighbor core send-community extended + neighbor core maximum-routes 12000 warning-only + neighbor 10.0.4.2 peer group core + neighbor 10.0.4.6 peer group core + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + neighbor core activate + network 10.0.250.22/32 + network 10.0.255.15/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.0.250.22:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + router-id 10.0.250.22 + neighbor 10.0.14.2 remote-as 65500 + neighbor 10.0.14.2 send-community extended + neighbor 10.0.14.2 maximum-routes 12000 warning-only + neighbor 10.0.14.6 remote-as 65500 + neighbor 10.0.14.6 send-community extended + neighbor 10.0.14.6 maximum-routes 12000 warning-only + redistribute connected + redistribute learned +! +end From 4b4c1852c44c214cdb3c9e92755170f22e9a3b0b Mon Sep 17 00:00:00 2001 From: Damien Date: Sat, 18 Apr 2026 08:38:21 +0000 Subject: [PATCH 03/16] Add Core router configs (AS 65500, iBGP + VRF gold transit) core1/core2 provide L3 transit between DC and Campus fabrics. Each physical link toward a Border Leaf is subinterfaced (.100 default, .200 VRF gold). OSPF area 0 in default VRF, eBGP to DC BLs (65005) and Campus BLs (66005), iBGP between core1 and core2 via Loopback0. VRF gold uses redistribute connected and VRF-aware eBGP sessions on .200 subinterfaces to stitch VRF gold end-to-end across fabrics. --- configs/core1.cfg | 224 ++++++++++++++++++++++++++++++++++++++++++++++ configs/core2.cfg | 224 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 448 insertions(+) create mode 100644 configs/core1.cfg create mode 100644 configs/core2.cfg diff --git a/configs/core1.cfg b/configs/core1.cfg new file mode 100644 index 0000000..51a035d --- /dev/null +++ b/configs/core1.cfg @@ -0,0 +1,224 @@ +! Core1 Configuration +! Core Router - AS 65500 +! Transit between DC Border Leafs and Campus Border Leafs +! +hostname core1 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! Management interface +interface Management0 + ip address 172.16.0.10/24 +! +! Loopback for BGP Router-ID (default VRF) +interface Loopback0 + description Router-ID + ip address 10.0.200.1/32 +! +! Loopback in VRF Gold (router-id and health) +interface Loopback1 + description VRF-Gold-RouterID + vrf gold + ip address 10.0.200.101/32 +! +! Link to DC Border Leaf 1 (subinterfaced: .100 default VRF, .200 VRF gold) +interface Ethernet1 + description border-leaf-dc1 + no switchport + mtu 9214 +! +interface Ethernet1.100 + description border-leaf-dc1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.0/31 + mtu 9214 +! +interface Ethernet1.200 + description border-leaf-dc1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.0/31 + mtu 9214 +! +! Link to DC Border Leaf 2 +interface Ethernet2 + description border-leaf-dc2 + no switchport + mtu 9214 +! +interface Ethernet2.100 + description border-leaf-dc2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.2/31 + mtu 9214 +! +interface Ethernet2.200 + description border-leaf-dc2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.2/31 + mtu 9214 +! +! Link to Campus Border Leaf 1 +interface Ethernet3 + description border-leaf-campus1 + no switchport + mtu 9214 +! +interface Ethernet3.100 + description border-leaf-campus1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.0/31 + mtu 9214 +! +interface Ethernet3.200 + description border-leaf-campus1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.0/31 + mtu 9214 +! +! Link to Campus Border Leaf 2 +interface Ethernet4 + description border-leaf-campus2 + no switchport + mtu 9214 +! +interface Ethernet4.100 + description border-leaf-campus2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.2/31 + mtu 9214 +! +interface Ethernet4.200 + description border-leaf-campus2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.2/31 + mtu 9214 +! +! Inter-Core link +interface Ethernet5 + description core2 + no switchport + mtu 9214 +! +interface Ethernet5.100 + description core2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.200.128/31 + mtu 9214 +! +interface Ethernet5.200 + description core2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.200.130/31 + mtu 9214 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! OSPF for loopback reachability (default VRF) +router ospf 1 + router-id 10.0.200.1 + passive-interface default + no passive-interface Ethernet1.100 + no passive-interface Ethernet2.100 + no passive-interface Ethernet3.100 + no passive-interface Ethernet4.100 + no passive-interface Ethernet5.100 + network 10.0.200.1/32 area 0 + network 10.0.4.0/31 area 0 + network 10.0.4.2/31 area 0 + network 10.0.5.0/31 area 0 + network 10.0.5.2/31 area 0 + network 10.0.200.128/31 area 0 + max-lsa 12000 +! +! BGP Configuration +router bgp 65500 + router-id 10.0.200.1 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! iBGP to core2 (loopback-based, default VRF) + neighbor core_ibgp peer group + neighbor core_ibgp remote-as 65500 + neighbor core_ibgp update-source Loopback0 + neighbor core_ibgp next-hop-self + neighbor core_ibgp send-community extended + neighbor core_ibgp maximum-routes 12000 warning-only + neighbor 10.0.200.2 peer group core_ibgp + ! + ! eBGP to DC Border Leafs (default VRF) + neighbor dc_bl peer group + neighbor dc_bl remote-as 65005 + neighbor dc_bl send-community extended + neighbor dc_bl maximum-routes 12000 warning-only + neighbor 10.0.4.1 peer group dc_bl + neighbor 10.0.4.3 peer group dc_bl + ! + ! eBGP to Campus Border Leafs (default VRF) + neighbor campus_bl peer group + neighbor campus_bl remote-as 66005 + neighbor campus_bl send-community extended + neighbor campus_bl maximum-routes 12000 warning-only + neighbor 10.0.5.1 peer group campus_bl + neighbor 10.0.5.3 peer group campus_bl + ! + ! IPv4 address family (default VRF) + address-family ipv4 + neighbor core_ibgp activate + neighbor dc_bl activate + neighbor campus_bl activate + network 10.0.200.1/32 + ! + ! VRF Gold configuration - transit for inter-fabric routing + vrf gold + rd 10.0.200.1:100001 + router-id 10.0.200.1 + ! iBGP to core2 in VRF gold (P2P) + neighbor 10.0.200.131 remote-as 65500 + neighbor 10.0.200.131 next-hop-self + neighbor 10.0.200.131 send-community extended + neighbor 10.0.200.131 maximum-routes 12000 warning-only + ! eBGP to DC Border Leafs in VRF gold + neighbor 10.0.14.1 remote-as 65005 + neighbor 10.0.14.1 send-community extended + neighbor 10.0.14.1 maximum-routes 12000 warning-only + neighbor 10.0.14.3 remote-as 65005 + neighbor 10.0.14.3 send-community extended + neighbor 10.0.14.3 maximum-routes 12000 warning-only + ! eBGP to Campus Border Leafs in VRF gold + neighbor 10.0.15.1 remote-as 66005 + neighbor 10.0.15.1 send-community extended + neighbor 10.0.15.1 maximum-routes 12000 warning-only + neighbor 10.0.15.3 remote-as 66005 + neighbor 10.0.15.3 send-community extended + neighbor 10.0.15.3 maximum-routes 12000 warning-only + redistribute connected +! +end diff --git a/configs/core2.cfg b/configs/core2.cfg new file mode 100644 index 0000000..93b41fb --- /dev/null +++ b/configs/core2.cfg @@ -0,0 +1,224 @@ +! Core2 Configuration +! Core Router - AS 65500 +! Transit between DC Border Leafs and Campus Border Leafs +! +hostname core2 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! Management interface +interface Management0 + ip address 172.16.0.11/24 +! +! Loopback for BGP Router-ID (default VRF) +interface Loopback0 + description Router-ID + ip address 10.0.200.2/32 +! +! Loopback in VRF Gold (router-id and health) +interface Loopback1 + description VRF-Gold-RouterID + vrf gold + ip address 10.0.200.102/32 +! +! Link to DC Border Leaf 1 +interface Ethernet1 + description border-leaf-dc1 + no switchport + mtu 9214 +! +interface Ethernet1.100 + description border-leaf-dc1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.4/31 + mtu 9214 +! +interface Ethernet1.200 + description border-leaf-dc1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.4/31 + mtu 9214 +! +! Link to DC Border Leaf 2 +interface Ethernet2 + description border-leaf-dc2 + no switchport + mtu 9214 +! +interface Ethernet2.100 + description border-leaf-dc2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.6/31 + mtu 9214 +! +interface Ethernet2.200 + description border-leaf-dc2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.14.6/31 + mtu 9214 +! +! Link to Campus Border Leaf 1 +interface Ethernet3 + description border-leaf-campus1 + no switchport + mtu 9214 +! +interface Ethernet3.100 + description border-leaf-campus1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.4/31 + mtu 9214 +! +interface Ethernet3.200 + description border-leaf-campus1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.4/31 + mtu 9214 +! +! Link to Campus Border Leaf 2 +interface Ethernet4 + description border-leaf-campus2 + no switchport + mtu 9214 +! +interface Ethernet4.100 + description border-leaf-campus2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.6/31 + mtu 9214 +! +interface Ethernet4.200 + description border-leaf-campus2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.6/31 + mtu 9214 +! +! Inter-Core link +interface Ethernet5 + description core1 + no switchport + mtu 9214 +! +interface Ethernet5.100 + description core1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.200.129/31 + mtu 9214 +! +interface Ethernet5.200 + description core1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.200.131/31 + mtu 9214 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! OSPF for loopback reachability (default VRF) +router ospf 1 + router-id 10.0.200.2 + passive-interface default + no passive-interface Ethernet1.100 + no passive-interface Ethernet2.100 + no passive-interface Ethernet3.100 + no passive-interface Ethernet4.100 + no passive-interface Ethernet5.100 + network 10.0.200.2/32 area 0 + network 10.0.4.4/31 area 0 + network 10.0.4.6/31 area 0 + network 10.0.5.4/31 area 0 + network 10.0.5.6/31 area 0 + network 10.0.200.128/31 area 0 + max-lsa 12000 +! +! BGP Configuration +router bgp 65500 + router-id 10.0.200.2 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! iBGP to core1 (loopback-based, default VRF) + neighbor core_ibgp peer group + neighbor core_ibgp remote-as 65500 + neighbor core_ibgp update-source Loopback0 + neighbor core_ibgp next-hop-self + neighbor core_ibgp send-community extended + neighbor core_ibgp maximum-routes 12000 warning-only + neighbor 10.0.200.1 peer group core_ibgp + ! + ! eBGP to DC Border Leafs (default VRF) + neighbor dc_bl peer group + neighbor dc_bl remote-as 65005 + neighbor dc_bl send-community extended + neighbor dc_bl maximum-routes 12000 warning-only + neighbor 10.0.4.5 peer group dc_bl + neighbor 10.0.4.7 peer group dc_bl + ! + ! eBGP to Campus Border Leafs (default VRF) + neighbor campus_bl peer group + neighbor campus_bl remote-as 66005 + neighbor campus_bl send-community extended + neighbor campus_bl maximum-routes 12000 warning-only + neighbor 10.0.5.5 peer group campus_bl + neighbor 10.0.5.7 peer group campus_bl + ! + ! IPv4 address family (default VRF) + address-family ipv4 + neighbor core_ibgp activate + neighbor dc_bl activate + neighbor campus_bl activate + network 10.0.200.2/32 + ! + ! VRF Gold configuration - transit for inter-fabric routing + vrf gold + rd 10.0.200.2:100001 + router-id 10.0.200.2 + ! iBGP to core1 in VRF gold (P2P) + neighbor 10.0.200.130 remote-as 65500 + neighbor 10.0.200.130 next-hop-self + neighbor 10.0.200.130 send-community extended + neighbor 10.0.200.130 maximum-routes 12000 warning-only + ! eBGP to DC Border Leafs in VRF gold + neighbor 10.0.14.5 remote-as 65005 + neighbor 10.0.14.5 send-community extended + neighbor 10.0.14.5 maximum-routes 12000 warning-only + neighbor 10.0.14.7 remote-as 65005 + neighbor 10.0.14.7 send-community extended + neighbor 10.0.14.7 maximum-routes 12000 warning-only + ! eBGP to Campus Border Leafs in VRF gold + neighbor 10.0.15.5 remote-as 66005 + neighbor 10.0.15.5 send-community extended + neighbor 10.0.15.5 maximum-routes 12000 warning-only + neighbor 10.0.15.7 remote-as 66005 + neighbor 10.0.15.7 send-community extended + neighbor 10.0.15.7 maximum-routes 12000 warning-only + redistribute connected +! +end From 6e0dcce746568172728395e1e905cccce400b114 Mon Sep 17 00:00:00 2001 From: Damien Date: Sat, 18 Apr 2026 08:38:35 +0000 Subject: [PATCH 04/16] Add Campus EVPN-VXLAN fabric configs and host interfaces - campus-spine1/2 (AS 66000): eBGP underlay + EVPN RR toward leafs and border leafs, addressing plan 10.1.x.x. - campus-leaf1/2 (VTEP1, AS 66001, VTEP 10.1.255.11): VLAN 50 (stretched L2 VXLAN, VNI 110050) and VLAN 60 (VRF gold anycast 10.60.60.1, L3 VNI 100001). - campus-leaf3/4 (VTEP2, AS 66002, VTEP 10.1.255.12): VLAN 50 and VLAN 70 (VRF gold anycast 10.60.70.1). - border-leaf-campus1/2 (AS 66005, VTEP 10.1.255.21): MLAG pair, OSPF + eBGP to cores, VRF gold stitched via vxlan vrf gold vni 100001 with RT 1:100001. - campus-access1/2: L2-only uplinks to campus leaf MLAG pairs, trunks VLAN 50+60 / 50+70. - campus-host1/2 interface files: bond0 + VLAN sub-interfaces for the stretched L2 VLAN 50 and the VRF gold subnets. --- configs/border-leaf-campus1.cfg | 234 ++++++++++++++++++++++++++++++++ configs/border-leaf-campus2.cfg | 234 ++++++++++++++++++++++++++++++++ configs/campus-access1.cfg | 68 ++++++++++ configs/campus-access2.cfg | 68 ++++++++++ configs/campus-leaf1.cfg | 195 ++++++++++++++++++++++++++ configs/campus-leaf2.cfg | 195 ++++++++++++++++++++++++++ configs/campus-leaf3.cfg | 195 ++++++++++++++++++++++++++ configs/campus-leaf4.cfg | 195 ++++++++++++++++++++++++++ configs/campus-spine1.cfg | 124 +++++++++++++++++ configs/campus-spine2.cfg | 124 +++++++++++++++++ hosts/campus-host1_interfaces | 26 ++++ hosts/campus-host2_interfaces | 26 ++++ 12 files changed, 1684 insertions(+) create mode 100644 configs/border-leaf-campus1.cfg create mode 100644 configs/border-leaf-campus2.cfg create mode 100644 configs/campus-access1.cfg create mode 100644 configs/campus-access2.cfg create mode 100644 configs/campus-leaf1.cfg create mode 100644 configs/campus-leaf2.cfg create mode 100644 configs/campus-leaf3.cfg create mode 100644 configs/campus-leaf4.cfg create mode 100644 configs/campus-spine1.cfg create mode 100644 configs/campus-spine2.cfg create mode 100644 hosts/campus-host1_interfaces create mode 100644 hosts/campus-host2_interfaces diff --git a/configs/border-leaf-campus1.cfg b/configs/border-leaf-campus1.cfg new file mode 100644 index 0000000..dc6ddd1 --- /dev/null +++ b/configs/border-leaf-campus1.cfg @@ -0,0 +1,234 @@ +! Border-Leaf-Campus1 Configuration +! Campus Border Leaf - AS 66005 (MLAG pair with border-leaf-campus2) +! Provides egress from Campus EVPN-VXLAN fabric to Core L3 network +! +hostname border-leaf-campus1 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.22/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.1.199.254/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.1.3.4/31 + mtu 9214 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.1.250.21/32 +! +interface Loopback1 + description VTEP + ip address 10.1.255.21/32 +! +interface Loopback2 + description VRF-Gold-health + vrf gold + ip address 10.1.250.221/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Campus Spines +interface Ethernet11 + description campus-spine1 + no switchport + ip address 10.1.1.9/31 + mtu 9214 +! +interface Ethernet12 + description campus-spine2 + no switchport + ip address 10.1.2.9/31 + mtu 9214 +! +! Uplink to Core1 (subinterfaced: .100 default VRF, .200 VRF gold) +interface Ethernet13 + description core1 + no switchport + mtu 9214 +! +interface Ethernet13.100 + description core1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.1/31 + mtu 9214 +! +interface Ethernet13.200 + description core1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.1/31 + mtu 9214 +! +! Uplink to Core2 +interface Ethernet14 + description core2 + no switchport + mtu 9214 +! +interface Ethernet14.100 + description core2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.5/31 + mtu 9214 +! +interface Ethernet14.200 + description core2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.5/31 + mtu 9214 +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id border-leafs-campus + local-interface Vlan4090 + peer-address 10.1.199.255 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.23 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! OSPF for loopback reachability with Core (default VRF) +router ospf 1 + router-id 10.1.250.21 + passive-interface default + no passive-interface Ethernet13.100 + no passive-interface Ethernet14.100 + network 10.1.250.21/32 area 0 + network 10.0.5.0/31 area 0 + network 10.0.5.4/31 area 0 + max-lsa 12000 +! +! BGP Configuration +router bgp 66005 + router-id 10.1.250.21 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group (to Campus spines) + neighbor underlay peer group + neighbor underlay remote-as 66000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.1.1.8 peer group underlay + neighbor 10.1.2.8 peer group underlay + ! + ! iBGP peer-group (to MLAG peer) + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 66005 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.1.3.5 peer group underlay_ibgp + ! + ! EVPN peer-group (to Campus spines) + neighbor evpn peer group + neighbor evpn remote-as 66000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.1.250.1 peer group evpn + neighbor 10.1.250.2 peer group evpn + ! + ! eBGP to Core routers (default VRF) + neighbor core peer group + neighbor core remote-as 65500 + neighbor core send-community extended + neighbor core maximum-routes 12000 warning-only + neighbor 10.0.5.0 peer group core + neighbor 10.0.5.4 peer group core + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + neighbor core activate + network 10.1.250.21/32 + network 10.1.255.21/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.1.250.21:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + router-id 10.1.250.21 + neighbor 10.0.15.0 remote-as 65500 + neighbor 10.0.15.0 send-community extended + neighbor 10.0.15.0 maximum-routes 12000 warning-only + neighbor 10.0.15.4 remote-as 65500 + neighbor 10.0.15.4 send-community extended + neighbor 10.0.15.4 maximum-routes 12000 warning-only + redistribute connected + redistribute learned +! +end diff --git a/configs/border-leaf-campus2.cfg b/configs/border-leaf-campus2.cfg new file mode 100644 index 0000000..f1c4681 --- /dev/null +++ b/configs/border-leaf-campus2.cfg @@ -0,0 +1,234 @@ +! Border-Leaf-Campus2 Configuration +! Campus Border Leaf - AS 66005 (MLAG pair with border-leaf-campus1) +! Provides egress from Campus EVPN-VXLAN fabric to Core L3 network +! +hostname border-leaf-campus2 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.23/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.1.199.255/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.1.3.5/31 + mtu 9214 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.1.250.22/32 +! +interface Loopback1 + description VTEP + ip address 10.1.255.21/32 +! +interface Loopback2 + description VRF-Gold-health + vrf gold + ip address 10.1.250.222/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Campus Spines +interface Ethernet11 + description campus-spine1 + no switchport + ip address 10.1.1.11/31 + mtu 9214 +! +interface Ethernet12 + description campus-spine2 + no switchport + ip address 10.1.2.11/31 + mtu 9214 +! +! Uplink to Core1 (subinterfaced: .100 default VRF, .200 VRF gold) +interface Ethernet13 + description core1 + no switchport + mtu 9214 +! +interface Ethernet13.100 + description core1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.3/31 + mtu 9214 +! +interface Ethernet13.200 + description core1-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.3/31 + mtu 9214 +! +! Uplink to Core2 +interface Ethernet14 + description core2 + no switchport + mtu 9214 +! +interface Ethernet14.100 + description core2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.7/31 + mtu 9214 +! +interface Ethernet14.200 + description core2-vrf-gold + encapsulation dot1q vlan 200 + vrf gold + ip address 10.0.15.7/31 + mtu 9214 +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id border-leafs-campus + local-interface Vlan4090 + peer-address 10.1.199.254 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.22 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! OSPF for loopback reachability with Core (default VRF) +router ospf 1 + router-id 10.1.250.22 + passive-interface default + no passive-interface Ethernet13.100 + no passive-interface Ethernet14.100 + network 10.1.250.22/32 area 0 + network 10.0.5.2/31 area 0 + network 10.0.5.6/31 area 0 + max-lsa 12000 +! +! BGP Configuration +router bgp 66005 + router-id 10.1.250.22 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group (to Campus spines) + neighbor underlay peer group + neighbor underlay remote-as 66000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.1.1.10 peer group underlay + neighbor 10.1.2.10 peer group underlay + ! + ! iBGP peer-group (to MLAG peer) + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 66005 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.1.3.4 peer group underlay_ibgp + ! + ! EVPN peer-group (to Campus spines) + neighbor evpn peer group + neighbor evpn remote-as 66000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.1.250.1 peer group evpn + neighbor 10.1.250.2 peer group evpn + ! + ! eBGP to Core routers (default VRF) + neighbor core peer group + neighbor core remote-as 65500 + neighbor core send-community extended + neighbor core maximum-routes 12000 warning-only + neighbor 10.0.5.2 peer group core + neighbor 10.0.5.6 peer group core + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + neighbor core activate + network 10.1.250.22/32 + network 10.1.255.21/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.1.250.22:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + router-id 10.1.250.22 + neighbor 10.0.15.2 remote-as 65500 + neighbor 10.0.15.2 send-community extended + neighbor 10.0.15.2 maximum-routes 12000 warning-only + neighbor 10.0.15.6 remote-as 65500 + neighbor 10.0.15.6 send-community extended + neighbor 10.0.15.6 maximum-routes 12000 warning-only + redistribute connected + redistribute learned +! +end diff --git a/configs/campus-access1.cfg b/configs/campus-access1.cfg new file mode 100644 index 0000000..1aae6b0 --- /dev/null +++ b/configs/campus-access1.cfg @@ -0,0 +1,68 @@ +! Campus-Access1 Configuration +! L2-only access switch for Campus VTEP1 (campus-leaf1/leaf2) +! +hostname campus-access1 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! VLANs +vlan 50 + name test-l2-vxlan-campus +! +vlan 60 + name vrf-gold-campus-subnet1 +! +! Management interface +interface Management0 + ip address 172.16.0.61/24 +! +! Spanning-tree +spanning-tree mode mstp +spanning-tree edge-port bpduguard default +! +! Uplink to campus leaf MLAG pair (Port-Channel 10) +interface Ethernet1 + description campus-leaf1-uplink + channel-group 10 mode active +! +interface Ethernet2 + description campus-leaf2-uplink + channel-group 10 mode active +! +interface Port-Channel10 + description uplink-to-campus-leaf-mlag + switchport mode trunk + switchport trunk allowed vlan 50,60 + no shutdown +! +! Host-facing downlink (Port-Channel 1) +interface Ethernet3 + description campus-host1 + channel-group 1 mode active +! +interface Ethernet4 + description campus-host1 + channel-group 1 mode active +! +interface Port-Channel1 + description campus-host1 + switchport mode trunk + switchport trunk allowed vlan 50,60 + port-channel lacp fallback timeout 5 + port-channel lacp fallback individual + spanning-tree portfast + no shutdown +! +! Default route for management +ip route 0.0.0.0/0 172.16.0.254 +! +end diff --git a/configs/campus-access2.cfg b/configs/campus-access2.cfg new file mode 100644 index 0000000..700eb69 --- /dev/null +++ b/configs/campus-access2.cfg @@ -0,0 +1,68 @@ +! Campus-Access2 Configuration +! L2-only access switch for Campus VTEP2 (campus-leaf3/leaf4) +! +hostname campus-access2 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! VLANs +vlan 50 + name test-l2-vxlan-campus +! +vlan 70 + name vrf-gold-campus-subnet2 +! +! Management interface +interface Management0 + ip address 172.16.0.62/24 +! +! Spanning-tree +spanning-tree mode mstp +spanning-tree edge-port bpduguard default +! +! Uplink to campus leaf MLAG pair (Port-Channel 10) +interface Ethernet1 + description campus-leaf3-uplink + channel-group 10 mode active +! +interface Ethernet2 + description campus-leaf4-uplink + channel-group 10 mode active +! +interface Port-Channel10 + description uplink-to-campus-leaf-mlag + switchport mode trunk + switchport trunk allowed vlan 50,70 + no shutdown +! +! Host-facing downlink (Port-Channel 1) +interface Ethernet3 + description campus-host2 + channel-group 1 mode active +! +interface Ethernet4 + description campus-host2 + channel-group 1 mode active +! +interface Port-Channel1 + description campus-host2 + switchport mode trunk + switchport trunk allowed vlan 50,70 + port-channel lacp fallback timeout 5 + port-channel lacp fallback individual + spanning-tree portfast + no shutdown +! +! Default route for management +ip route 0.0.0.0/0 172.16.0.254 +! +end diff --git a/configs/campus-leaf1.cfg b/configs/campus-leaf1.cfg new file mode 100644 index 0000000..29c5a10 --- /dev/null +++ b/configs/campus-leaf1.cfg @@ -0,0 +1,195 @@ +! Campus-Leaf1 Configuration +! Campus VTEP1 - AS 66001 (MLAG pair with campus-leaf2) +! +hostname campus-leaf1 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 50 + name test-l2-vxlan-campus +! +vlan 60 + name vrf-gold-campus-subnet1 +! +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.51/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.1.199.252/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.1.3.0/31 + mtu 9214 +! +! VRF VLAN Interface +interface Vlan60 + vrf gold + ip address 10.60.60.2/24 + ip virtual-router address 10.60.60.1 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.1.250.11/32 +! +interface Loopback1 + description VTEP + ip address 10.1.255.11/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Campus Spines +interface Ethernet11 + description campus-spine1 + no switchport + ip address 10.1.1.1/31 + mtu 9214 +! +interface Ethernet12 + description campus-spine2 + no switchport + ip address 10.1.2.1/31 + mtu 9214 +! +! Access-facing interface (MLAG with LACP) +interface Ethernet1 + description campus-access1 + channel-group 1 mode active +! +interface Port-Channel1 + description campus-access1 + switchport mode trunk + switchport trunk allowed vlan 50,60 + mlag 1 + port-channel lacp fallback timeout 5 + port-channel lacp fallback individual + no shutdown +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id campus-leafs + local-interface Vlan4090 + peer-address 10.1.199.253 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.52 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vlan 50 vni 110050 + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! BGP Configuration +router bgp 66001 + router-id 10.1.250.11 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group + neighbor underlay peer group + neighbor underlay remote-as 66000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.1.1.0 peer group underlay + neighbor 10.1.2.0 peer group underlay + ! + ! iBGP peer-group + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 66001 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.1.3.1 peer group underlay_ibgp + ! + ! EVPN peer-group + neighbor evpn peer group + neighbor evpn remote-as 66000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.1.250.1 peer group evpn + neighbor 10.1.250.2 peer group evpn + ! + ! VLAN 50 for L2 VXLAN (stretched across Campus VTEPs) + vlan 50 + rd 66001:110050 + route-target both 50:110050 + redistribute learned + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + network 10.1.250.11/32 + network 10.1.255.11/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.1.250.11:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + redistribute connected +! +end diff --git a/configs/campus-leaf2.cfg b/configs/campus-leaf2.cfg new file mode 100644 index 0000000..54ca2ec --- /dev/null +++ b/configs/campus-leaf2.cfg @@ -0,0 +1,195 @@ +! Campus-Leaf2 Configuration +! Campus VTEP1 - AS 66001 (MLAG pair with campus-leaf1) +! +hostname campus-leaf2 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 50 + name test-l2-vxlan-campus +! +vlan 60 + name vrf-gold-campus-subnet1 +! +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.52/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.1.199.253/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.1.3.1/31 + mtu 9214 +! +! VRF VLAN Interface +interface Vlan60 + vrf gold + ip address 10.60.60.3/24 + ip virtual-router address 10.60.60.1 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.1.250.12/32 +! +interface Loopback1 + description VTEP + ip address 10.1.255.11/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Campus Spines +interface Ethernet11 + description campus-spine1 + no switchport + ip address 10.1.1.3/31 + mtu 9214 +! +interface Ethernet12 + description campus-spine2 + no switchport + ip address 10.1.2.3/31 + mtu 9214 +! +! Access-facing interface (MLAG with LACP) +interface Ethernet1 + description campus-access1 + channel-group 1 mode active +! +interface Port-Channel1 + description campus-access1 + switchport mode trunk + switchport trunk allowed vlan 50,60 + mlag 1 + port-channel lacp fallback timeout 5 + port-channel lacp fallback individual + no shutdown +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id campus-leafs + local-interface Vlan4090 + peer-address 10.1.199.252 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.51 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vlan 50 vni 110050 + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! BGP Configuration +router bgp 66001 + router-id 10.1.250.12 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group + neighbor underlay peer group + neighbor underlay remote-as 66000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.1.1.2 peer group underlay + neighbor 10.1.2.2 peer group underlay + ! + ! iBGP peer-group + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 66001 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.1.3.0 peer group underlay_ibgp + ! + ! EVPN peer-group + neighbor evpn peer group + neighbor evpn remote-as 66000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.1.250.1 peer group evpn + neighbor 10.1.250.2 peer group evpn + ! + ! VLAN 50 for L2 VXLAN (stretched across Campus VTEPs) + vlan 50 + rd 66001:110050 + route-target both 50:110050 + redistribute learned + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + network 10.1.250.12/32 + network 10.1.255.11/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.1.250.12:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + redistribute connected +! +end diff --git a/configs/campus-leaf3.cfg b/configs/campus-leaf3.cfg new file mode 100644 index 0000000..fbe98cd --- /dev/null +++ b/configs/campus-leaf3.cfg @@ -0,0 +1,195 @@ +! Campus-Leaf3 Configuration +! Campus VTEP2 - AS 66002 (MLAG pair with campus-leaf4) +! +hostname campus-leaf3 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 50 + name test-l2-vxlan-campus +! +vlan 70 + name vrf-gold-campus-subnet2 +! +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.53/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.1.199.250/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.1.3.2/31 + mtu 9214 +! +! VRF VLAN Interface +interface Vlan70 + vrf gold + ip address 10.60.70.2/24 + ip virtual-router address 10.60.70.1 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.1.250.13/32 +! +interface Loopback1 + description VTEP + ip address 10.1.255.12/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Campus Spines +interface Ethernet11 + description campus-spine1 + no switchport + ip address 10.1.1.5/31 + mtu 9214 +! +interface Ethernet12 + description campus-spine2 + no switchport + ip address 10.1.2.5/31 + mtu 9214 +! +! Access-facing interface (MLAG with LACP) +interface Ethernet1 + description campus-access2 + channel-group 1 mode active +! +interface Port-Channel1 + description campus-access2 + switchport mode trunk + switchport trunk allowed vlan 50,70 + mlag 1 + port-channel lacp fallback timeout 5 + port-channel lacp fallback individual + no shutdown +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id campus-leafs + local-interface Vlan4090 + peer-address 10.1.199.251 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.54 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vlan 50 vni 110050 + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! BGP Configuration +router bgp 66002 + router-id 10.1.250.13 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group + neighbor underlay peer group + neighbor underlay remote-as 66000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.1.1.4 peer group underlay + neighbor 10.1.2.4 peer group underlay + ! + ! iBGP peer-group + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 66002 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.1.3.3 peer group underlay_ibgp + ! + ! EVPN peer-group + neighbor evpn peer group + neighbor evpn remote-as 66000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.1.250.1 peer group evpn + neighbor 10.1.250.2 peer group evpn + ! + ! VLAN 50 for L2 VXLAN (stretched across Campus VTEPs) + vlan 50 + rd 66002:110050 + route-target both 50:110050 + redistribute learned + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + network 10.1.250.13/32 + network 10.1.255.12/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.1.250.13:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + redistribute connected +! +end diff --git a/configs/campus-leaf4.cfg b/configs/campus-leaf4.cfg new file mode 100644 index 0000000..0a1a0da --- /dev/null +++ b/configs/campus-leaf4.cfg @@ -0,0 +1,195 @@ +! Campus-Leaf4 Configuration +! Campus VTEP2 - AS 66002 (MLAG pair with campus-leaf3) +! +hostname campus-leaf4 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +! +! Enable routing protocols +service routing protocols model multi-agent +! +! VRF Definition +vrf instance gold +! +! VLANs +vlan 50 + name test-l2-vxlan-campus +! +vlan 70 + name vrf-gold-campus-subnet2 +! +vlan 4090 + name mlag-peer + trunk group mlag-peer +! +vlan 4091 + name mlag-ibgp + trunk group mlag-peer +! +! Management interface +interface Management0 + ip address 172.16.0.54/24 +! +! MLAG Peer-link SVI +interface Vlan4090 + description MLAG Peer-Link + ip address 10.1.199.251/31 + no autostate +! +! iBGP Peering SVI +interface Vlan4091 + description MLAG iBGP Peering + ip address 10.1.3.3/31 + mtu 9214 +! +! VRF VLAN Interface +interface Vlan70 + vrf gold + ip address 10.60.70.3/24 + ip virtual-router address 10.60.70.1 +! +! Loopbacks +interface Loopback0 + description Router-ID + ip address 10.1.250.14/32 +! +interface Loopback1 + description VTEP + ip address 10.1.255.12/32 +! +! MLAG Peer-link +interface Ethernet10 + description mlag peer link + channel-group 999 mode active +! +interface Port-Channel999 + description MLAG Peer + switchport mode trunk + switchport trunk group mlag-peer + spanning-tree link-type point-to-point +! +! Underlay P2P interfaces to Campus Spines +interface Ethernet11 + description campus-spine1 + no switchport + ip address 10.1.1.7/31 + mtu 9214 +! +interface Ethernet12 + description campus-spine2 + no switchport + ip address 10.1.2.7/31 + mtu 9214 +! +! Access-facing interface (MLAG with LACP) +interface Ethernet1 + description campus-access2 + channel-group 1 mode active +! +interface Port-Channel1 + description campus-access2 + switchport mode trunk + switchport trunk allowed vlan 50,70 + mlag 1 + port-channel lacp fallback timeout 5 + port-channel lacp fallback individual + no shutdown +! +! Spanning-tree +no spanning-tree vlan 4090 +no spanning-tree vlan 4091 +! +! Virtual MAC for Anycast Gateway +ip virtual-router mac-address c001.cafe.babe +! +! MLAG Configuration +mlag configuration + domain-id campus-leafs + local-interface Vlan4090 + peer-address 10.1.199.250 + peer-link Port-Channel999 + dual-primary detection delay 10 action errdisable all-interfaces + peer-address heartbeat 172.16.0.53 vrf mgmt +! +! VXLAN Interface +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan learn-restrict any + vxlan vlan 50 vni 110050 + vxlan vrf gold vni 100001 +! +! IP Routing +ip routing +ip routing vrf gold +ip route 100.64.0.0/10 172.16.0.254 +! +! BGP Configuration +router bgp 66002 + router-id 10.1.250.14 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay peer-group + neighbor underlay peer group + neighbor underlay remote-as 66000 + neighbor underlay maximum-routes 12000 warning-only + neighbor 10.1.1.6 peer group underlay + neighbor 10.1.2.6 peer group underlay + ! + ! iBGP peer-group + neighbor underlay_ibgp peer group + neighbor underlay_ibgp remote-as 66002 + neighbor underlay_ibgp maximum-routes 12000 warning-only + neighbor underlay_ibgp next-hop-self + neighbor 10.1.3.2 peer group underlay_ibgp + ! + ! EVPN peer-group + neighbor evpn peer group + neighbor evpn remote-as 66000 + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + neighbor 10.1.250.1 peer group evpn + neighbor 10.1.250.2 peer group evpn + ! + ! VLAN 50 for L2 VXLAN (stretched across Campus VTEPs) + vlan 50 + rd 66002:110050 + route-target both 50:110050 + redistribute learned + ! + ! IPv4 address family + address-family ipv4 + neighbor underlay activate + neighbor underlay_ibgp activate + network 10.1.250.14/32 + network 10.1.255.12/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate + ! + ! VRF Gold configuration + vrf gold + rd 10.1.250.14:1 + route-target import evpn 1:100001 + route-target export evpn 1:100001 + redistribute connected +! +end diff --git a/configs/campus-spine1.cfg b/configs/campus-spine1.cfg new file mode 100644 index 0000000..f982a3e --- /dev/null +++ b/configs/campus-spine1.cfg @@ -0,0 +1,124 @@ +! Campus-Spine1 Configuration +! Campus BGP EVPN Spine - AS 66000 +! +hostname campus-spine1 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +ip route 100.64.0.0/10 172.16.0.254 +! +! Enable routing protocols +service routing protocols model multi-agent +! +! Management interface +interface Management0 + ip address 172.16.0.20/24 +! +! Loopback for BGP Router-ID +interface Loopback0 + ip address 10.1.250.1/32 +! +! Underlay P2P interfaces to Campus Leafs +interface Ethernet1 + description campus-leaf1 + no switchport + ip address 10.1.1.0/31 + mtu 9214 +! +interface Ethernet2 + description campus-leaf2 + no switchport + ip address 10.1.1.2/31 + mtu 9214 +! +interface Ethernet3 + description campus-leaf3 + no switchport + ip address 10.1.1.4/31 + mtu 9214 +! +interface Ethernet4 + description campus-leaf4 + no switchport + ip address 10.1.1.6/31 + mtu 9214 +! +! Underlay P2P interfaces to Campus Border Leafs +interface Ethernet5 + description border-leaf-campus1 + no switchport + ip address 10.1.1.8/31 + mtu 9214 +! +interface Ethernet6 + description border-leaf-campus2 + no switchport + ip address 10.1.1.10/31 + mtu 9214 +! +! BGP Configuration +router bgp 66000 + router-id 10.1.250.1 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay IPv4 neighbors + neighbor 10.1.1.1 remote-as 66001 + neighbor 10.1.1.3 remote-as 66001 + neighbor 10.1.1.5 remote-as 66002 + neighbor 10.1.1.7 remote-as 66002 + neighbor 10.1.1.9 remote-as 66005 + neighbor 10.1.1.11 remote-as 66005 + ! + ! EVPN peer-group configuration + neighbor evpn peer group + neighbor evpn next-hop-unchanged + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + ! + ! EVPN neighbors (to campus leaf loopbacks) + neighbor 10.1.250.11 peer group evpn + neighbor 10.1.250.11 remote-as 66001 + neighbor 10.1.250.12 peer group evpn + neighbor 10.1.250.12 remote-as 66001 + neighbor 10.1.250.13 peer group evpn + neighbor 10.1.250.13 remote-as 66002 + neighbor 10.1.250.14 peer group evpn + neighbor 10.1.250.14 remote-as 66002 + ! + ! EVPN neighbors (to campus border-leaf loopbacks) + neighbor 10.1.250.21 peer group evpn + neighbor 10.1.250.21 remote-as 66005 + neighbor 10.1.250.22 peer group evpn + neighbor 10.1.250.22 remote-as 66005 + ! + ! IPv4 address family + address-family ipv4 + neighbor 10.1.1.1 activate + neighbor 10.1.1.3 activate + neighbor 10.1.1.5 activate + neighbor 10.1.1.7 activate + neighbor 10.1.1.9 activate + neighbor 10.1.1.11 activate + network 10.1.250.1/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate +! +end diff --git a/configs/campus-spine2.cfg b/configs/campus-spine2.cfg new file mode 100644 index 0000000..d49ce0e --- /dev/null +++ b/configs/campus-spine2.cfg @@ -0,0 +1,124 @@ +! Campus-Spine2 Configuration +! Campus BGP EVPN Spine - AS 66000 +! +hostname campus-spine2 +! +! LLDP Management0 +lldp management-address Management0 +! +! enable gNMI API +management api gnmi + transport grpc default + provider eos-native +! +! admin/admin for ssh access +username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 +! +! Enable IP routing +ip routing +ip route 100.64.0.0/10 172.16.0.254 +! +! Enable routing protocols +service routing protocols model multi-agent +! +! Management interface +interface Management0 + ip address 172.16.0.21/24 +! +! Loopback for BGP Router-ID +interface Loopback0 + ip address 10.1.250.2/32 +! +! Underlay P2P interfaces to Campus Leafs +interface Ethernet1 + description campus-leaf1 + no switchport + ip address 10.1.2.0/31 + mtu 9214 +! +interface Ethernet2 + description campus-leaf2 + no switchport + ip address 10.1.2.2/31 + mtu 9214 +! +interface Ethernet3 + description campus-leaf3 + no switchport + ip address 10.1.2.4/31 + mtu 9214 +! +interface Ethernet4 + description campus-leaf4 + no switchport + ip address 10.1.2.6/31 + mtu 9214 +! +! Underlay P2P interfaces to Campus Border Leafs +interface Ethernet5 + description border-leaf-campus1 + no switchport + ip address 10.1.2.8/31 + mtu 9214 +! +interface Ethernet6 + description border-leaf-campus2 + no switchport + ip address 10.1.2.10/31 + mtu 9214 +! +! BGP Configuration +router bgp 66000 + router-id 10.1.250.2 + no bgp default ipv4-unicast + bgp log-neighbor-changes + distance bgp 20 200 200 + maximum-paths 4 ecmp 64 + ! + ! Underlay IPv4 neighbors + neighbor 10.1.2.1 remote-as 66001 + neighbor 10.1.2.3 remote-as 66001 + neighbor 10.1.2.5 remote-as 66002 + neighbor 10.1.2.7 remote-as 66002 + neighbor 10.1.2.9 remote-as 66005 + neighbor 10.1.2.11 remote-as 66005 + ! + ! EVPN peer-group configuration + neighbor evpn peer group + neighbor evpn next-hop-unchanged + neighbor evpn update-source Loopback0 + neighbor evpn ebgp-multihop 3 + neighbor evpn send-community extended + neighbor evpn maximum-routes 12000 warning-only + ! + ! EVPN neighbors (to campus leaf loopbacks) + neighbor 10.1.250.11 peer group evpn + neighbor 10.1.250.11 remote-as 66001 + neighbor 10.1.250.12 peer group evpn + neighbor 10.1.250.12 remote-as 66001 + neighbor 10.1.250.13 peer group evpn + neighbor 10.1.250.13 remote-as 66002 + neighbor 10.1.250.14 peer group evpn + neighbor 10.1.250.14 remote-as 66002 + ! + ! EVPN neighbors (to campus border-leaf loopbacks) + neighbor 10.1.250.21 peer group evpn + neighbor 10.1.250.21 remote-as 66005 + neighbor 10.1.250.22 peer group evpn + neighbor 10.1.250.22 remote-as 66005 + ! + ! IPv4 address family + address-family ipv4 + neighbor 10.1.2.1 activate + neighbor 10.1.2.3 activate + neighbor 10.1.2.5 activate + neighbor 10.1.2.7 activate + neighbor 10.1.2.9 activate + neighbor 10.1.2.11 activate + network 10.1.250.2/32 + ! + ! EVPN address family + address-family evpn + neighbor evpn activate +! +end diff --git a/hosts/campus-host1_interfaces b/hosts/campus-host1_interfaces new file mode 100644 index 0000000..9033698 --- /dev/null +++ b/hosts/campus-host1_interfaces @@ -0,0 +1,26 @@ +auto lo +iface lo inet loopback + +auto bond0 +iface bond0 inet manual + use bond + bond-slaves eth1 eth2 + bond-mode 802.3ad + bond-miimon 100 + bond-lacp-rate fast + up ip link set $IFACE up + +auto bond0.50 +iface bond0.50 inet static + address 10.50.50.101 + netmask 255.255.255.0 + vlan-raw-device bond0 + up ip link set $IFACE up + +auto bond0.60 +iface bond0.60 inet static + address 10.60.60.101 + netmask 255.255.255.0 + gateway 10.60.60.1 + vlan-raw-device bond0 + up ip link set $IFACE up diff --git a/hosts/campus-host2_interfaces b/hosts/campus-host2_interfaces new file mode 100644 index 0000000..baa420a --- /dev/null +++ b/hosts/campus-host2_interfaces @@ -0,0 +1,26 @@ +auto lo +iface lo inet loopback + +auto bond0 +iface bond0 inet manual + use bond + bond-slaves eth1 eth2 + bond-mode 802.3ad + bond-miimon 100 + bond-lacp-rate fast + up ip link set $IFACE up + +auto bond0.50 +iface bond0.50 inet static + address 10.50.50.102 + netmask 255.255.255.0 + vlan-raw-device bond0 + up ip link set $IFACE up + +auto bond0.70 +iface bond0.70 inet static + address 10.60.70.102 + netmask 255.255.255.0 + gateway 10.60.70.1 + vlan-raw-device bond0 + up ip link set $IFACE up From ff15e90b5ccfc57bb91df2724a0835c4806058af Mon Sep 17 00:00:00 2001 From: Damien Date: Sat, 18 Apr 2026 08:38:44 +0000 Subject: [PATCH 05/16] Update docs and diagram for extended multi-fabric topology - README: rewritten node inventory, AS map, addressing plan (management, Lo0/Lo1, P2P, hosts), VNI/RD/RT tables, control-plane summary and end-to-end Campus <-> DC test procedures through the Core (VRF gold stitching). - hosts/README: document the two new Campus host configurations. - assets/arista-evpn-fabric.svg: new three-zone layout (Campus, Core, DC) with legend. - evpn-lab.clab.yml.annotations.json: reposition nodes and add zone labels so the ContainerLab graph matches the extended topology. --- README.md | 421 ++++++++++-------- assets/arista-evpn-fabric.svg | 690 +++++++++++++---------------- evpn-lab.clab.yml.annotations.json | 197 +++----- hosts/README.md | 7 + 4 files changed, 610 insertions(+), 705 deletions(-) diff --git a/README.md b/README.md index 57b107e..5f94966 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,23 @@ -# Arista EVPN-VXLAN ContainerLab +# Arista EVPN-VXLAN ContainerLab — DC + Core + Campus -A production-ready Arista BGP EVPN-VXLAN data center fabric topology using ContainerLab and cEOS. +An extended Arista BGP EVPN-VXLAN multi-fabric lab using ContainerLab and cEOS. The topology interconnects a **Data Center fabric** and a **Campus fabric** through a dedicated **Core L3 transit zone**, with a VRF (`gold`) stretched end-to-end across both fabrics. ## 🎯 Overview -This lab demonstrates a complete 3-tier EVPN-VXLAN data center fabric with: +| Zone | Devices | +| ------ | --------------------------------------------------------------------------------------- | +| DC | 2 spines, 8 leafs (4 MLAG VTEPs), 2 border leafs (MLAG), 4 access switches, 4 hosts | +| Core | 2 core routers (iBGP AS 65500, OSPF underlay with BLs, eBGP to DC & Campus BLs) | +| Campus | 2 spines, 4 leafs (2 MLAG VTEPs), 2 border leafs (MLAG), 2 access switches, 2 hosts | -- **2 Spine switches** (BGP Route Reflectors) -- **8 Leaf switches** forming 4 VTEPs (MLAG pairs) -- **4 Access switches** (L2-only, dual-homed to leaf MLAG pairs) -- **BGP EVPN overlay** with L2/L3 VXLAN -- **MLAG configuration** for high availability -- **Test hosts** for validation +Key design choices: + +- **eBGP** in both fabrics (underlay + EVPN overlay) between spines and leafs / border leafs. +- **OSPF area 0 + eBGP multi-hop** between each Border Leaf pair and both Core routers (over dot1q subinterfaces: `.100` = default VRF underlay, `.200` = VRF `gold`). +- **MLAG** everywhere there is dual-homing (leaf pairs, border-leaf pairs, access → leafs, host → access). +- **VRF `gold`** is stretched end-to-end: DC leafs (VLAN 34 / 78) ↔ DC-BL ↔ Core ↔ Campus-BL ↔ Campus leafs (VLAN 60 / 70), all sharing L3 VNI `100001`. +- **VLAN 50** is a campus-local L2 VXLAN stretched between the two Campus VTEPs. +- **Convention**: L2 VNI = `110000 + vlan_id`, L3 VNI = `100001` for VRF `gold`, RT `1:100001` in both fabrics. ## 📐 Topology @@ -21,284 +27,323 @@ This lab demonstrates a complete 3-tier EVPN-VXLAN data center fabric with: ### Prerequisites -- ContainerLab installed -- Docker installed +- ContainerLab +- Docker - Arista cEOS image: `ceos:4.35.0` ### Deploy the Lab ```bash -# Clone the repository git clone https://gitea.arnodo.fr/Damien/arista-evpn-vxlan-clab.git cd arista-evpn-vxlan-clab -# Deploy the topology sudo containerlab deploy -t evpn-lab.clab.yml - -# Check status sudo containerlab inspect -t evpn-lab.clab.yml ``` ### Access Devices ```bash -# SSH to any device (password: admin) +# SSH (password: admin) — works for every cEOS node ssh admin@clab-arista-evpn-fabric-leaf1 +ssh admin@clab-arista-evpn-fabric-core1 +ssh admin@clab-arista-evpn-fabric-campus-leaf1 -# Or use docker exec -docker exec -it clab-arista-evpn-fabric-leaf1 Cli +# Or via docker exec +docker exec -it clab-arista-evpn-fabric-border-leaf-dc1 Cli ``` -## 📋 Configuration Details +## 📋 Architecture -### AS Numbers +### Node Inventory -- **Spine**: AS 65000 -- **VTEP1 (Leaf1/2)**: AS 65001 -- **VTEP2 (Leaf3/4)**: AS 65002 -- **VTEP3 (Leaf5/6)**: AS 65003 -- **VTEP4 (Leaf7/8)**: AS 65004 +| Zone | Role | Nodes | AS | +| ------ | ----------------------- | ------------------------------------------------------ | ------ | +| DC | Spine | `spine1`, `spine2` | 65000 | +| DC | Leaf VTEP1 (MLAG) | `leaf1`, `leaf2` | 65001 | +| DC | Leaf VTEP2 (MLAG) | `leaf3`, `leaf4` | 65002 | +| DC | Leaf VTEP3 (MLAG) | `leaf5`, `leaf6` | 65003 | +| DC | Leaf VTEP4 (MLAG) | `leaf7`, `leaf8` | 65004 | +| DC | Border Leaf (MLAG) | `border-leaf-dc1`, `border-leaf-dc2` | 65005 | +| DC | Access (L2-only) | `access1`-`access4` | — | +| DC | Host | `host1`-`host4` | — | +| Core | Core router | `core1`, `core2` | 65500 | +| Campus | Spine | `campus-spine1`, `campus-spine2` | 66000 | +| Campus | Leaf VTEP1 (MLAG) | `campus-leaf1`, `campus-leaf2` | 66001 | +| Campus | Leaf VTEP2 (MLAG) | `campus-leaf3`, `campus-leaf4` | 66002 | +| Campus | Border Leaf (MLAG) | `border-leaf-campus1`, `border-leaf-campus2` | 66005 | +| Campus | Access (L2-only) | `campus-access1`, `campus-access2` | — | +| Campus | Host | `campus-host1`, `campus-host2` | — | + +### AS Numbering + +| AS | Role | +| ----- | ---------------------------------- | +| 65000 | DC Spine | +| 65001 | DC VTEP1 (leaf1/2) | +| 65002 | DC VTEP2 (leaf3/4) | +| 65003 | DC VTEP3 (leaf5/6) | +| 65004 | DC VTEP4 (leaf7/8) | +| 65005 | DC Border Leaf pair | +| 65500 | Core (iBGP between core1 & core2) | +| 66000 | Campus Spine | +| 66001 | Campus VTEP1 (campus-leaf1/2) | +| 66002 | Campus VTEP2 (campus-leaf3/4) | +| 66005 | Campus Border Leaf pair | ### Access Switches -| Access Switch | Uplink Leaf Pair | VLAN(s) | Connected Host | -| ------------- | ---------------- | ------- | -------------- | -| access1 | Leaf1/2 (VTEP1) | 40 | host1 | -| access2 | Leaf3/4 (VTEP2) | 34 | host2 | -| access3 | Leaf5/6 (VTEP3) | 40 | host3 | -| access4 | Leaf7/8 (VTEP4) | 78 | host4 | +| Access Switch | Uplink Pair | VLANs | Host | +| --------------- | ------------------------ | -------- | -------------- | +| access1 | leaf1/2 (VTEP1) | 40 | host1 | +| access2 | leaf3/4 (VTEP2) | 34 | host2 | +| access3 | leaf5/6 (VTEP3) | 40 | host3 | +| access4 | leaf7/8 (VTEP4) | 78 | host4 | +| campus-access1 | campus-leaf1/2 (VTEP1) | 50, 60 | campus-host1 | +| campus-access2 | campus-leaf3/4 (VTEP2) | 50, 70 | campus-host2 | -- L2-only switches with LACP uplinks (Port-Channel 10) to leaf MLAG pairs -- Host-facing downlinks via LACP (Port-Channel 1) -- STP mode MSTP with edge-port BPDU guard +All access switches are L2-only, LACP-bonded to their leaf MLAG pair via `Port-Channel10`, with host downlinks on `Port-Channel1`. MSTP + edge-port BPDU guard. -### IP Addressing +## 🧭 IP Addressing Plan -#### Management Network +### Management (`172.16.0.0/24`) -- Subnet: `172.16.0.0/24` -- Spine1: `172.16.0.1` -- Spine2: `172.16.0.2` -- Leaf1: `172.16.0.25`, Leaf2: `172.16.0.50`, Leaf3-8: `172.16.0.27-32` -- Access1-4: `172.16.0.41-44` +| Node | IP | Node | IP | +| ------------------------- | --------------- | ------------------------- | --------------- | +| spine1 | 172.16.0.1 | campus-spine1 | 172.16.0.20 | +| spine2 | 172.16.0.2 | campus-spine2 | 172.16.0.21 | +| border-leaf-dc1 | 172.16.0.3 | border-leaf-campus1 | 172.16.0.22 | +| border-leaf-dc2 | 172.16.0.4 | border-leaf-campus2 | 172.16.0.23 | +| core1 | 172.16.0.10 | campus-leaf1-4 | 172.16.0.51-54 | +| core2 | 172.16.0.11 | campus-access1 | 172.16.0.61 | +| leaf1 | 172.16.0.25 | campus-access2 | 172.16.0.62 | +| leaf2 | 172.16.0.50 | host1-4 | 172.16.0.101-104| +| leaf3-8 | 172.16.0.27-32 | campus-host1 | 172.16.0.105 | +| access1-4 | 172.16.0.41-44 | campus-host2 | 172.16.0.106 | -#### Loopback Interfaces +Gateway: `172.16.0.254`. -- **Router-ID Loopbacks (Lo0)**: `10.0.250.0/24` - - Spine1: `10.0.250.1/32` - - Spine2: `10.0.250.2/32` - - Leaf1-8: `10.0.250.11-18/32` +### Router-ID Loopback0 (`Lo0`) -- **VTEP Loopbacks (Lo1)**: `10.0.255.0/24` - - VTEP1: `10.0.255.11/32` - - VTEP2: `10.0.255.12/32` - - VTEP3: `10.0.255.13/32` - - VTEP4: `10.0.255.14/32` +| Zone | Range | Nodes | +| ------ | ------------------- | --------------------------------------------------------------------- | +| DC | `10.0.250.0/24` | spine1 .1, spine2 .2, leaf1-8 .11-.18, BL-dc1 .21, BL-dc2 .22 | +| Core | `10.0.200.0/24` | core1 `10.0.200.1`, core2 `10.0.200.2` | +| Campus | `10.1.250.0/24` | campus-spine1 .1, campus-spine2 .2, campus-leaf1-4 .11-.14, BL-campus1 .21, BL-campus2 .22 | -#### Underlay P2P Links +### VTEP Loopback1 (`Lo1`) — shared per MLAG pair -- Spine1 to Leafs: `10.0.1.0/31`, `10.0.1.2/31`, ... `10.0.1.14/31` -- Spine2 to Leafs: `10.0.2.0/31`, `10.0.2.2/31`, ... `10.0.2.14/31` -- MLAG iBGP peering: `10.0.3.0/31`, `10.0.3.2/31`, `10.0.3.4/31`, `10.0.3.6/31` +| Fabric | VTEP | Address | Leafs | +| ------ | ------ | --------------- | ---------------------- | +| DC | VTEP1 | `10.0.255.11` | leaf1, leaf2 | +| DC | VTEP2 | `10.0.255.12` | leaf3, leaf4 | +| DC | VTEP3 | `10.0.255.13` | leaf5, leaf6 | +| DC | VTEP4 | `10.0.255.14` | leaf7, leaf8 | +| DC | BL | `10.0.255.15` | border-leaf-dc1/2 | +| Campus | VTEP1 | `10.1.255.11` | campus-leaf1/2 | +| Campus | VTEP2 | `10.1.255.12` | campus-leaf3/4 | +| Campus | BL | `10.1.255.21` | border-leaf-campus1/2 | -#### Host Network Addressing +### Underlay P2P (`/31`) -| Host | VLAN | VRF | IP Address | Gateway | Type | -| ----- | ---- | ------- | --------------- | ---------- | -------- | -| host1 | 40 | default | 10.40.40.101/24 | - | L2 VXLAN | -| host2 | 34 | gold | 10.34.34.102/24 | 10.34.34.1 | L3 VXLAN | -| host3 | 40 | default | 10.40.40.103/24 | - | L2 VXLAN | -| host4 | 78 | gold | 10.78.78.104/24 | 10.78.78.1 | L3 VXLAN | +| Segment | Subnets | +| -------------------------------- | --------------------------------------- | +| DC spine1 ↔ leaf/BL | `10.0.1.0/31` … `10.0.1.18/31` | +| DC spine2 ↔ leaf/BL | `10.0.2.0/31` … `10.0.2.18/31` | +| DC MLAG iBGP SVIs (per pair) | `10.0.3.0/31`, `.2/31`, `.4/31`, `.6/31`, `.8/31` (BL) | +| DC MLAG peer-link SVIs | `10.0.199.240/31` … `10.0.199.246/31` | +| DC-BL ↔ Core (default, `.100`) | `10.0.4.0/31` .. `10.0.4.6/31` | +| DC-BL ↔ Core (VRF gold, `.200`) | `10.0.14.0/31` .. `10.0.14.6/31` | +| Campus-BL ↔ Core (default) | `10.0.5.0/31` .. `10.0.5.6/31` | +| Campus-BL ↔ Core (VRF gold) | `10.0.15.0/31` .. `10.0.15.6/31` | +| Core1 ↔ Core2 (default) | `10.0.200.128/31` | +| Core1 ↔ Core2 (VRF gold) | `10.0.200.130/31` | +| Campus spine1 ↔ leaf/BL | `10.1.1.0/31` … `10.1.1.10/31` | +| Campus spine2 ↔ leaf/BL | `10.1.2.0/31` … `10.1.2.10/31` | +| Campus MLAG iBGP SVIs | `10.1.3.0/31`, `.2/31`, `.4/31` | +| Campus MLAG peer-link SVIs | `10.1.199.250/31` … `10.1.199.254/31` | -**Notes:** +### Host Addressing -- Host1 and Host3 are in VLAN 40 (L2 VXLAN only) and can communicate at Layer 2 -- Host2 and Host4 are in VRF "gold" with different subnets, communicating via EVPN Type-5 routes (L3 VXLAN) -- All hosts use LACP bonding (802.3ad) with dual-homing to access switches -- Each access switch is dual-homed via LACP (Port-Channel) to a leaf MLAG pair +| Host | VLAN | VRF | IP / Mask | Gateway | Purpose | +| ------------- | ---- | -------- | ----------------- | ------------ | ------------------------------ | +| host1 | 40 | default | 10.40.40.101/24 | — | DC L2 stretched (VTEP1↔VTEP3) | +| host2 | 34 | gold | 10.34.34.102/24 | 10.34.34.1 | DC L3 VRF gold | +| host3 | 40 | default | 10.40.40.103/24 | — | DC L2 stretched | +| host4 | 78 | gold | 10.78.78.104/24 | 10.78.78.1 | DC L3 VRF gold | +| campus-host1 | 50 | default | 10.50.50.101/24 | — | Campus L2 stretched (VTEP1↔VTEP2) | +| campus-host1 | 60 | gold | 10.60.60.101/24 | 10.60.60.1 | Campus L3 VRF gold | +| campus-host2 | 50 | default | 10.50.50.102/24 | — | Campus L2 stretched | +| campus-host2 | 70 | gold | 10.60.70.102/24 | 10.60.70.1 | Campus L3 VRF gold | -### VXLAN Network Identifiers (VNI) +## 🏷️ VXLAN Network Identifiers -#### L2 VNI (VLAN to VNI Mapping) +### L2 VNI Mapping -| VLAN | Description | VNI | VTEPs | Route Target | Route Distinguisher | -| ---- | ------------- | ------ | ------------------------------- | ------------ | -------------------------- | -| 40 | test-l2-vxlan | 110040 | VTEP1, VTEP3 (Leaf1/2, Leaf5/6) | 40:110040 | 65001:110040, 65003:110040 | +| VLAN | Description | VNI | Scope | RT | +| ---- | ------------------------------ | ------ | ------------------------------------------------------ | ---------- | +| 40 | DC L2 VXLAN (stretched) | 110040 | DC VTEP1 (leaf1/2) + VTEP3 (leaf5/6) | 40:110040 | +| 50 | Campus L2 VXLAN (stretched) | 110050 | Campus VTEP1 (campus-leaf1/2) + VTEP2 (campus-leaf3/4) | 50:110050 | +| 34 | DC VRF gold subnet (local) | 110034 | DC VTEP2 only (anycast GW 10.34.34.1) | 34:110034 | +| 78 | DC VRF gold subnet (local) | 110078 | DC VTEP4 only (anycast GW 10.78.78.1) | 78:110078 | +| 60 | Campus VRF gold subnet (local) | 110060 | Campus VTEP1 only (anycast GW 10.60.60.1) | 60:110060 | +| 70 | Campus VRF gold subnet (local) | 110070 | Campus VTEP2 only (anycast GW 10.60.70.1) | 70:110070 | -**L2 VNI Details:** +### L3 VNI Mapping (end-to-end) -- VLAN 40 is stretched across VTEP1 (Leaf1/2) and VTEP3 (Leaf5/6) for pure Layer 2 connectivity -- Hosts in VLAN 40 (host1 and host3) communicate at Layer 2 across the EVPN fabric -- EVPN Type-2 (MAC/IP) routes are used for MAC address learning and distribution +| VRF | L3 VNI | RT | Scope | +| ---- | ------- | ---------- | ----------------------------------------------------- | +| gold | 100001 | 1:100001 | DC VTEP2/VTEP4/DC-BL + Campus VTEP1/VTEP2/Campus-BL | -#### L3 VNI (VRF to VNI Mapping) +VRF `gold` is announced over EVPN Type-5 (IP prefix) inside each fabric, and **stitched by the Core** via eBGP IPv4 unicast in VRF gold (over the `.200` dot1q subinterfaces). L3 VNI `100001` is re-used end-to-end for symmetry; RT `1:100001` is consistent across both fabrics. -| VRF | Description | VNI | VTEPs | Route Target | VLANs | -| ---- | ------------------------------- | ------ | ------------------------------- | ------------ | ------ | -| gold | L3 VRF for inter-subnet routing | 100001 | VTEP2, VTEP4 (Leaf3/4, Leaf7/8) | 1:100001 | 34, 78 | +### Route Distinguisher Convention -**L3 VNI Details:** +- Leafs / BLs: `rd :1` for VRF gold; `rd :` per L2 VLAN (e.g. `65001:110040`, `66002:110050`). +- Cores: `rd :100001` for VRF gold (transit only — no EVPN, IPv4 unicast with `redistribute connected`). -- VRF "gold" uses VNI 100001 for Layer 3 VXLAN routing between different subnets -- VLAN 34 (10.34.34.0/24) on VTEP2 and VLAN 78 (10.78.78.0/24) on VTEP4 are both in VRF gold -- EVPN Type-5 (IP Prefix) routes are used for inter-subnet routing -- Each VTEP advertises its local subnets via EVPN, enabling routed connectivity between host2 and host4 +## 🔀 Control Plane Summary -#### VNI Summary - -| VNI Type | VNI | Purpose | EVPN Route Type | -| -------- | ------ | ----------------------------- | ------------------ | -| L2 VNI | 110040 | Layer 2 extension for VLAN 40 | Type-2 (MAC/IP) | -| L3 VNI | 100001 | Layer 3 routing for VRF gold | Type-5 (IP Prefix) | - -### Features Implemented - -✅ **Underlay** - -- BGP IPv4 Unicast -- ECMP with 4 paths -- eBGP between Spine-Leaf -- iBGP between MLAG pairs - -✅ **Overlay** - -- BGP EVPN address family -- VXLAN data plane -- EVPN Type-2 (MAC/IP routes) -- EVPN Type-5 (IP Prefix routes) - -✅ **High Availability** - -- MLAG dual-homing -- Dual-active detection -- Anycast VTEP gateway +| Segment | Protocol | Notes | +| ----------------------------------- | ------------------------------------ | ------------------------------------- | +| DC spine ↔ leaf/BL underlay | eBGP IPv4 (AS 65000 ↔ 650xx) | `maximum-paths 4 ecmp 64` | +| DC spine ↔ leaf/BL overlay | eBGP EVPN via Loopback0, multi-hop 3 | Spines reflect via `ebgp peer-group` | +| DC MLAG pair iBGP | iBGP over VLAN 4091 SVI | `next-hop-self` | +| DC-BL ↔ Core (default) | OSPF area 0 + eBGP AS 65005 ↔ 65500 | on `.100` dot1q subinterface | +| DC-BL ↔ Core (VRF gold) | eBGP AS 65005 ↔ 65500 | on `.200` dot1q subinterface | +| Core1 ↔ Core2 (default) | OSPF area 0 + iBGP AS 65500 | via Loopback0 | +| Core1 ↔ Core2 (VRF gold) | iBGP AS 65500 | VRF-aware over `.200` subinterface | +| Campus-BL ↔ Core (default / gold) | OSPF + eBGP AS 66005 ↔ 65500 | same pattern as DC-BL | +| Campus spine ↔ leaf/BL underlay | eBGP IPv4 (AS 66000 ↔ 660xx) | | +| Campus spine ↔ leaf/BL overlay | eBGP EVPN via Loopback0, multi-hop 3 | | +| Campus MLAG pair iBGP | iBGP over VLAN 4091 SVI | | ## 🧪 Testing & Validation -### Verify BGP EVPN Neighbors +### Fabric health ```bash -# On any spine -show bgp evpn summary +# DC +ssh admin@clab-arista-evpn-fabric-spine1 "show bgp evpn summary" +ssh admin@clab-arista-evpn-fabric-leaf3 "show bgp evpn summary" +ssh admin@clab-arista-evpn-fabric-border-leaf-dc1 "show bgp evpn summary" -# On any leaf -show bgp evpn summary +# Campus +ssh admin@clab-arista-evpn-fabric-campus-spine1 "show bgp evpn summary" +ssh admin@clab-arista-evpn-fabric-campus-leaf1 "show bgp evpn summary" + +# Core transit (no EVPN — IPv4 only) +ssh admin@clab-arista-evpn-fabric-core1 "show ip bgp summary" +ssh admin@clab-arista-evpn-fabric-core1 "show ip bgp summary vrf gold" +ssh admin@clab-arista-evpn-fabric-core1 "show ip ospf neighbor" ``` -### Verify VXLAN +### VXLAN ```bash -# Check VXLAN interface +# On any leaf/BL show interface vxlan1 - -# Check remote VTEPs show vxlan vtep - -# Check VXLAN address table show vxlan address-table ``` -### Verify MLAG +### MLAG ```bash -# Check MLAG status show mlag - -# Check MLAG interfaces -show mlag interfaces +show mlag interfaces detail ``` -### Test Connectivity - -#### L2 VXLAN Testing (VLAN 40) - -Test Layer 2 connectivity between host1 and host3 across the EVPN fabric: +### Intra-DC connectivity (existing tests) ```bash -# From host1 to host3 (same VLAN 40, different VTEPs) -docker exec -it clab-arista-evpn-fabric-host1 ping -c 4 10.40.40.103 +# L2 VLAN 40: host1 ↔ host3 +docker exec -it clab-arista-evpn-fabric-host1 ping -c 3 10.40.40.103 -# Check host1 interface -docker exec -it clab-arista-evpn-fabric-host1 ip addr show bond0 - -# From host3 to host1 -docker exec -it clab-arista-evpn-fabric-host3 ping -c 4 10.40.40.101 +# L3 VRF gold (DC only): host2 ↔ host4 +docker exec -it clab-arista-evpn-fabric-host2 ping -c 3 10.78.78.104 ``` -#### L3 VXLAN Testing (VRF gold) - -Test Layer 3 connectivity between host2 and host4 in VRF "gold": +### Intra-Campus connectivity ```bash -# From host2 to host4 (different subnets via EVPN Type-5) -docker exec -it clab-arista-evpn-fabric-host2 ping -c 4 10.78.78.104 +# L2 VLAN 50: campus-host1 ↔ campus-host2 +docker exec -it clab-arista-evpn-fabric-campus-host1 ping -c 3 10.50.50.102 -# From host4 to host2 -docker exec -it clab-arista-evpn-fabric-host4 ping -c 4 10.34.34.102 - -# Check routing table on hosts -docker exec -it clab-arista-evpn-fabric-host2 ip route -docker exec -it clab-arista-evpn-fabric-host4 ip route +# L3 VRF gold (Campus only): campus-host1 ↔ campus-host2 +docker exec -it clab-arista-evpn-fabric-campus-host1 ping -c 3 10.60.70.102 +docker exec -it clab-arista-evpn-fabric-campus-host2 ping -c 3 10.60.60.101 ``` -#### Verify EVPN Routes on Switches +### End-to-end Campus ↔ DC (VRF gold via Core) ```bash -# Check EVPN Type-2 routes (MAC/IP) - for VLAN 40 -ssh admin@clab-arista-evpn-fabric-leaf1 -show bgp evpn route-type mac-ip +# campus-host1 (10.60.60.101, VRF gold Campus) → host2 (10.34.34.102, VRF gold DC) +docker exec -it clab-arista-evpn-fabric-campus-host1 ping -c 3 10.34.34.102 -# Check EVPN Type-5 routes (IP Prefix) - for VRF gold -ssh admin@clab-arista-evpn-fabric-leaf3 -show bgp evpn route-type ip-prefix ipv4 +# campus-host2 (10.60.70.102) → host4 (10.78.78.104) +docker exec -it clab-arista-evpn-fabric-campus-host2 ping -c 3 10.78.78.104 -# Verify VXLAN learned MACs -show vxlan address-table +# Reverse direction +docker exec -it clab-arista-evpn-fabric-host2 ping -c 3 10.60.60.101 +docker exec -it clab-arista-evpn-fabric-host4 ping -c 3 10.60.70.102 -# Check MAC addresses learned via EVPN -show mac address-table +# Traceroute: expected path campus-leaf → campus-BL → core → DC-BL → DC-leaf +docker exec -it clab-arista-evpn-fabric-campus-host1 traceroute 10.34.34.102 +``` + +### Inspect the Core transit path + +```bash +# Check VRF gold routes on core1 — both DC and Campus prefixes should be present +ssh admin@clab-arista-evpn-fabric-core1 "show ip route vrf gold" +ssh admin@clab-arista-evpn-fabric-core1 "show ip bgp vrf gold" + +# EVPN Type-5 on DC-BL (imported from DC fabric, redistributed from Core into EVPN) +ssh admin@clab-arista-evpn-fabric-border-leaf-dc1 "show bgp evpn route-type ip-prefix ipv4" + +# EVPN Type-5 on Campus-BL +ssh admin@clab-arista-evpn-fabric-border-leaf-campus1 "show bgp evpn route-type ip-prefix ipv4" ``` ## 📁 Repository Structure ``` arista-evpn-vxlan-clab/ -├── README.md # This file -├── TROUBLESHOOTING.md # Troubleshooting guide -├── END_TO_END_TESTING.md # Testing procedures -├── evpn-lab.clab.yml # ContainerLab topology +├── README.md +├── TROUBLESHOOTING.md +├── END_TO_END_TESTING.md +├── evpn-lab.clab.yml +├── evpn-lab.clab.yml.annotations.json ├── assets/ -│ └── arista-evpn-fabric.svg # Topology diagram -├── configs/ # Device configurations -│ ├── spine1.cfg -│ ├── spine2.cfg -│ ├── leaf1.cfg through leaf8.cfg -│ ├── access1.cfg -│ ├── access2.cfg -│ ├── access3.cfg -│ └── access4.cfg -└── hosts/ # Host interface configurations +│ └── arista-evpn-fabric.svg +├── configs/ +│ ├── spine1.cfg, spine2.cfg +│ ├── leaf1.cfg … leaf8.cfg +│ ├── border-leaf-dc1.cfg, border-leaf-dc2.cfg +│ ├── access1.cfg … access4.cfg +│ ├── core1.cfg, core2.cfg +│ ├── campus-spine1.cfg, campus-spine2.cfg +│ ├── campus-leaf1.cfg … campus-leaf4.cfg +│ ├── border-leaf-campus1.cfg, border-leaf-campus2.cfg +│ └── campus-access1.cfg, campus-access2.cfg +└── hosts/ ├── README.md - ├── host1_interfaces - ├── host2_interfaces - ├── host3_interfaces - └── host4_interfaces + ├── host1_interfaces … host4_interfaces + ├── campus-host1_interfaces + └── campus-host2_interfaces ``` ## 🗑️ Cleanup ```bash -# Destroy the lab -sudo containerlab destroy -t evpn-lab.clab.yml - -# Remove all related containers and networks sudo containerlab destroy -t evpn-lab.clab.yml --cleanup ``` ## 📚 References -- [Original Configuration Guide](https://overlaid.net/2019/01/27/arista-bgp-evpn-configuration-example/) - [Arista EOS Documentation](https://www.arista.com/en/support/product-documentation) - [ContainerLab Documentation](https://containerlab.dev/) -- [RFC 7432 - BGP MPLS-Based Ethernet VPN](https://tools.ietf.org/html/rfc7432) -- [RFC 8365 - A Network Virtualization Overlay Solution Using EVPN](https://tools.ietf.org/html/rfc8365) +- [RFC 7432 — BGP MPLS-Based Ethernet VPN](https://tools.ietf.org/html/rfc7432) +- [RFC 8365 — A Network Virtualization Overlay Solution Using EVPN](https://tools.ietf.org/html/rfc8365) +- [RFC 9135 — Integrated Routing and Bridging in EVPN](https://tools.ietf.org/html/rfc9135) diff --git a/assets/arista-evpn-fabric.svg b/assets/arista-evpn-fabric.svg index bf68ced..bfa42d7 100644 --- a/assets/arista-evpn-fabric.svg +++ b/assets/arista-evpn-fabric.svg @@ -1,389 +1,301 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - spine1 - - - - - - - - - - - - - - - - - - - - - spine2 - - - - - - - - - - - - - - - - - - - - - leaf1 - - - - - - - - - - - - - - - - - - - - - leaf2 - - - - - - - - - - - - - - - - - - - - - leaf3 - - - - - - - - - - - - - - - - - - - - - leaf4 - - - - - - - - - - - - - - - - - - - - - leaf5 - - - - - - - - - - - - - - - - - - - - - leaf6 - - - - - - - - - - - - - - - - - - - - - leaf7 - - - - - - - - - - - - - - - - - - - - - leaf8 - - - - - - - - - - - - - - - - - - - - - access1 - - - - - - - - - - - - - - - - - - - - - access2 - - - - - - - - - - - - - - - - - - - - - access3 - - - - - - - - - - - - - - - - - - - - - access4 - - - - - - - - - - - - - - - - - - - - - host1 - - - - - - - - - - - - - - - - - - - - - host2 - - - - - - - - - - - - - - - - - - - - - host3 - - - - - - - - - - - - - - - - - - - - - host4 \ No newline at end of file + + + + + + + Arista EVPN-VXLAN Campus + DC Fabric + Campus EVPN-VXLAN ↔ Core L3 (OSPF + BGP) ↔ DC EVPN-VXLAN + + + + CAMPUS FABRIC (AS 66000/66001/66002/66005) + + + + CORE L3 (AS 65500) + OSPF area 0 + iBGP + VRF gold transit + + + + DATACENTER FABRIC (AS 65000/65001-65004/65005) + + + + + + campus-spine1 + + campus-spine2 + + + + + + campus-leaf1 + + campus-leaf2 + + campus-leaf3 + + campus-leaf4 + + + + + + border-leaf-campus1 + + border-leaf-campus2 + + + + + + campus-access1 + + campus-access2 + + + + + + campus-host1 + + campus-host2 + + + + Route Reflectors (AS 66000) + VTEP1 (AS 66001) + VTEP2 (AS 66002) + Campus Border Leafs MLAG (AS 66005) + VLAN 50 (10.50.50.101) + VLAN 60 (10.60.60.101, gold) + VLAN 50 (10.50.50.102) + VLAN 70 (10.60.70.102, gold) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + core1 + + core2 + + + iBGP + OSPF + + + + + + + + + + + + + + + + + + spine1 + + spine2 + + + + + + leaf1 + + leaf2 + + leaf3 + + leaf4 + + leaf5 + + leaf6 + + leaf7 + + leaf8 + + + + + + border-leaf-dc1 + + border-leaf-dc2 + + + + + + access1 + + access2 + + access3 + + access4 + + + + + + host1 + + host2 + + host3 + + host4 + + + + Route Reflectors (AS 65000) + VTEP1 (65001) + VTEP2 (65002) + VTEP3 (65003) + VTEP4 (65004) + DC Border Leafs MLAG (AS 65005) + VLAN 40 + VLAN 34 (gold) + VLAN 40 + VLAN 78 (gold) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Legend + + Spine (RR) + + Leaf (VTEP) + + Border Leaf + + Core router + + Access L2 + + Host + + Fabric (underlay + EVPN) + + Core (OSPF+BGP / VRF gold) + + MLAG peer-link + L2 VNI 110040 (DC VLAN 40), 110050 (Campus VLAN 50); L3 VNI 100001 (VRF gold, shared) + + diff --git a/evpn-lab.clab.yml.annotations.json b/evpn-lab.clab.yml.annotations.json index 8984cba..ea51282 100644 --- a/evpn-lab.clab.yml.annotations.json +++ b/evpn-lab.clab.yml.annotations.json @@ -1,138 +1,79 @@ { - "freeTextAnnotations": [], + "freeTextAnnotations": [ + { + "id": "label-campus", + "position": { "x": -100, "y": 60 }, + "text": "CAMPUS FABRIC (AS 66000 / 66001 / 66002 / 66005)", + "fontSize": 16, + "color": "#2563eb" + }, + { + "id": "label-core", + "position": { "x": 1100, "y": 60 }, + "text": "CORE (AS 65500)", + "fontSize": 16, + "color": "#ea580c" + }, + { + "id": "label-dc", + "position": { "x": 1600, "y": 60 }, + "text": "DATA CENTER FABRIC (AS 65000 / 65001-4 / 65005)", + "fontSize": 16, + "color": "#16a34a" + } + ], "freeShapeAnnotations": [], "trafficRateAnnotations": [], "groupStyleAnnotations": [], "networkNodeAnnotations": [], "nodeAnnotations": [ - { - "id": "spine1", - "position": { - "x": 260, - "y": 160 - } - }, - { - "id": "spine2", - "position": { - "x": 740, - "y": 160 - } - }, - { - "id": "leaf1", - "position": { - "x": -60, - "y": 420 - } - }, - { - "id": "leaf2", - "position": { - "x": 100, - "y": 420 - } - }, - { - "id": "leaf3", - "position": { - "x": 260, - "y": 420 - } - }, - { - "id": "leaf4", - "position": { - "x": 420, - "y": 420 - } - }, - { - "id": "leaf5", - "position": { - "x": 580, - "y": 420 - } - }, - { - "id": "leaf6", - "position": { - "x": 740, - "y": 420 - } - }, - { - "id": "leaf7", - "position": { - "x": 920, - "y": 420 - } - }, - { - "id": "leaf8", - "position": { - "x": 1080, - "y": 420 - } - }, - { - "id": "host1", - "position": { - "x": 20, - "y": 680 - } - }, - { - "id": "host2", - "position": { - "x": 340, - "y": 680 - } - }, - { - "id": "host3", - "position": { - "x": 660, - "y": 680 - } - }, - { - "id": "host4", - "position": { - "x": 1000, - "y": 680 - } - }, - { - "id": "access4", - "position": { - "x": 1000, - "y": 540 - } - }, - { - "id": "access3", - "position": { - "x": 660, - "y": 520 - } - }, - { - "id": "access2", - "position": { - "x": 340, - "y": 520 - } - }, - { - "id": "access1", - "position": { - "x": 20, - "y": 520 - } - } + + { "id": "campus-spine1", "position": { "x": 120, "y": 160 } }, + { "id": "campus-spine2", "position": { "x": 420, "y": 160 } }, + + { "id": "campus-leaf1", "position": { "x": -60, "y": 400 } }, + { "id": "campus-leaf2", "position": { "x": 80, "y": 400 } }, + { "id": "campus-leaf3", "position": { "x": 240, "y": 400 } }, + { "id": "campus-leaf4", "position": { "x": 380, "y": 400 } }, + + { "id": "border-leaf-campus1", "position": { "x": 540, "y": 400 } }, + { "id": "border-leaf-campus2", "position": { "x": 680, "y": 400 } }, + + { "id": "campus-access1", "position": { "x": 40, "y": 540 } }, + { "id": "campus-access2", "position": { "x": 320, "y": 540 } }, + + { "id": "campus-host1", "position": { "x": 40, "y": 680 } }, + { "id": "campus-host2", "position": { "x": 320, "y": 680 } }, + + { "id": "core1", "position": { "x": 960, "y": 300 } }, + { "id": "core2", "position": { "x": 1180, "y": 300 } }, + + { "id": "border-leaf-dc1", "position": { "x": 1380, "y": 400 } }, + { "id": "border-leaf-dc2", "position": { "x": 1520, "y": 400 } }, + + { "id": "spine1", "position": { "x": 1800, "y": 160 } }, + { "id": "spine2", "position": { "x": 2280, "y": 160 } }, + + { "id": "leaf1", "position": { "x": 1660, "y": 400 } }, + { "id": "leaf2", "position": { "x": 1800, "y": 400 } }, + { "id": "leaf3", "position": { "x": 1940, "y": 400 } }, + { "id": "leaf4", "position": { "x": 2080, "y": 400 } }, + { "id": "leaf5", "position": { "x": 2220, "y": 400 } }, + { "id": "leaf6", "position": { "x": 2360, "y": 400 } }, + { "id": "leaf7", "position": { "x": 2500, "y": 400 } }, + { "id": "leaf8", "position": { "x": 2640, "y": 400 } }, + + { "id": "access1", "position": { "x": 1720, "y": 540 } }, + { "id": "access2", "position": { "x": 2000, "y": 540 } }, + { "id": "access3", "position": { "x": 2280, "y": 540 } }, + { "id": "access4", "position": { "x": 2560, "y": 540 } }, + + { "id": "host1", "position": { "x": 1720, "y": 680 } }, + { "id": "host2", "position": { "x": 2000, "y": 680 } }, + { "id": "host3", "position": { "x": 2280, "y": 680 } }, + { "id": "host4", "position": { "x": 2560, "y": 680 } } ], "edgeAnnotations": [], "aliasEndpointAnnotations": [], "viewerSettings": {} -} \ No newline at end of file +} diff --git a/hosts/README.md b/hosts/README.md index 44bdaac..0c62902 100644 --- a/hosts/README.md +++ b/hosts/README.md @@ -4,11 +4,18 @@ This directory contains network interface configuration files for Alpine Linux h ## Files +### DC hosts + - `host1_interfaces` - Configuration for host1 (VLAN 40, IP 10.40.40.101) - `host2_interfaces` - Configuration for host2 (VLAN 34, IP 10.34.34.102) - `host3_interfaces` - Configuration for host3 (VLAN 40, IP 10.40.40.103) - `host4_interfaces` - Configuration for host4 (VLAN 78, IP 10.78.78.104) +### Campus hosts + +- `campus-host1_interfaces` - Configuration for campus-host1 (VLAN 50 stretched L2 10.50.50.101, VLAN 60 VRF gold 10.60.60.101) +- `campus-host2_interfaces` - Configuration for campus-host2 (VLAN 50 stretched L2 10.50.50.102, VLAN 70 VRF gold 10.60.70.102) + ## Usage Each file is mounted to `/etc/network/interfaces` in its respective host container via ContainerLab's `binds` feature: From 2da238e3aeef26dfe0a1b274536fc9d2e931c054 Mon Sep 17 00:00:00 2001 From: Damien Date: Sat, 18 Apr 2026 18:44:34 +0000 Subject: [PATCH 06/16] Update campus host attachment pattern to single-attached access --- README.md | 49 +++++++++++++++++++++++----------- assets/arista-evpn-fabric.svg | 16 +++++------ configs/campus-access1.cfg | 22 ++++----------- configs/campus-access2.cfg | 22 ++++----------- configs/campus-leaf1.cfg | 2 +- configs/campus-leaf2.cfg | 2 +- configs/campus-leaf3.cfg | 2 +- configs/campus-leaf4.cfg | 2 +- evpn-lab.clab.yml | 50 +++++++---------------------------- hosts/README.md | 45 ++++++++++++++++++++++++------- hosts/campus-host1_interfaces | 25 +++--------------- hosts/campus-host2_interfaces | 25 +++--------------- 12 files changed, 105 insertions(+), 157 deletions(-) diff --git a/README.md b/README.md index 5f94966..c775314 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,16 @@ Key design choices: - **eBGP** in both fabrics (underlay + EVPN overlay) between spines and leafs / border leafs. - **OSPF area 0 + eBGP multi-hop** between each Border Leaf pair and both Core routers (over dot1q subinterfaces: `.100` = default VRF underlay, `.200` = VRF `gold`). -- **MLAG** everywhere there is dual-homing (leaf pairs, border-leaf pairs, access → leafs, host → access). +- **MLAG** everywhere there is dual-homing at the fabric layers (leaf pairs, border-leaf pairs, access → leafs, and DC host → access). +- **Host attachment pattern**: + - **DC hosts** (servers) are **dual-homed via LACP** to an access switch — typical DC + server redundancy. + - **Campus hosts** (user endpoints: PC, phone, printer) are **single-attached** to a + Campus access switch via one plain Ethernet link. Redundancy lives at the access-switch + layer (the access switch itself is dual-homed via LACP to its leaf MLAG pair), not at + the host. - **VRF `gold`** is stretched end-to-end: DC leafs (VLAN 34 / 78) ↔ DC-BL ↔ Core ↔ Campus-BL ↔ Campus leafs (VLAN 60 / 70), all sharing L3 VNI `100001`. -- **VLAN 50** is a campus-local L2 VXLAN stretched between the two Campus VTEPs. +- **VLAN 50** remains defined as a campus-local L2 VXLAN stretched between the two Campus VTEPs (infrastructure-only, not wired to any host in the current topology). - **Convention**: L2 VNI = `110000 + vlan_id`, L3 VNI = `100001` for VRF `gold`, RT `1:100001` in both fabrics. ## 📐 Topology @@ -93,16 +100,23 @@ docker exec -it clab-arista-evpn-fabric-border-leaf-dc1 Cli ### Access Switches -| Access Switch | Uplink Pair | VLANs | Host | -| --------------- | ------------------------ | -------- | -------------- | -| access1 | leaf1/2 (VTEP1) | 40 | host1 | -| access2 | leaf3/4 (VTEP2) | 34 | host2 | -| access3 | leaf5/6 (VTEP3) | 40 | host3 | -| access4 | leaf7/8 (VTEP4) | 78 | host4 | -| campus-access1 | campus-leaf1/2 (VTEP1) | 50, 60 | campus-host1 | -| campus-access2 | campus-leaf3/4 (VTEP2) | 50, 70 | campus-host2 | +| Access Switch | Uplink Pair | VLANs | Host | Host attachment | +| --------------- | ------------------------ | -------- | -------------- | ------------------------- | +| access1 | leaf1/2 (VTEP1) | 40 | host1 | LACP Po1 (dual-homed) | +| access2 | leaf3/4 (VTEP2) | 34 | host2 | LACP Po1 (dual-homed) | +| access3 | leaf5/6 (VTEP3) | 40 | host3 | LACP Po1 (dual-homed) | +| access4 | leaf7/8 (VTEP4) | 78 | host4 | LACP Po1 (dual-homed) | +| campus-access1 | campus-leaf1/2 (VTEP1) | 60 | campus-host1 | access port (single link) | +| campus-access2 | campus-leaf3/4 (VTEP2) | 70 | campus-host2 | access port (single link) | -All access switches are L2-only, LACP-bonded to their leaf MLAG pair via `Port-Channel10`, with host downlinks on `Port-Channel1`. MSTP + edge-port BPDU guard. +All access switches are L2-only, LACP-bonded to their leaf MLAG pair via `Port-Channel10`. MSTP + edge-port BPDU guard. + +Host-facing ports: + +- **DC access switches** run a `Port-Channel1` trunk (VLANs allowed per host) for a host + dual-homed in LACP (two physical links, one bond on the Linux side). +- **Campus access switches** use a plain `Ethernet3` in `switchport mode access` with + BPDU guard + portfast — the host connects with a single Ethernet link and no bonding. ## 🧭 IP Addressing Plan @@ -171,11 +185,12 @@ Gateway: `172.16.0.254`. | host2 | 34 | gold | 10.34.34.102/24 | 10.34.34.1 | DC L3 VRF gold | | host3 | 40 | default | 10.40.40.103/24 | — | DC L2 stretched | | host4 | 78 | gold | 10.78.78.104/24 | 10.78.78.1 | DC L3 VRF gold | -| campus-host1 | 50 | default | 10.50.50.101/24 | — | Campus L2 stretched (VTEP1↔VTEP2) | | campus-host1 | 60 | gold | 10.60.60.101/24 | 10.60.60.1 | Campus L3 VRF gold | -| campus-host2 | 50 | default | 10.50.50.102/24 | — | Campus L2 stretched | | campus-host2 | 70 | gold | 10.60.70.102/24 | 10.60.70.1 | Campus L3 VRF gold | +> DC hosts are dual-homed in LACP over `bond0` with tagged VLAN sub-interfaces. +> Campus hosts are single-attached with one untagged `eth1` in a single access VLAN. + ## 🏷️ VXLAN Network Identifiers ### L2 VNI Mapping @@ -266,15 +281,17 @@ docker exec -it clab-arista-evpn-fabric-host2 ping -c 3 10.78.78.104 ### Intra-Campus connectivity -```bash -# L2 VLAN 50: campus-host1 ↔ campus-host2 -docker exec -it clab-arista-evpn-fabric-campus-host1 ping -c 3 10.50.50.102 +Campus hosts sit in VRF `gold` — use the L3 test to validate VTEP1↔VTEP2 via campus spines. +```bash # L3 VRF gold (Campus only): campus-host1 ↔ campus-host2 docker exec -it clab-arista-evpn-fabric-campus-host1 ping -c 3 10.60.70.102 docker exec -it clab-arista-evpn-fabric-campus-host2 ping -c 3 10.60.60.101 ``` +> VLAN 50 (stretched L2 VXLAN) is still provisioned on the campus VTEPs as an +> infrastructure example but is not wired to any host in the current topology. + ### End-to-end Campus ↔ DC (VRF gold via Core) ```bash diff --git a/assets/arista-evpn-fabric.svg b/assets/arista-evpn-fabric.svg index bfa42d7..bd8210b 100644 --- a/assets/arista-evpn-fabric.svg +++ b/assets/arista-evpn-fabric.svg @@ -84,10 +84,10 @@ VTEP1 (AS 66001) VTEP2 (AS 66002) Campus Border Leafs MLAG (AS 66005) - VLAN 50 (10.50.50.101) - VLAN 60 (10.60.60.101, gold) - VLAN 50 (10.50.50.102) - VLAN 70 (10.60.70.102, gold) + VLAN 60 (10.60.60.101, gold) + single-attached (access) + VLAN 70 (10.60.70.102, gold) + single-attached (access) @@ -116,11 +116,9 @@ - - - - - + + + diff --git a/configs/campus-access1.cfg b/configs/campus-access1.cfg index 1aae6b0..9518fff 100644 --- a/configs/campus-access1.cfg +++ b/configs/campus-access1.cfg @@ -15,9 +15,6 @@ management api gnmi username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 ! ! VLANs -vlan 50 - name test-l2-vxlan-campus -! vlan 60 name vrf-gold-campus-subnet1 ! @@ -41,25 +38,16 @@ interface Ethernet2 interface Port-Channel10 description uplink-to-campus-leaf-mlag switchport mode trunk - switchport trunk allowed vlan 50,60 + switchport trunk allowed vlan 60 no shutdown ! -! Host-facing downlink (Port-Channel 1) +! Host-facing access port (single-attached endpoint in VLAN 60) interface Ethernet3 description campus-host1 - channel-group 1 mode active -! -interface Ethernet4 - description campus-host1 - channel-group 1 mode active -! -interface Port-Channel1 - description campus-host1 - switchport mode trunk - switchport trunk allowed vlan 50,60 - port-channel lacp fallback timeout 5 - port-channel lacp fallback individual + switchport mode access + switchport access vlan 60 spanning-tree portfast + spanning-tree bpduguard enable no shutdown ! ! Default route for management diff --git a/configs/campus-access2.cfg b/configs/campus-access2.cfg index 700eb69..49f0996 100644 --- a/configs/campus-access2.cfg +++ b/configs/campus-access2.cfg @@ -15,9 +15,6 @@ management api gnmi username admin privilege 15 role network-admin secret sha512 $6$xQktFrbdeqEhVzLM$.1wOJB25nw2fqYaSXDu6y4mo6AP9hngMCFe2vGDl84hWoz00Q.4unoEBqspNI0HEoRz.OZhdBHqQv12KABf0B0 ! ! VLANs -vlan 50 - name test-l2-vxlan-campus -! vlan 70 name vrf-gold-campus-subnet2 ! @@ -41,25 +38,16 @@ interface Ethernet2 interface Port-Channel10 description uplink-to-campus-leaf-mlag switchport mode trunk - switchport trunk allowed vlan 50,70 + switchport trunk allowed vlan 70 no shutdown ! -! Host-facing downlink (Port-Channel 1) +! Host-facing access port (single-attached endpoint in VLAN 70) interface Ethernet3 description campus-host2 - channel-group 1 mode active -! -interface Ethernet4 - description campus-host2 - channel-group 1 mode active -! -interface Port-Channel1 - description campus-host2 - switchport mode trunk - switchport trunk allowed vlan 50,70 - port-channel lacp fallback timeout 5 - port-channel lacp fallback individual + switchport mode access + switchport access vlan 70 spanning-tree portfast + spanning-tree bpduguard enable no shutdown ! ! Default route for management diff --git a/configs/campus-leaf1.cfg b/configs/campus-leaf1.cfg index 29c5a10..a4ae61a 100644 --- a/configs/campus-leaf1.cfg +++ b/configs/campus-leaf1.cfg @@ -101,7 +101,7 @@ interface Ethernet1 interface Port-Channel1 description campus-access1 switchport mode trunk - switchport trunk allowed vlan 50,60 + switchport trunk allowed vlan 60 mlag 1 port-channel lacp fallback timeout 5 port-channel lacp fallback individual diff --git a/configs/campus-leaf2.cfg b/configs/campus-leaf2.cfg index 54ca2ec..dbf3683 100644 --- a/configs/campus-leaf2.cfg +++ b/configs/campus-leaf2.cfg @@ -101,7 +101,7 @@ interface Ethernet1 interface Port-Channel1 description campus-access1 switchport mode trunk - switchport trunk allowed vlan 50,60 + switchport trunk allowed vlan 60 mlag 1 port-channel lacp fallback timeout 5 port-channel lacp fallback individual diff --git a/configs/campus-leaf3.cfg b/configs/campus-leaf3.cfg index fbe98cd..1731d33 100644 --- a/configs/campus-leaf3.cfg +++ b/configs/campus-leaf3.cfg @@ -101,7 +101,7 @@ interface Ethernet1 interface Port-Channel1 description campus-access2 switchport mode trunk - switchport trunk allowed vlan 50,70 + switchport trunk allowed vlan 70 mlag 1 port-channel lacp fallback timeout 5 port-channel lacp fallback individual diff --git a/configs/campus-leaf4.cfg b/configs/campus-leaf4.cfg index 0a1a0da..59c6c27 100644 --- a/configs/campus-leaf4.cfg +++ b/configs/campus-leaf4.cfg @@ -101,7 +101,7 @@ interface Ethernet1 interface Port-Channel1 description campus-access2 switchport mode trunk - switchport trunk allowed vlan 50,70 + switchport trunk allowed vlan 70 mlag 1 port-channel lacp fallback timeout 5 port-channel lacp fallback individual diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index af88bec..91ce278 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -267,33 +267,19 @@ topology: mgmt-ipv4: 172.16.0.62 startup-config: configs/campus-access2.cfg - # Campus Hosts - dual-homed with LACP bonding + # Campus Hosts - single-attached to access switch (enterprise user endpoint pattern) campus-host1: kind: linux mgmt-ipv4: 172.16.0.105 image: ghcr.io/hellt/network-multitool cap-add: - NET_ADMIN + binds: + - hosts/campus-host1_interfaces:/etc/network/interfaces exec: - - ip link add bond0 type bond mode 802.3ad - - ip link set dev bond0 type bond xmit_hash_policy layer3+4 - - ip link set dev eth1 down - - ip link set dev eth2 down - - ip link set eth1 master bond0 - - ip link set eth2 master bond0 - ip link set dev eth1 up - - ip link set dev eth2 up - - ip link set dev bond0 type bond lacp_rate fast - - ip link set dev bond0 up - - ip link add link bond0 name bond0.50 type vlan id 50 - - ip link set bond0.50 up - - ip addr add 10.50.50.101/24 dev bond0.50 - - ip link add link bond0 name bond0.60 type vlan id 60 - - ip link set bond0.60 up - - ip addr add 10.60.60.101/24 dev bond0.60 - - ip route add 10.60.70.0/24 via 10.60.60.1 - - ip route add 10.34.34.0/24 via 10.60.60.1 - - ip route add 10.78.78.0/24 via 10.60.60.1 + - ip addr add 10.60.60.101/24 dev eth1 + - ip route add default via 10.60.60.1 campus-host2: kind: linux @@ -301,26 +287,12 @@ topology: image: ghcr.io/hellt/network-multitool cap-add: - NET_ADMIN + binds: + - hosts/campus-host2_interfaces:/etc/network/interfaces exec: - - ip link add bond0 type bond mode 802.3ad - - ip link set dev bond0 type bond xmit_hash_policy layer3+4 - - ip link set dev eth1 down - - ip link set dev eth2 down - - ip link set eth1 master bond0 - - ip link set eth2 master bond0 - ip link set dev eth1 up - - ip link set dev eth2 up - - ip link set dev bond0 type bond lacp_rate fast - - ip link set dev bond0 up - - ip link add link bond0 name bond0.50 type vlan id 50 - - ip link set bond0.50 up - - ip addr add 10.50.50.102/24 dev bond0.50 - - ip link add link bond0 name bond0.70 type vlan id 70 - - ip link set bond0.70 up - - ip addr add 10.60.70.102/24 dev bond0.70 - - ip route add 10.60.60.0/24 via 10.60.70.1 - - ip route add 10.34.34.0/24 via 10.60.70.1 - - ip route add 10.78.78.0/24 via 10.60.70.1 + - ip addr add 10.60.70.102/24 dev eth1 + - ip route add default via 10.60.70.1 links: # ===================================================== @@ -428,8 +400,6 @@ topology: - endpoints: ["campus-leaf3:eth1", "campus-access2:eth1"] - endpoints: ["campus-leaf4:eth1", "campus-access2:eth2"] - # Campus Host connections to access switches (dual-homed via LACP) + # Campus Host connections to access switches (single link, enterprise user endpoint) - endpoints: ["campus-access1:eth3", "campus-host1:eth1"] - - endpoints: ["campus-access1:eth4", "campus-host1:eth2"] - endpoints: ["campus-access2:eth3", "campus-host2:eth1"] - - endpoints: ["campus-access2:eth4", "campus-host2:eth2"] diff --git a/hosts/README.md b/hosts/README.md index 0c62902..1c8c7cb 100644 --- a/hosts/README.md +++ b/hosts/README.md @@ -13,8 +13,12 @@ This directory contains network interface configuration files for Alpine Linux h ### Campus hosts -- `campus-host1_interfaces` - Configuration for campus-host1 (VLAN 50 stretched L2 10.50.50.101, VLAN 60 VRF gold 10.60.60.101) -- `campus-host2_interfaces` - Configuration for campus-host2 (VLAN 50 stretched L2 10.50.50.102, VLAN 70 VRF gold 10.60.70.102) +Campus hosts are **single-attached** to a Campus access switch (enterprise user endpoint +pattern — no LACP bond, no VLAN trunking on the host side). Each host sits in a single +access VLAN that maps to VRF `gold`. + +- `campus-host1_interfaces` - Configuration for campus-host1 (VLAN 60 VRF gold 10.60.60.101/24, GW 10.60.60.1) +- `campus-host2_interfaces` - Configuration for campus-host2 (VLAN 70 VRF gold 10.60.70.102/24, GW 10.60.70.1) ## Usage @@ -30,7 +34,9 @@ host1: ## Format -Files use Debian/Alpine ifupdown format with bonding and VLAN extensions: +Files use Debian/Alpine ifupdown format. + +### DC hosts (dual-homed via LACP to access switches) ``` auto lo @@ -50,20 +56,39 @@ iface bond0. inet static vlan-raw-device bond0 ``` +### Campus hosts (single-attached, no bonding, no VLAN tagging) + +``` +auto lo +iface lo inet loopback + +auto eth1 +iface eth1 inet static + address / + gateway +``` + ## Key Concepts -### LACP Bonding -- All hosts use **mode 4** (802.3ad LACP) bonding -- Dual-homed to MLAG leaf pairs for redundancy +### DC: LACP Bonding +- DC hosts use **mode 4** (802.3ad LACP) bonding +- Dual-homed to MLAG leaf pairs — typical for DC servers that need NIC-level redundancy - Requires matching LACP configuration on switches +### Campus: Single-attached user endpoints +- Campus hosts use a single `eth1` interface connected to an access port +- Redundancy is handled at the access-switch layer (the access switch is itself + dual-homed via LACP to the leaf MLAG pair), not at the host +- This matches the realistic enterprise pattern for PCs, phones, printers, etc. + ### VLAN Tagging -- Hosts handle VLAN tagging via sub-interfaces -- Format: `bond0.` (e.g., bond0.40, bond0.34, bond0.78) -- Switch ports are configured as trunks allowing specific VLANs +- DC hosts: VLAN tagging happens in the host via `bond0.` sub-interfaces + (e.g., bond0.40, bond0.34, bond0.78); switch ports are trunks +- Campus hosts: no tagging on the host; the access switch places untagged frames + into `switchport access vlan ` ### IP Addressing -- Static IP configuration on VLAN sub-interfaces +- Static IP configuration on the host interface (sub-interface for DC, `eth1` for Campus) - Subnet assignment based on VLAN ID pattern (e.g., VLAN 40 = 10.40.40.0/24) ## Modification diff --git a/hosts/campus-host1_interfaces b/hosts/campus-host1_interfaces index 9033698..984b20c 100644 --- a/hosts/campus-host1_interfaces +++ b/hosts/campus-host1_interfaces @@ -1,26 +1,7 @@ auto lo iface lo inet loopback -auto bond0 -iface bond0 inet manual - use bond - bond-slaves eth1 eth2 - bond-mode 802.3ad - bond-miimon 100 - bond-lacp-rate fast - up ip link set $IFACE up - -auto bond0.50 -iface bond0.50 inet static - address 10.50.50.101 - netmask 255.255.255.0 - vlan-raw-device bond0 - up ip link set $IFACE up - -auto bond0.60 -iface bond0.60 inet static - address 10.60.60.101 - netmask 255.255.255.0 +auto eth1 +iface eth1 inet static + address 10.60.60.101/24 gateway 10.60.60.1 - vlan-raw-device bond0 - up ip link set $IFACE up diff --git a/hosts/campus-host2_interfaces b/hosts/campus-host2_interfaces index baa420a..b837b64 100644 --- a/hosts/campus-host2_interfaces +++ b/hosts/campus-host2_interfaces @@ -1,26 +1,7 @@ auto lo iface lo inet loopback -auto bond0 -iface bond0 inet manual - use bond - bond-slaves eth1 eth2 - bond-mode 802.3ad - bond-miimon 100 - bond-lacp-rate fast - up ip link set $IFACE up - -auto bond0.50 -iface bond0.50 inet static - address 10.50.50.102 - netmask 255.255.255.0 - vlan-raw-device bond0 - up ip link set $IFACE up - -auto bond0.70 -iface bond0.70 inet static - address 10.60.70.102 - netmask 255.255.255.0 +auto eth1 +iface eth1 inet static + address 10.60.70.102/24 gateway 10.60.70.1 - vlan-raw-device bond0 - up ip link set $IFACE up From f7c44bc0fddbba0cd4e57d72f72f7e4a16305132 Mon Sep 17 00:00:00 2001 From: Damien Date: Wed, 22 Apr 2026 18:33:31 +0000 Subject: [PATCH 07/16] Update cEOS version --- evpn-lab.clab.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index 91ce278..caf3c80 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -8,7 +8,7 @@ mgmt: topology: kinds: arista_ceos: - image: ceos:4.35.0F + image: gitea.arnodo.fr/damien/ceos:4.36.0F nodes: # ===================================================== From cb74dd118f9195e50711b3b1662aa8987af61d30 Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 23 Apr 2026 10:26:41 +0000 Subject: [PATCH 08/16] Fix VRF gold BGP IPv4 activation on cores and border leafs With 'no bgp default ipv4-unicast' set at the router level, VRF gold eBGP/iBGP neighbors were establishing but not exchanging any IPv4 prefixes, breaking inter-fabric transit between DC and Campus. Add an explicit 'address-family ipv4' block with 'neighbor X activate' under 'vrf gold' on both cores and all four border leafs. Also drop 'redistribute learned' from the border leaf VRF gold stanza: it is not a valid command in that context and was silently stripped by EOS. --- configs/border-leaf-campus1.cfg | 6 +++++- configs/border-leaf-campus2.cfg | 6 +++++- configs/border-leaf-dc1.cfg | 6 +++++- configs/border-leaf-dc2.cfg | 6 +++++- configs/core1.cfg | 8 ++++++++ configs/core2.cfg | 8 ++++++++ 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/configs/border-leaf-campus1.cfg b/configs/border-leaf-campus1.cfg index dc6ddd1..553489a 100644 --- a/configs/border-leaf-campus1.cfg +++ b/configs/border-leaf-campus1.cfg @@ -228,7 +228,11 @@ router bgp 66005 neighbor 10.0.15.4 remote-as 65500 neighbor 10.0.15.4 send-community extended neighbor 10.0.15.4 maximum-routes 12000 warning-only + ! + address-family ipv4 + neighbor 10.0.15.0 activate + neighbor 10.0.15.4 activate + ! redistribute connected - redistribute learned ! end diff --git a/configs/border-leaf-campus2.cfg b/configs/border-leaf-campus2.cfg index f1c4681..6c30128 100644 --- a/configs/border-leaf-campus2.cfg +++ b/configs/border-leaf-campus2.cfg @@ -228,7 +228,11 @@ router bgp 66005 neighbor 10.0.15.6 remote-as 65500 neighbor 10.0.15.6 send-community extended neighbor 10.0.15.6 maximum-routes 12000 warning-only + ! + address-family ipv4 + neighbor 10.0.15.2 activate + neighbor 10.0.15.6 activate + ! redistribute connected - redistribute learned ! end diff --git a/configs/border-leaf-dc1.cfg b/configs/border-leaf-dc1.cfg index 98274a0..34c8878 100644 --- a/configs/border-leaf-dc1.cfg +++ b/configs/border-leaf-dc1.cfg @@ -228,7 +228,11 @@ router bgp 65005 neighbor 10.0.14.4 remote-as 65500 neighbor 10.0.14.4 send-community extended neighbor 10.0.14.4 maximum-routes 12000 warning-only + ! + address-family ipv4 + neighbor 10.0.14.0 activate + neighbor 10.0.14.4 activate + ! redistribute connected - redistribute learned ! end diff --git a/configs/border-leaf-dc2.cfg b/configs/border-leaf-dc2.cfg index 41edd3f..8303667 100644 --- a/configs/border-leaf-dc2.cfg +++ b/configs/border-leaf-dc2.cfg @@ -228,7 +228,11 @@ router bgp 65005 neighbor 10.0.14.6 remote-as 65500 neighbor 10.0.14.6 send-community extended neighbor 10.0.14.6 maximum-routes 12000 warning-only + ! + address-family ipv4 + neighbor 10.0.14.2 activate + neighbor 10.0.14.6 activate + ! redistribute connected - redistribute learned ! end diff --git a/configs/core1.cfg b/configs/core1.cfg index 51a035d..a15e611 100644 --- a/configs/core1.cfg +++ b/configs/core1.cfg @@ -219,6 +219,14 @@ router bgp 65500 neighbor 10.0.15.3 remote-as 66005 neighbor 10.0.15.3 send-community extended neighbor 10.0.15.3 maximum-routes 12000 warning-only + ! + address-family ipv4 + neighbor 10.0.14.1 activate + neighbor 10.0.14.3 activate + neighbor 10.0.15.1 activate + neighbor 10.0.15.3 activate + neighbor 10.0.200.131 activate + ! redistribute connected ! end diff --git a/configs/core2.cfg b/configs/core2.cfg index 93b41fb..55dc7bc 100644 --- a/configs/core2.cfg +++ b/configs/core2.cfg @@ -219,6 +219,14 @@ router bgp 65500 neighbor 10.0.15.7 remote-as 66005 neighbor 10.0.15.7 send-community extended neighbor 10.0.15.7 maximum-routes 12000 warning-only + ! + address-family ipv4 + neighbor 10.0.14.5 activate + neighbor 10.0.14.7 activate + neighbor 10.0.15.5 activate + neighbor 10.0.15.7 activate + neighbor 10.0.200.130 activate + ! redistribute connected ! end From 97fbc1cebe8f80f19c66880cfd43e352cd8ce44e Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 23 Apr 2026 16:14:43 +0000 Subject: [PATCH 09/16] Force fabric default route on campus hosts The 'ip route add default via ' exec command silently failed on campus-host1 and campus-host2 because the management DHCP on eth0 had already installed a default via 172.16.0.254. As a result, traffic leaving the host for other fabric subnets was sent out the management interface instead of the EVPN fabric, breaking end-to-end ping. Switch to 'ip route replace' so the fabric gateway overrides whatever default is installed at container start. --- evpn-lab.clab.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index caf3c80..5c839b8 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -279,7 +279,7 @@ topology: exec: - ip link set dev eth1 up - ip addr add 10.60.60.101/24 dev eth1 - - ip route add default via 10.60.60.1 + - ip route replace default via 10.60.60.1 campus-host2: kind: linux @@ -292,7 +292,7 @@ topology: exec: - ip link set dev eth1 up - ip addr add 10.60.70.102/24 dev eth1 - - ip route add default via 10.60.70.1 + - ip route replace default via 10.60.70.1 links: # ===================================================== From 46c68b42bdcd0c4831faa2829906111c3761f132 Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 23 Apr 2026 16:20:29 +0000 Subject: [PATCH 10/16] Move campus host config into /etc/network/interfaces Make hosts/campus-host{1,2}_interfaces the source of truth for the campus host IP and default route, and have clab simply invoke 'ifup eth1' at container start to apply it. Previously the bound interfaces file was unused and the real config lived in the YAML exec block, which was misleading. BusyBox ifup in the network-multitool image needs 'address' plus 'netmask' rather than a CIDR, so split the address accordingly. Also add 'post-up ip route replace default via ' so the fabric default overrides the management DHCP default even when one is already installed. --- evpn-lab.clab.yml | 8 ++------ hosts/campus-host1_interfaces | 4 +++- hosts/campus-host2_interfaces | 4 +++- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index 5c839b8..2383f4b 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -277,9 +277,7 @@ topology: binds: - hosts/campus-host1_interfaces:/etc/network/interfaces exec: - - ip link set dev eth1 up - - ip addr add 10.60.60.101/24 dev eth1 - - ip route replace default via 10.60.60.1 + - ifup eth1 campus-host2: kind: linux @@ -290,9 +288,7 @@ topology: binds: - hosts/campus-host2_interfaces:/etc/network/interfaces exec: - - ip link set dev eth1 up - - ip addr add 10.60.70.102/24 dev eth1 - - ip route replace default via 10.60.70.1 + - ifup eth1 links: # ===================================================== diff --git a/hosts/campus-host1_interfaces b/hosts/campus-host1_interfaces index 984b20c..c12d792 100644 --- a/hosts/campus-host1_interfaces +++ b/hosts/campus-host1_interfaces @@ -3,5 +3,7 @@ iface lo inet loopback auto eth1 iface eth1 inet static - address 10.60.60.101/24 + address 10.60.60.101 + netmask 255.255.255.0 gateway 10.60.60.1 + post-up ip route replace default via 10.60.60.1 diff --git a/hosts/campus-host2_interfaces b/hosts/campus-host2_interfaces index b837b64..64ab3b9 100644 --- a/hosts/campus-host2_interfaces +++ b/hosts/campus-host2_interfaces @@ -3,5 +3,7 @@ iface lo inet loopback auto eth1 iface eth1 inet static - address 10.60.70.102/24 + address 10.60.70.102 + netmask 255.255.255.0 gateway 10.60.70.1 + post-up ip route replace default via 10.60.70.1 From 8a725ab5fe7d0ea0b0b1d8dc327ad38af120294a Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 23 Apr 2026 16:45:54 +0000 Subject: [PATCH 11/16] Drop 'gateway' directive from campus host interfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BusyBox ifup translates 'gateway X' into 'ip route add default via X' and aborts the whole ifup run with RC=1 when that command fails with 'File exists' — which always happens on first boot because the docker management bridge has already installed its own default via eth0. As a result the 'post-up ip route replace default' was never executed and the host kept the management default. Remove the 'gateway' line so ifup only runs the idempotent 'post-up ip route replace default via ' and the fabric default wins. --- hosts/campus-host1_interfaces | 1 - hosts/campus-host2_interfaces | 1 - 2 files changed, 2 deletions(-) diff --git a/hosts/campus-host1_interfaces b/hosts/campus-host1_interfaces index c12d792..cfc500a 100644 --- a/hosts/campus-host1_interfaces +++ b/hosts/campus-host1_interfaces @@ -5,5 +5,4 @@ auto eth1 iface eth1 inet static address 10.60.60.101 netmask 255.255.255.0 - gateway 10.60.60.1 post-up ip route replace default via 10.60.60.1 diff --git a/hosts/campus-host2_interfaces b/hosts/campus-host2_interfaces index 64ab3b9..57e2c66 100644 --- a/hosts/campus-host2_interfaces +++ b/hosts/campus-host2_interfaces @@ -5,5 +5,4 @@ auto eth1 iface eth1 inet static address 10.60.70.102 netmask 255.255.255.0 - gateway 10.60.70.1 post-up ip route replace default via 10.60.70.1 From ef4211afe5a93c4fc4b4eb4ebd28215faf611b22 Mon Sep 17 00:00:00 2001 From: Damien Date: Fri, 24 Apr 2026 07:43:02 +0000 Subject: [PATCH 12/16] Rename devices to - scheme DC fabric: spine/leaf/border-leaf/access/host -> dc-spine, dc-leaf, dc-border-leaf, dc-access, dc-server. Campus border leafs flipped from border-leaf-campus to campus-border-leaf for consistency. Core, campus spines/leafs/access/hosts unchanged. Updates topology, annotations, all configs (hostnames + peer descriptions), host interface files, README, TROUBLESHOOTING, END_TO_END_TESTING, and the SVG diagram. --- END_TO_END_TESTING.md | 24 +-- README.md | 114 +++++------ TROUBLESHOOTING.md | 64 +++--- assets/arista-evpn-fabric.svg | 48 ++--- configs/campus-access1.cfg | 2 +- configs/campus-access2.cfg | 2 +- ...af-campus1.cfg => campus-border-leaf1.cfg} | 6 +- ...af-campus2.cfg => campus-border-leaf2.cfg} | 6 +- configs/campus-spine1.cfg | 4 +- configs/campus-spine2.cfg | 4 +- configs/core1.cfg | 24 +-- configs/core2.cfg | 24 +-- configs/{access1.cfg => dc-access1.cfg} | 16 +- configs/{access2.cfg => dc-access2.cfg} | 16 +- configs/{access3.cfg => dc-access3.cfg} | 16 +- configs/{access4.cfg => dc-access4.cfg} | 16 +- ...order-leaf-dc1.cfg => dc-border-leaf1.cfg} | 10 +- ...order-leaf-dc2.cfg => dc-border-leaf2.cfg} | 10 +- configs/{leaf1.cfg => dc-leaf1.cfg} | 12 +- configs/{leaf2.cfg => dc-leaf2.cfg} | 12 +- configs/{leaf3.cfg => dc-leaf3.cfg} | 12 +- configs/{leaf4.cfg => dc-leaf4.cfg} | 12 +- configs/{leaf5.cfg => dc-leaf5.cfg} | 12 +- configs/{leaf6.cfg => dc-leaf6.cfg} | 12 +- configs/{leaf7.cfg => dc-leaf7.cfg} | 12 +- configs/{leaf8.cfg => dc-leaf8.cfg} | 12 +- configs/{spine1.cfg => dc-spine1.cfg} | 24 +-- configs/{spine2.cfg => dc-spine2.cfg} | 24 +-- evpn-lab.clab.yml | 190 +++++++++--------- evpn-lab.clab.yml.annotations.json | 44 ++-- hosts/README.md | 16 +- ...host1_interfaces => dc-server1_interfaces} | 0 ...host2_interfaces => dc-server2_interfaces} | 0 ...host3_interfaces => dc-server3_interfaces} | 0 ...host4_interfaces => dc-server4_interfaces} | 0 35 files changed, 400 insertions(+), 400 deletions(-) rename configs/{border-leaf-campus1.cfg => campus-border-leaf1.cfg} (97%) rename configs/{border-leaf-campus2.cfg => campus-border-leaf2.cfg} (97%) rename configs/{access1.cfg => dc-access1.cfg} (83%) rename configs/{access2.cfg => dc-access2.cfg} (84%) rename configs/{access3.cfg => dc-access3.cfg} (83%) rename configs/{access4.cfg => dc-access4.cfg} (84%) rename configs/{border-leaf-dc1.cfg => dc-border-leaf1.cfg} (97%) rename configs/{border-leaf-dc2.cfg => dc-border-leaf2.cfg} (97%) rename configs/{leaf1.cfg => dc-leaf1.cfg} (96%) rename configs/{leaf2.cfg => dc-leaf2.cfg} (96%) rename configs/{leaf3.cfg => dc-leaf3.cfg} (96%) rename configs/{leaf4.cfg => dc-leaf4.cfg} (96%) rename configs/{leaf5.cfg => dc-leaf5.cfg} (96%) rename configs/{leaf6.cfg => dc-leaf6.cfg} (96%) rename configs/{leaf7.cfg => dc-leaf7.cfg} (96%) rename configs/{leaf8.cfg => dc-leaf8.cfg} (96%) rename configs/{spine1.cfg => dc-spine1.cfg} (92%) rename configs/{spine2.cfg => dc-spine2.cfg} (92%) rename hosts/{host1_interfaces => dc-server1_interfaces} (100%) rename hosts/{host2_interfaces => dc-server2_interfaces} (100%) rename hosts/{host3_interfaces => dc-server3_interfaces} (100%) rename hosts/{host4_interfaces => dc-server4_interfaces} (100%) diff --git a/END_TO_END_TESTING.md b/END_TO_END_TESTING.md index d5d6864..f223926 100644 --- a/END_TO_END_TESTING.md +++ b/END_TO_END_TESTING.md @@ -22,19 +22,19 @@ This document provides a step-by-step guide to test the EVPN VXLAN fabric after ### 1. Check MLAG Status on All Leaf Pairs ```bash -# Leaf Pair 1 (leaf1 & leaf2) +# Leaf Pair 1 (dc-leaf1 & dc-leaf2) ssh admin@clab-arista-evpn-fabric-leaf1 "show mlag detail" ssh admin@clab-arista-evpn-fabric-leaf2 "show mlag detail" -# Leaf Pair 2 (leaf3 & leaf4) +# Leaf Pair 2 (dc-leaf3 & dc-leaf4) ssh admin@clab-arista-evpn-fabric-leaf3 "show mlag detail" ssh admin@clab-arista-evpn-fabric-leaf4 "show mlag detail" -# Leaf Pair 3 (leaf5 & leaf6) +# Leaf Pair 3 (dc-leaf5 & dc-leaf6) ssh admin@clab-arista-evpn-fabric-leaf5 "show mlag detail" ssh admin@clab-arista-evpn-fabric-leaf6 "show mlag detail" -# Leaf Pair 4 (leaf7 & leaf8) +# Leaf Pair 4 (dc-leaf7 & dc-leaf8) ssh admin@clab-arista-evpn-fabric-leaf7 "show mlag detail" ssh admin@clab-arista-evpn-fabric-leaf8 "show mlag detail" ``` @@ -69,11 +69,11 @@ ssh admin@clab-arista-evpn-fabric-leaf1 "show bgp evpn summary" #### Step 1: Verify Host Network Interfaces ```bash -# Check host1 VLAN interface +# Check dc-server1 VLAN interface docker exec clab-arista-evpn-fabric-host1 ip -d link show bond0.40 docker exec clab-arista-evpn-fabric-host1 ip addr show bond0.40 -# Check host3 VLAN interface +# Check dc-server3 VLAN interface docker exec clab-arista-evpn-fabric-host3 ip -d link show bond0.40 docker exec clab-arista-evpn-fabric-host3 ip addr show bond0.40 ``` @@ -103,12 +103,12 @@ timeout 10 docker exec clab-arista-evpn-fabric-host1 ping -c 4 10.40.40.103 # On Leaf1 - check local MAC learning ssh admin@clab-arista-evpn-fabric-leaf1 "show mac address-table vlan 40" -# Expected: MAC from host1 should appear on Port-Channel1 +# Expected: MAC from dc-server1 should appear on Port-Channel1 # On Leaf5 - check MAC learning ssh admin@clab-arista-evpn-fabric-leaf5 "show mac address-table vlan 40" -# Expected: MAC from host3 should appear on Port-Channel1 +# Expected: MAC from dc-server3 should appear on Port-Channel1 ``` #### Step 5: Verify VXLAN Learning @@ -132,8 +132,8 @@ ssh admin@clab-arista-evpn-fabric-leaf1 "show vxlan address-table" ssh admin@clab-arista-evpn-fabric-leaf1 "show bgp evpn route-type mac-ip" # Expected: -# - Local MAC (host1) with RD 65001:110040 -# - Remote MAC (host3) with RD 65003:110040 pointing to VTEP 10.0.255.13 +# - Local MAC (dc-server1) with RD 65001:110040 +# - Remote MAC (dc-server3) with RD 65003:110040 pointing to VTEP 10.0.255.13 ``` ## L3 VXLAN Testing (VRF gold) @@ -147,11 +147,11 @@ ssh admin@clab-arista-evpn-fabric-leaf1 "show bgp evpn route-type mac-ip" #### Step 1: Verify Host Network Interfaces ```bash -# Check host2 VLAN interface +# Check dc-server2 VLAN interface docker exec clab-arista-evpn-fabric-host2 ip -d link show bond0.34 docker exec clab-arista-evpn-fabric-host2 ip addr show bond0.34 -# Check host4 VLAN interface +# Check dc-server4 VLAN interface docker exec clab-arista-evpn-fabric-host4 ip -d link show bond0.78 docker exec clab-arista-evpn-fabric-host4 ip addr show bond0.78 ``` diff --git a/README.md b/README.md index c775314..0338616 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ ssh admin@clab-arista-evpn-fabric-core1 ssh admin@clab-arista-evpn-fabric-campus-leaf1 # Or via docker exec -docker exec -it clab-arista-evpn-fabric-border-leaf-dc1 Cli +docker exec -it clab-arista-evpn-fabric-dc-border-leaf1 Cli ``` ## 📋 Architecture @@ -66,19 +66,19 @@ docker exec -it clab-arista-evpn-fabric-border-leaf-dc1 Cli | Zone | Role | Nodes | AS | | ------ | ----------------------- | ------------------------------------------------------ | ------ | -| DC | Spine | `spine1`, `spine2` | 65000 | -| DC | Leaf VTEP1 (MLAG) | `leaf1`, `leaf2` | 65001 | -| DC | Leaf VTEP2 (MLAG) | `leaf3`, `leaf4` | 65002 | -| DC | Leaf VTEP3 (MLAG) | `leaf5`, `leaf6` | 65003 | -| DC | Leaf VTEP4 (MLAG) | `leaf7`, `leaf8` | 65004 | -| DC | Border Leaf (MLAG) | `border-leaf-dc1`, `border-leaf-dc2` | 65005 | -| DC | Access (L2-only) | `access1`-`access4` | — | -| DC | Host | `host1`-`host4` | — | +| DC | Spine | `dc-spine1`, `dc-spine2` | 65000 | +| DC | Leaf VTEP1 (MLAG) | `dc-leaf1`, `dc-leaf2` | 65001 | +| DC | Leaf VTEP2 (MLAG) | `dc-leaf3`, `dc-leaf4` | 65002 | +| DC | Leaf VTEP3 (MLAG) | `dc-leaf5`, `dc-leaf6` | 65003 | +| DC | Leaf VTEP4 (MLAG) | `dc-leaf7`, `dc-leaf8` | 65004 | +| DC | Border Leaf (MLAG) | `dc-border-leaf1`, `dc-border-leaf2` | 65005 | +| DC | Access (L2-only) | `dc-access1`-`dc-access4` | — | +| DC | Host | `dc-server1`-`dc-server4` | — | | Core | Core router | `core1`, `core2` | 65500 | | Campus | Spine | `campus-spine1`, `campus-spine2` | 66000 | | Campus | Leaf VTEP1 (MLAG) | `campus-leaf1`, `campus-leaf2` | 66001 | | Campus | Leaf VTEP2 (MLAG) | `campus-leaf3`, `campus-leaf4` | 66002 | -| Campus | Border Leaf (MLAG) | `border-leaf-campus1`, `border-leaf-campus2` | 66005 | +| Campus | Border Leaf (MLAG) | `campus-border-leaf1`, `campus-border-leaf2` | 66005 | | Campus | Access (L2-only) | `campus-access1`, `campus-access2` | — | | Campus | Host | `campus-host1`, `campus-host2` | — | @@ -87,10 +87,10 @@ docker exec -it clab-arista-evpn-fabric-border-leaf-dc1 Cli | AS | Role | | ----- | ---------------------------------- | | 65000 | DC Spine | -| 65001 | DC VTEP1 (leaf1/2) | -| 65002 | DC VTEP2 (leaf3/4) | -| 65003 | DC VTEP3 (leaf5/6) | -| 65004 | DC VTEP4 (leaf7/8) | +| 65001 | DC VTEP1 (dc-leaf1/2) | +| 65002 | DC VTEP2 (dc-leaf3/4) | +| 65003 | DC VTEP3 (dc-leaf5/6) | +| 65004 | DC VTEP4 (dc-leaf7/8) | | 65005 | DC Border Leaf pair | | 65500 | Core (iBGP between core1 & core2) | | 66000 | Campus Spine | @@ -102,10 +102,10 @@ docker exec -it clab-arista-evpn-fabric-border-leaf-dc1 Cli | Access Switch | Uplink Pair | VLANs | Host | Host attachment | | --------------- | ------------------------ | -------- | -------------- | ------------------------- | -| access1 | leaf1/2 (VTEP1) | 40 | host1 | LACP Po1 (dual-homed) | -| access2 | leaf3/4 (VTEP2) | 34 | host2 | LACP Po1 (dual-homed) | -| access3 | leaf5/6 (VTEP3) | 40 | host3 | LACP Po1 (dual-homed) | -| access4 | leaf7/8 (VTEP4) | 78 | host4 | LACP Po1 (dual-homed) | +| dc-access1 | dc-leaf1/2 (VTEP1) | 40 | dc-server1 | LACP Po1 (dual-homed) | +| dc-access2 | dc-leaf3/4 (VTEP2) | 34 | dc-server2 | LACP Po1 (dual-homed) | +| dc-access3 | dc-leaf5/6 (VTEP3) | 40 | dc-server3 | LACP Po1 (dual-homed) | +| dc-access4 | dc-leaf7/8 (VTEP4) | 78 | dc-server4 | LACP Po1 (dual-homed) | | campus-access1 | campus-leaf1/2 (VTEP1) | 60 | campus-host1 | access port (single link) | | campus-access2 | campus-leaf3/4 (VTEP2) | 70 | campus-host2 | access port (single link) | @@ -124,16 +124,16 @@ Host-facing ports: | Node | IP | Node | IP | | ------------------------- | --------------- | ------------------------- | --------------- | -| spine1 | 172.16.0.1 | campus-spine1 | 172.16.0.20 | -| spine2 | 172.16.0.2 | campus-spine2 | 172.16.0.21 | -| border-leaf-dc1 | 172.16.0.3 | border-leaf-campus1 | 172.16.0.22 | -| border-leaf-dc2 | 172.16.0.4 | border-leaf-campus2 | 172.16.0.23 | +| dc-spine1 | 172.16.0.1 | campus-spine1 | 172.16.0.20 | +| dc-spine2 | 172.16.0.2 | campus-spine2 | 172.16.0.21 | +| dc-border-leaf1 | 172.16.0.3 | campus-border-leaf1 | 172.16.0.22 | +| dc-border-leaf2 | 172.16.0.4 | campus-border-leaf2 | 172.16.0.23 | | core1 | 172.16.0.10 | campus-leaf1-4 | 172.16.0.51-54 | | core2 | 172.16.0.11 | campus-access1 | 172.16.0.61 | -| leaf1 | 172.16.0.25 | campus-access2 | 172.16.0.62 | -| leaf2 | 172.16.0.50 | host1-4 | 172.16.0.101-104| -| leaf3-8 | 172.16.0.27-32 | campus-host1 | 172.16.0.105 | -| access1-4 | 172.16.0.41-44 | campus-host2 | 172.16.0.106 | +| dc-leaf1 | 172.16.0.25 | campus-access2 | 172.16.0.62 | +| dc-leaf2 | 172.16.0.50 | dc-server1-4 | 172.16.0.101-104| +| dc-leaf3-8 | 172.16.0.27-32 | campus-host1 | 172.16.0.105 | +| dc-access1-4 | 172.16.0.41-44 | campus-host2 | 172.16.0.106 | Gateway: `172.16.0.254`. @@ -141,7 +141,7 @@ Gateway: `172.16.0.254`. | Zone | Range | Nodes | | ------ | ------------------- | --------------------------------------------------------------------- | -| DC | `10.0.250.0/24` | spine1 .1, spine2 .2, leaf1-8 .11-.18, BL-dc1 .21, BL-dc2 .22 | +| DC | `10.0.250.0/24` | dc-spine1 .1, dc-spine2 .2, dc-leaf1-8 .11-.18, BL-dc1 .21, BL-dc2 .22 | | Core | `10.0.200.0/24` | core1 `10.0.200.1`, core2 `10.0.200.2` | | Campus | `10.1.250.0/24` | campus-spine1 .1, campus-spine2 .2, campus-leaf1-4 .11-.14, BL-campus1 .21, BL-campus2 .22 | @@ -149,21 +149,21 @@ Gateway: `172.16.0.254`. | Fabric | VTEP | Address | Leafs | | ------ | ------ | --------------- | ---------------------- | -| DC | VTEP1 | `10.0.255.11` | leaf1, leaf2 | -| DC | VTEP2 | `10.0.255.12` | leaf3, leaf4 | -| DC | VTEP3 | `10.0.255.13` | leaf5, leaf6 | -| DC | VTEP4 | `10.0.255.14` | leaf7, leaf8 | -| DC | BL | `10.0.255.15` | border-leaf-dc1/2 | +| DC | VTEP1 | `10.0.255.11` | dc-leaf1, dc-leaf2 | +| DC | VTEP2 | `10.0.255.12` | dc-leaf3, dc-leaf4 | +| DC | VTEP3 | `10.0.255.13` | dc-leaf5, dc-leaf6 | +| DC | VTEP4 | `10.0.255.14` | dc-leaf7, dc-leaf8 | +| DC | BL | `10.0.255.15` | dc-border-leaf1/2 | | Campus | VTEP1 | `10.1.255.11` | campus-leaf1/2 | | Campus | VTEP2 | `10.1.255.12` | campus-leaf3/4 | -| Campus | BL | `10.1.255.21` | border-leaf-campus1/2 | +| Campus | BL | `10.1.255.21` | campus-border-leaf1/2 | ### Underlay P2P (`/31`) | Segment | Subnets | | -------------------------------- | --------------------------------------- | -| DC spine1 ↔ leaf/BL | `10.0.1.0/31` … `10.0.1.18/31` | -| DC spine2 ↔ leaf/BL | `10.0.2.0/31` … `10.0.2.18/31` | +| DC dc-spine1 ↔ leaf/BL | `10.0.1.0/31` … `10.0.1.18/31` | +| DC dc-spine2 ↔ leaf/BL | `10.0.2.0/31` … `10.0.2.18/31` | | DC MLAG iBGP SVIs (per pair) | `10.0.3.0/31`, `.2/31`, `.4/31`, `.6/31`, `.8/31` (BL) | | DC MLAG peer-link SVIs | `10.0.199.240/31` … `10.0.199.246/31` | | DC-BL ↔ Core (default, `.100`) | `10.0.4.0/31` .. `10.0.4.6/31` | @@ -172,8 +172,8 @@ Gateway: `172.16.0.254`. | Campus-BL ↔ Core (VRF gold) | `10.0.15.0/31` .. `10.0.15.6/31` | | Core1 ↔ Core2 (default) | `10.0.200.128/31` | | Core1 ↔ Core2 (VRF gold) | `10.0.200.130/31` | -| Campus spine1 ↔ leaf/BL | `10.1.1.0/31` … `10.1.1.10/31` | -| Campus spine2 ↔ leaf/BL | `10.1.2.0/31` … `10.1.2.10/31` | +| Campus dc-spine1 ↔ leaf/BL | `10.1.1.0/31` … `10.1.1.10/31` | +| Campus dc-spine2 ↔ leaf/BL | `10.1.2.0/31` … `10.1.2.10/31` | | Campus MLAG iBGP SVIs | `10.1.3.0/31`, `.2/31`, `.4/31` | | Campus MLAG peer-link SVIs | `10.1.199.250/31` … `10.1.199.254/31` | @@ -181,10 +181,10 @@ Gateway: `172.16.0.254`. | Host | VLAN | VRF | IP / Mask | Gateway | Purpose | | ------------- | ---- | -------- | ----------------- | ------------ | ------------------------------ | -| host1 | 40 | default | 10.40.40.101/24 | — | DC L2 stretched (VTEP1↔VTEP3) | -| host2 | 34 | gold | 10.34.34.102/24 | 10.34.34.1 | DC L3 VRF gold | -| host3 | 40 | default | 10.40.40.103/24 | — | DC L2 stretched | -| host4 | 78 | gold | 10.78.78.104/24 | 10.78.78.1 | DC L3 VRF gold | +| dc-server1 | 40 | default | 10.40.40.101/24 | — | DC L2 stretched (VTEP1↔VTEP3) | +| dc-server2 | 34 | gold | 10.34.34.102/24 | 10.34.34.1 | DC L3 VRF gold | +| dc-server3 | 40 | default | 10.40.40.103/24 | — | DC L2 stretched | +| dc-server4 | 78 | gold | 10.78.78.104/24 | 10.78.78.1 | DC L3 VRF gold | | campus-host1 | 60 | gold | 10.60.60.101/24 | 10.60.60.1 | Campus L3 VRF gold | | campus-host2 | 70 | gold | 10.60.70.102/24 | 10.60.70.1 | Campus L3 VRF gold | @@ -197,7 +197,7 @@ Gateway: `172.16.0.254`. | VLAN | Description | VNI | Scope | RT | | ---- | ------------------------------ | ------ | ------------------------------------------------------ | ---------- | -| 40 | DC L2 VXLAN (stretched) | 110040 | DC VTEP1 (leaf1/2) + VTEP3 (leaf5/6) | 40:110040 | +| 40 | DC L2 VXLAN (stretched) | 110040 | DC VTEP1 (dc-leaf1/2) + VTEP3 (dc-leaf5/6) | 40:110040 | | 50 | Campus L2 VXLAN (stretched) | 110050 | Campus VTEP1 (campus-leaf1/2) + VTEP2 (campus-leaf3/4) | 50:110050 | | 34 | DC VRF gold subnet (local) | 110034 | DC VTEP2 only (anycast GW 10.34.34.1) | 34:110034 | | 78 | DC VRF gold subnet (local) | 110078 | DC VTEP4 only (anycast GW 10.78.78.1) | 78:110078 | @@ -241,7 +241,7 @@ VRF `gold` is announced over EVPN Type-5 (IP prefix) inside each fabric, and **s # DC ssh admin@clab-arista-evpn-fabric-spine1 "show bgp evpn summary" ssh admin@clab-arista-evpn-fabric-leaf3 "show bgp evpn summary" -ssh admin@clab-arista-evpn-fabric-border-leaf-dc1 "show bgp evpn summary" +ssh admin@clab-arista-evpn-fabric-dc-border-leaf1 "show bgp evpn summary" # Campus ssh admin@clab-arista-evpn-fabric-campus-spine1 "show bgp evpn summary" @@ -272,10 +272,10 @@ show mlag interfaces detail ### Intra-DC connectivity (existing tests) ```bash -# L2 VLAN 40: host1 ↔ host3 +# L2 VLAN 40: dc-server1 ↔ dc-server3 docker exec -it clab-arista-evpn-fabric-host1 ping -c 3 10.40.40.103 -# L3 VRF gold (DC only): host2 ↔ host4 +# L3 VRF gold (DC only): dc-server2 ↔ dc-server4 docker exec -it clab-arista-evpn-fabric-host2 ping -c 3 10.78.78.104 ``` @@ -295,10 +295,10 @@ docker exec -it clab-arista-evpn-fabric-campus-host2 ping -c 3 10.60.60.101 ### End-to-end Campus ↔ DC (VRF gold via Core) ```bash -# campus-host1 (10.60.60.101, VRF gold Campus) → host2 (10.34.34.102, VRF gold DC) +# campus-host1 (10.60.60.101, VRF gold Campus) → dc-server2 (10.34.34.102, VRF gold DC) docker exec -it clab-arista-evpn-fabric-campus-host1 ping -c 3 10.34.34.102 -# campus-host2 (10.60.70.102) → host4 (10.78.78.104) +# campus-host2 (10.60.70.102) → dc-server4 (10.78.78.104) docker exec -it clab-arista-evpn-fabric-campus-host2 ping -c 3 10.78.78.104 # Reverse direction @@ -317,10 +317,10 @@ ssh admin@clab-arista-evpn-fabric-core1 "show ip route vrf gold" ssh admin@clab-arista-evpn-fabric-core1 "show ip bgp vrf gold" # EVPN Type-5 on DC-BL (imported from DC fabric, redistributed from Core into EVPN) -ssh admin@clab-arista-evpn-fabric-border-leaf-dc1 "show bgp evpn route-type ip-prefix ipv4" +ssh admin@clab-arista-evpn-fabric-dc-border-leaf1 "show bgp evpn route-type ip-prefix ipv4" # EVPN Type-5 on Campus-BL -ssh admin@clab-arista-evpn-fabric-border-leaf-campus1 "show bgp evpn route-type ip-prefix ipv4" +ssh admin@clab-arista-evpn-fabric-campus-border-leaf1 "show bgp evpn route-type ip-prefix ipv4" ``` ## 📁 Repository Structure @@ -335,20 +335,20 @@ arista-evpn-vxlan-clab/ ├── assets/ │ └── arista-evpn-fabric.svg ├── configs/ -│ ├── spine1.cfg, spine2.cfg -│ ├── leaf1.cfg … leaf8.cfg -│ ├── border-leaf-dc1.cfg, border-leaf-dc2.cfg -│ ├── access1.cfg … access4.cfg +│ ├── dc-spine1.cfg, dc-spine2.cfg +│ ├── dc-leaf1.cfg … dc-leaf8.cfg +│ ├── dc-border-leaf1.cfg, dc-border-leaf2.cfg +│ ├── dc-access1.cfg … dc-access4.cfg │ ├── core1.cfg, core2.cfg │ ├── campus-spine1.cfg, campus-spine2.cfg │ ├── campus-leaf1.cfg … campus-leaf4.cfg -│ ├── border-leaf-campus1.cfg, border-leaf-campus2.cfg +│ ├── campus-border-leaf1.cfg, campus-border-leaf2.cfg │ └── campus-access1.cfg, campus-access2.cfg └── hosts/ ├── README.md - ├── host1_interfaces … host4_interfaces - ├── campus-host1_interfaces - └── campus-host2_interfaces + ├── dc-server1_interfaces … dc-server4_interfaces + ├── campus-dc-server1_interfaces + └── campus-dc-server2_interfaces ``` ## 🗑️ Cleanup diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 6a75e1e..5359acb 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -72,7 +72,7 @@ Ethernet11 is up, line protocol is up (connected) ### 2.1 Verify MLAG Peering -**On each MLAG leaf pair (e.g., leaf1/leaf2):** +**On each MLAG leaf pair (e.g., dc-leaf1/dc-leaf2):** ```bash # MLAG global status @@ -173,7 +173,7 @@ Active Ports: Ethernet1 local/remote mlag desc state local remote status ------ -------------- ------------- ----------- ------------ --------------- - 1 host1 active-full Po1 Po1 up/up + 1 dc-server1 active-full Po1 Po1 up/up ``` **Troubleshooting:** @@ -528,7 +528,7 @@ Shows which remote VTEP the MAC is behind! ## End-to-End Traffic Flow -### Scenario: host1 (VTEP1) pings host3 (VTEP3) - L2 VXLAN +### Scenario: dc-server1 (VTEP1) pings dc-server3 (VTEP3) - L2 VXLAN Both hosts in VLAN 40 (10.40.40.0/24) @@ -536,7 +536,7 @@ Both hosts in VLAN 40 (10.40.40.0/24) #### Step 1: Host Sends Packet -**On host1:** +**On dc-server1:** ```bash docker exec -it clab-arista-evpn-fabric-host1 sh @@ -558,9 +558,9 @@ ping 10.40.40.103 --- -#### Step 2: Packet Arrives at leaf1 (VTEP1) +#### Step 2: Packet Arrives at dc-leaf1 (VTEP1) -**On leaf1:** +**On dc-leaf1:** ```bash # Check Port-Channel received the packet @@ -569,13 +569,13 @@ show interfaces Port-Channel1 | include packets # Check MAC learning show mac address-table dynamic vlan 40 -# Should see host1's MAC on Po1 +# Should see dc-server1's MAC on Po1 ``` **Traffic flow:** ``` -host1:bond0.40 → [802.1Q VLAN 40] → leaf1:Eth1 → Po1 +dc-server1:bond0.40 → [802.1Q VLAN 40] → dc-leaf1:Eth1 → Po1 ``` --- @@ -603,12 +603,12 @@ show vxlan address-table address 00c1.ab00.0033 **Encapsulation:** ``` -Original: [Eth: host1→host3][IP: 10.40.40.101→103][ICMP] +Original: [Eth: dc-server1→dc-server3][IP: 10.40.40.101→103][ICMP] VXLAN: [Outer IP: 10.0.255.11→10.0.255.13] [Outer UDP: src=random, dst=4789] [VXLAN Header: VNI=110040] - [Inner Eth: host1→host3][IP: 10.40.40.101→103][ICMP] + [Inner Eth: dc-server1→dc-server3][IP: 10.40.40.101→103][ICMP] ``` --- @@ -622,27 +622,27 @@ VXLAN: [Outer IP: 10.0.255.11→10.0.255.13] show ip route 10.0.255.13 # Output: -# via 10.0.1.0, Ethernet11 (spine1) -# via 10.0.2.0, Ethernet12 (spine2) +# via 10.0.1.0, Ethernet11 (dc-spine1) +# via 10.0.2.0, Ethernet12 (dc-spine2) ``` -ECMP: Packet can go via spine1 OR spine2! +ECMP: Packet can go via dc-spine1 OR dc-spine2! **Spine forwards based on outer IP:** ```bash -# On spine1 +# On dc-spine1 show ip route 10.0.255.13 # Output: -# via 10.0.1.5, Ethernet3 (leaf5) +# via 10.0.1.5, Ethernet3 (dc-leaf5) ``` --- -#### Step 5: Packet Arrives at leaf5 (VTEP3) +#### Step 5: Packet Arrives at dc-leaf5 (VTEP3) -**On leaf5:** +**On dc-leaf5:** ```bash # Check VXLAN received the packet @@ -655,7 +655,7 @@ show interfaces Vxlan1 | include packets ``` VXLAN packet → Strip outer IP/UDP/VXLAN headers -→ Original frame: [Eth: host1→host3][IP: 10.40.40.101→103][ICMP] +→ Original frame: [Eth: dc-server1→dc-server3][IP: 10.40.40.101→103][ICMP] ``` **Leaf5 checks MAC table:** @@ -669,13 +669,13 @@ show mac address-table address 00c1.ab00.0033 --- -#### Step 6: Packet Delivered to host3 +#### Step 6: Packet Delivered to dc-server3 ``` -leaf5:Vxlan1 → VLAN 40 → Po1 → Eth1 → host3:bond0.40 +dc-leaf5:Vxlan1 → VLAN 40 → Po1 → Eth1 → dc-server3:bond0.40 ``` -**On host3:** +**On dc-server3:** ```bash docker exec -it clab-arista-evpn-fabric-host3 sh @@ -693,19 +693,19 @@ ping 10.40.40.101 # Reply should work! │ L2 VXLAN Traffic Flow │ └─────────────────────────────────────────────────────────────────┘ -host1 (10.40.40.101) host3 (10.40.40.103) +dc-server1 (10.40.40.101) dc-server3 (10.40.40.103) │ ▲ │ 1. Send ping to 10.40.40.103 │ │ [VLAN 40 tag] │ 6. Receive reply │ │ [VLAN 40 tag] ▼ │ -leaf1:Po1 leaf5:Po1 +dc-leaf1:Po1 dc-leaf5:Po1 │ ▲ │ 2. MAC lookup: │ 5. MAC lookup: │ 00c1.ab00.0033 → Vx1 → 10.0.255.13 │ 00c1.ab00.0011 → Vx1 │ │ ▼ │ -leaf1:Vxlan1 leaf5:Vxlan1 +dc-leaf1:Vxlan1 dc-leaf5:Vxlan1 │ ▲ │ 3. VXLAN encap: │ 4. VXLAN decap: │ Outer: 10.0.255.11 → 10.0.255.13 │ Strip outer headers @@ -713,7 +713,7 @@ leaf1:Vxlan1 leaf5:Vxlan1 │ Inner: original frame │ │ │ ▼ │ -leaf1:Eth11 ──────► spine1 ──────► leaf5:Eth11 ──────────┘ +dc-leaf1:Eth11 ──────► dc-spine1 ──────► dc-leaf5:Eth11 ──────────┘ (underlay BGP routing) ``` @@ -776,7 +776,7 @@ show vxlan address-table vlan 40 **Symptoms:** -- host2 (10.34.34.102) cannot ping host4 (10.78.78.104) +- dc-server2 (10.34.34.102) cannot ping dc-server4 (10.78.78.104) - Both in VRF gold **Troubleshooting Steps:** @@ -956,14 +956,14 @@ show mac address-table count **Test L2 VXLAN (VLAN 40):** ```bash -# On host1 +# On dc-server1 ping 10.40.40.103 -c 3 -# On leaf1 (VTEP1) +# On dc-leaf1 (VTEP1) show mac address-table address 00c1.ab00.0033 show vxlan address-table address 00c1.ab00.0033 -# On leaf5 (VTEP3) +# On dc-leaf5 (VTEP3) show mac address-table address 00c1.ab00.0011 show vxlan address-table address 00c1.ab00.0011 ``` @@ -971,14 +971,14 @@ show vxlan address-table address 00c1.ab00.0011 **Test L3 VXLAN (VRF gold):** ```bash -# On host2 +# On dc-server2 ping 10.78.78.104 -c 3 -# On leaf3 (VTEP2) +# On dc-leaf3 (VTEP2) show ip route vrf gold 10.78.78.0/24 show bgp evpn route-type ip-prefix ipv4 10.78.78.0/24 -# On leaf7 (VTEP4) +# On dc-leaf7 (VTEP4) show ip route vrf gold 10.34.34.0/24 ``` diff --git a/assets/arista-evpn-fabric.svg b/assets/arista-evpn-fabric.svg index bd8210b..efac5f3 100644 --- a/assets/arista-evpn-fabric.svg +++ b/assets/arista-evpn-fabric.svg @@ -58,9 +58,9 @@ - border-leaf-campus1 + campus-border-leaf1 - border-leaf-campus2 + campus-border-leaf2 @@ -99,7 +99,7 @@ - + @@ -146,61 +146,61 @@ - spine1 + dc-spine1 - spine2 + dc-spine2 - leaf1 + dc-leaf1 - leaf2 + dc-leaf2 - leaf3 + dc-leaf3 - leaf4 + dc-leaf4 - leaf5 + dc-leaf5 - leaf6 + dc-leaf6 - leaf7 + dc-leaf7 - leaf8 + dc-leaf8 - border-leaf-dc1 + dc-border-leaf1 - border-leaf-dc2 + dc-border-leaf2 - access1 + dc-access1 - access2 + dc-access2 - access3 + dc-access3 - access4 + dc-access4 - host1 + dc-server1 - host2 + dc-server2 - host3 + dc-server3 - host4 + dc-server4 @@ -233,7 +233,7 @@ - + diff --git a/configs/campus-access1.cfg b/configs/campus-access1.cfg index 9518fff..0d04f2c 100644 --- a/configs/campus-access1.cfg +++ b/configs/campus-access1.cfg @@ -1,5 +1,5 @@ ! Campus-Access1 Configuration -! L2-only access switch for Campus VTEP1 (campus-leaf1/leaf2) +! L2-only access switch for Campus VTEP1 (campus-leaf1/dc-leaf2) ! hostname campus-access1 ! diff --git a/configs/campus-access2.cfg b/configs/campus-access2.cfg index 49f0996..e38cda9 100644 --- a/configs/campus-access2.cfg +++ b/configs/campus-access2.cfg @@ -1,5 +1,5 @@ ! Campus-Access2 Configuration -! L2-only access switch for Campus VTEP2 (campus-leaf3/leaf4) +! L2-only access switch for Campus VTEP2 (campus-leaf3/dc-leaf4) ! hostname campus-access2 ! diff --git a/configs/border-leaf-campus1.cfg b/configs/campus-border-leaf1.cfg similarity index 97% rename from configs/border-leaf-campus1.cfg rename to configs/campus-border-leaf1.cfg index 553489a..f67ef76 100644 --- a/configs/border-leaf-campus1.cfg +++ b/configs/campus-border-leaf1.cfg @@ -1,8 +1,8 @@ -! Border-Leaf-Campus1 Configuration -! Campus Border Leaf - AS 66005 (MLAG pair with border-leaf-campus2) +! Campus-Border-Leaf1 Configuration +! Campus Border Leaf - AS 66005 (MLAG pair with campus-border-leaf2) ! Provides egress from Campus EVPN-VXLAN fabric to Core L3 network ! -hostname border-leaf-campus1 +hostname campus-border-leaf1 ! ! LLDP Management0 lldp management-address Management0 diff --git a/configs/border-leaf-campus2.cfg b/configs/campus-border-leaf2.cfg similarity index 97% rename from configs/border-leaf-campus2.cfg rename to configs/campus-border-leaf2.cfg index 6c30128..48a8273 100644 --- a/configs/border-leaf-campus2.cfg +++ b/configs/campus-border-leaf2.cfg @@ -1,8 +1,8 @@ -! Border-Leaf-Campus2 Configuration -! Campus Border Leaf - AS 66005 (MLAG pair with border-leaf-campus1) +! Campus-Border-Leaf2 Configuration +! Campus Border Leaf - AS 66005 (MLAG pair with campus-border-leaf1) ! Provides egress from Campus EVPN-VXLAN fabric to Core L3 network ! -hostname border-leaf-campus2 +hostname campus-border-leaf2 ! ! LLDP Management0 lldp management-address Management0 diff --git a/configs/campus-spine1.cfg b/configs/campus-spine1.cfg index f982a3e..e29ed05 100644 --- a/configs/campus-spine1.cfg +++ b/configs/campus-spine1.cfg @@ -56,13 +56,13 @@ interface Ethernet4 ! ! Underlay P2P interfaces to Campus Border Leafs interface Ethernet5 - description border-leaf-campus1 + description campus-border-leaf1 no switchport ip address 10.1.1.8/31 mtu 9214 ! interface Ethernet6 - description border-leaf-campus2 + description campus-border-leaf2 no switchport ip address 10.1.1.10/31 mtu 9214 diff --git a/configs/campus-spine2.cfg b/configs/campus-spine2.cfg index d49ce0e..bf59865 100644 --- a/configs/campus-spine2.cfg +++ b/configs/campus-spine2.cfg @@ -56,13 +56,13 @@ interface Ethernet4 ! ! Underlay P2P interfaces to Campus Border Leafs interface Ethernet5 - description border-leaf-campus1 + description campus-border-leaf1 no switchport ip address 10.1.2.8/31 mtu 9214 ! interface Ethernet6 - description border-leaf-campus2 + description campus-border-leaf2 no switchport ip address 10.1.2.10/31 mtu 9214 diff --git a/configs/core1.cfg b/configs/core1.cfg index a15e611..d30b201 100644 --- a/configs/core1.cfg +++ b/configs/core1.cfg @@ -41,18 +41,18 @@ interface Loopback1 ! ! Link to DC Border Leaf 1 (subinterfaced: .100 default VRF, .200 VRF gold) interface Ethernet1 - description border-leaf-dc1 + description dc-border-leaf1 no switchport mtu 9214 ! interface Ethernet1.100 - description border-leaf-dc1-underlay + description dc-border-leaf1-underlay encapsulation dot1q vlan 100 ip address 10.0.4.0/31 mtu 9214 ! interface Ethernet1.200 - description border-leaf-dc1-vrf-gold + description dc-border-leaf1-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.14.0/31 @@ -60,18 +60,18 @@ interface Ethernet1.200 ! ! Link to DC Border Leaf 2 interface Ethernet2 - description border-leaf-dc2 + description dc-border-leaf2 no switchport mtu 9214 ! interface Ethernet2.100 - description border-leaf-dc2-underlay + description dc-border-leaf2-underlay encapsulation dot1q vlan 100 ip address 10.0.4.2/31 mtu 9214 ! interface Ethernet2.200 - description border-leaf-dc2-vrf-gold + description dc-border-leaf2-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.14.2/31 @@ -79,18 +79,18 @@ interface Ethernet2.200 ! ! Link to Campus Border Leaf 1 interface Ethernet3 - description border-leaf-campus1 + description campus-border-leaf1 no switchport mtu 9214 ! interface Ethernet3.100 - description border-leaf-campus1-underlay + description campus-border-leaf1-underlay encapsulation dot1q vlan 100 ip address 10.0.5.0/31 mtu 9214 ! interface Ethernet3.200 - description border-leaf-campus1-vrf-gold + description campus-border-leaf1-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.15.0/31 @@ -98,18 +98,18 @@ interface Ethernet3.200 ! ! Link to Campus Border Leaf 2 interface Ethernet4 - description border-leaf-campus2 + description campus-border-leaf2 no switchport mtu 9214 ! interface Ethernet4.100 - description border-leaf-campus2-underlay + description campus-border-leaf2-underlay encapsulation dot1q vlan 100 ip address 10.0.5.2/31 mtu 9214 ! interface Ethernet4.200 - description border-leaf-campus2-vrf-gold + description campus-border-leaf2-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.15.2/31 diff --git a/configs/core2.cfg b/configs/core2.cfg index 55dc7bc..181c527 100644 --- a/configs/core2.cfg +++ b/configs/core2.cfg @@ -41,18 +41,18 @@ interface Loopback1 ! ! Link to DC Border Leaf 1 interface Ethernet1 - description border-leaf-dc1 + description dc-border-leaf1 no switchport mtu 9214 ! interface Ethernet1.100 - description border-leaf-dc1-underlay + description dc-border-leaf1-underlay encapsulation dot1q vlan 100 ip address 10.0.4.4/31 mtu 9214 ! interface Ethernet1.200 - description border-leaf-dc1-vrf-gold + description dc-border-leaf1-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.14.4/31 @@ -60,18 +60,18 @@ interface Ethernet1.200 ! ! Link to DC Border Leaf 2 interface Ethernet2 - description border-leaf-dc2 + description dc-border-leaf2 no switchport mtu 9214 ! interface Ethernet2.100 - description border-leaf-dc2-underlay + description dc-border-leaf2-underlay encapsulation dot1q vlan 100 ip address 10.0.4.6/31 mtu 9214 ! interface Ethernet2.200 - description border-leaf-dc2-vrf-gold + description dc-border-leaf2-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.14.6/31 @@ -79,18 +79,18 @@ interface Ethernet2.200 ! ! Link to Campus Border Leaf 1 interface Ethernet3 - description border-leaf-campus1 + description campus-border-leaf1 no switchport mtu 9214 ! interface Ethernet3.100 - description border-leaf-campus1-underlay + description campus-border-leaf1-underlay encapsulation dot1q vlan 100 ip address 10.0.5.4/31 mtu 9214 ! interface Ethernet3.200 - description border-leaf-campus1-vrf-gold + description campus-border-leaf1-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.15.4/31 @@ -98,18 +98,18 @@ interface Ethernet3.200 ! ! Link to Campus Border Leaf 2 interface Ethernet4 - description border-leaf-campus2 + description campus-border-leaf2 no switchport mtu 9214 ! interface Ethernet4.100 - description border-leaf-campus2-underlay + description campus-border-leaf2-underlay encapsulation dot1q vlan 100 ip address 10.0.5.6/31 mtu 9214 ! interface Ethernet4.200 - description border-leaf-campus2-vrf-gold + description campus-border-leaf2-vrf-gold encapsulation dot1q vlan 200 vrf gold ip address 10.0.15.6/31 diff --git a/configs/access1.cfg b/configs/dc-access1.cfg similarity index 83% rename from configs/access1.cfg rename to configs/dc-access1.cfg index 2c5a20f..73756e6 100644 --- a/configs/access1.cfg +++ b/configs/dc-access1.cfg @@ -1,7 +1,7 @@ -! Access1 Configuration -! L2-only access switch for VTEP1 (leaf1/leaf2) +! DC-Access1 Configuration +! L2-only access switch for VTEP1 (dc-leaf1/dc-leaf2) ! -hostname access1 +hostname dc-access1 ! ! LLDP Management0 lldp management-address Management0 @@ -28,11 +28,11 @@ spanning-tree edge-port bpduguard default ! ! Uplink to leaf MLAG pair (Port-Channel 10) interface Ethernet1 - description leaf1-uplink + description dc-leaf1-uplink channel-group 10 mode active ! interface Ethernet2 - description leaf2-uplink + description dc-leaf2-uplink channel-group 10 mode active ! interface Port-Channel10 @@ -43,15 +43,15 @@ interface Port-Channel10 ! ! Host-facing downlink (Port-Channel 1) interface Ethernet3 - description host1 + description dc-server1 channel-group 1 mode active ! interface Ethernet4 - description host1 + description dc-server1 channel-group 1 mode active ! interface Port-Channel1 - description host1 + description dc-server1 switchport mode trunk switchport trunk allowed vlan 40 port-channel lacp fallback timeout 5 diff --git a/configs/access2.cfg b/configs/dc-access2.cfg similarity index 84% rename from configs/access2.cfg rename to configs/dc-access2.cfg index 0437f31..3f6b6a5 100644 --- a/configs/access2.cfg +++ b/configs/dc-access2.cfg @@ -1,7 +1,7 @@ -! Access2 Configuration -! L2-only access switch for VTEP2 (leaf3/leaf4) +! DC-Access2 Configuration +! L2-only access switch for VTEP2 (dc-leaf3/dc-leaf4) ! -hostname access2 +hostname dc-access2 ! ! LLDP Management0 lldp management-address Management0 @@ -28,11 +28,11 @@ spanning-tree edge-port bpduguard default ! ! Uplink to leaf MLAG pair (Port-Channel 10) interface Ethernet1 - description leaf3-uplink + description dc-leaf3-uplink channel-group 10 mode active ! interface Ethernet2 - description leaf4-uplink + description dc-leaf4-uplink channel-group 10 mode active ! interface Port-Channel10 @@ -43,15 +43,15 @@ interface Port-Channel10 ! ! Host-facing downlink (Port-Channel 1) interface Ethernet3 - description host2 + description dc-server2 channel-group 1 mode active ! interface Ethernet4 - description host2 + description dc-server2 channel-group 1 mode active ! interface Port-Channel1 - description host2 + description dc-server2 switchport mode trunk switchport trunk allowed vlan 34 port-channel lacp fallback timeout 5 diff --git a/configs/access3.cfg b/configs/dc-access3.cfg similarity index 83% rename from configs/access3.cfg rename to configs/dc-access3.cfg index a6c4d4f..b46b314 100644 --- a/configs/access3.cfg +++ b/configs/dc-access3.cfg @@ -1,7 +1,7 @@ -! Access3 Configuration -! L2-only access switch for VTEP3 (leaf5/leaf6) +! DC-Access3 Configuration +! L2-only access switch for VTEP3 (dc-leaf5/dc-leaf6) ! -hostname access3 +hostname dc-access3 ! ! LLDP Management0 lldp management-address Management0 @@ -28,11 +28,11 @@ spanning-tree edge-port bpduguard default ! ! Uplink to leaf MLAG pair (Port-Channel 10) interface Ethernet1 - description leaf5-uplink + description dc-leaf5-uplink channel-group 10 mode active ! interface Ethernet2 - description leaf6-uplink + description dc-leaf6-uplink channel-group 10 mode active ! interface Port-Channel10 @@ -43,15 +43,15 @@ interface Port-Channel10 ! ! Host-facing downlink (Port-Channel 1) interface Ethernet3 - description host3 + description dc-server3 channel-group 1 mode active ! interface Ethernet4 - description host3 + description dc-server3 channel-group 1 mode active ! interface Port-Channel1 - description host3 + description dc-server3 switchport mode trunk switchport trunk allowed vlan 40 port-channel lacp fallback timeout 5 diff --git a/configs/access4.cfg b/configs/dc-access4.cfg similarity index 84% rename from configs/access4.cfg rename to configs/dc-access4.cfg index bde8efe..0efcddb 100644 --- a/configs/access4.cfg +++ b/configs/dc-access4.cfg @@ -1,7 +1,7 @@ -! Access4 Configuration -! L2-only access switch for VTEP4 (leaf7/leaf8) +! DC-Access4 Configuration +! L2-only access switch for VTEP4 (dc-leaf7/dc-leaf8) ! -hostname access4 +hostname dc-access4 ! ! LLDP Management0 lldp management-address Management0 @@ -28,11 +28,11 @@ spanning-tree edge-port bpduguard default ! ! Uplink to leaf MLAG pair (Port-Channel 10) interface Ethernet1 - description leaf7-uplink + description dc-leaf7-uplink channel-group 10 mode active ! interface Ethernet2 - description leaf8-uplink + description dc-leaf8-uplink channel-group 10 mode active ! interface Port-Channel10 @@ -43,15 +43,15 @@ interface Port-Channel10 ! ! Host-facing downlink (Port-Channel 1) interface Ethernet3 - description host4 + description dc-server4 channel-group 1 mode active ! interface Ethernet4 - description host4 + description dc-server4 channel-group 1 mode active ! interface Port-Channel1 - description host4 + description dc-server4 switchport mode trunk switchport trunk allowed vlan 78 port-channel lacp fallback timeout 5 diff --git a/configs/border-leaf-dc1.cfg b/configs/dc-border-leaf1.cfg similarity index 97% rename from configs/border-leaf-dc1.cfg rename to configs/dc-border-leaf1.cfg index 34c8878..2f1ecb5 100644 --- a/configs/border-leaf-dc1.cfg +++ b/configs/dc-border-leaf1.cfg @@ -1,8 +1,8 @@ -! Border-Leaf-DC1 Configuration -! DC Border Leaf - AS 65005 (MLAG pair with border-leaf-dc2) +! DC-Border-Leaf1 Configuration +! DC Border Leaf - AS 65005 (MLAG pair with dc-border-leaf2) ! Provides egress from DC EVPN-VXLAN fabric to Core L3 network ! -hostname border-leaf-dc1 +hostname dc-border-leaf1 ! ! LLDP Management0 lldp management-address Management0 @@ -76,13 +76,13 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.17/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.17/31 mtu 9214 diff --git a/configs/border-leaf-dc2.cfg b/configs/dc-border-leaf2.cfg similarity index 97% rename from configs/border-leaf-dc2.cfg rename to configs/dc-border-leaf2.cfg index 8303667..023d20e 100644 --- a/configs/border-leaf-dc2.cfg +++ b/configs/dc-border-leaf2.cfg @@ -1,8 +1,8 @@ -! Border-Leaf-DC2 Configuration -! DC Border Leaf - AS 65005 (MLAG pair with border-leaf-dc1) +! DC-Border-Leaf2 Configuration +! DC Border Leaf - AS 65005 (MLAG pair with dc-border-leaf1) ! Provides egress from DC EVPN-VXLAN fabric to Core L3 network ! -hostname border-leaf-dc2 +hostname dc-border-leaf2 ! ! LLDP Management0 lldp management-address Management0 @@ -76,13 +76,13 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.19/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.19/31 mtu 9214 diff --git a/configs/leaf1.cfg b/configs/dc-leaf1.cfg similarity index 96% rename from configs/leaf1.cfg rename to configs/dc-leaf1.cfg index 88d4362..f6dc0cb 100644 --- a/configs/leaf1.cfg +++ b/configs/dc-leaf1.cfg @@ -1,7 +1,7 @@ -! Leaf1 Configuration +! DC-Leaf1 Configuration ! VTEP1 - AS 65001 ! -hostname leaf1 +hostname dc-leaf1 ! ! LLDP Management0 lldp management-address Management0 @@ -67,24 +67,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.1/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.1/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access1 + description dc-access1 channel-group 1 mode active ! interface Port-Channel1 - description access1 + description dc-access1 switchport mode trunk switchport trunk allowed vlan 40 mlag 1 diff --git a/configs/leaf2.cfg b/configs/dc-leaf2.cfg similarity index 96% rename from configs/leaf2.cfg rename to configs/dc-leaf2.cfg index 0ea5757..38bf3c5 100644 --- a/configs/leaf2.cfg +++ b/configs/dc-leaf2.cfg @@ -1,7 +1,7 @@ -! Leaf2 Configuration +! DC-Leaf2 Configuration ! VTEP1 - AS 65001 ! -hostname leaf2 +hostname dc-leaf2 ! ! LLDP Management0 lldp management-address Management0 @@ -67,24 +67,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.3/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.3/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access1 + description dc-access1 channel-group 1 mode active ! interface Port-Channel1 - description access1 + description dc-access1 switchport mode trunk switchport trunk allowed vlan 40 mlag 1 diff --git a/configs/leaf3.cfg b/configs/dc-leaf3.cfg similarity index 96% rename from configs/leaf3.cfg rename to configs/dc-leaf3.cfg index b2b97c2..a58f4f6 100644 --- a/configs/leaf3.cfg +++ b/configs/dc-leaf3.cfg @@ -1,7 +1,7 @@ -! Leaf3 Configuration +! DC-Leaf3 Configuration ! VTEP2 - AS 65002 ! -hostname leaf3 +hostname dc-leaf3 ! ! LLDP Management0 lldp management-address Management0 @@ -80,24 +80,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.5/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.5/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access2 + description dc-access2 channel-group 1 mode active ! interface Port-Channel1 - description access2 + description dc-access2 switchport mode trunk switchport trunk allowed vlan 34 mlag 1 diff --git a/configs/leaf4.cfg b/configs/dc-leaf4.cfg similarity index 96% rename from configs/leaf4.cfg rename to configs/dc-leaf4.cfg index c5ff533..f3cbb13 100644 --- a/configs/leaf4.cfg +++ b/configs/dc-leaf4.cfg @@ -1,7 +1,7 @@ -! Leaf4 Configuration +! DC-Leaf4 Configuration ! VTEP2 - AS 65002 ! -hostname leaf4 +hostname dc-leaf4 ! ! LLDP Management0 lldp management-address Management0 @@ -80,24 +80,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.7/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.7/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access2 + description dc-access2 channel-group 1 mode active ! interface Port-Channel1 - description access2 + description dc-access2 switchport mode trunk switchport trunk allowed vlan 34 mlag 1 diff --git a/configs/leaf5.cfg b/configs/dc-leaf5.cfg similarity index 96% rename from configs/leaf5.cfg rename to configs/dc-leaf5.cfg index 6822b5e..5585962 100644 --- a/configs/leaf5.cfg +++ b/configs/dc-leaf5.cfg @@ -1,7 +1,7 @@ -! Leaf5 Configuration +! DC-Leaf5 Configuration ! VTEP3 - AS 65003 ! -hostname leaf5 +hostname dc-leaf5 ! ! LLDP Management0 lldp management-address Management0 @@ -68,24 +68,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.9/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.9/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access3 + description dc-access3 channel-group 1 mode active ! interface Port-Channel1 - description access3 + description dc-access3 switchport mode trunk switchport trunk allowed vlan 40 mlag 1 diff --git a/configs/leaf6.cfg b/configs/dc-leaf6.cfg similarity index 96% rename from configs/leaf6.cfg rename to configs/dc-leaf6.cfg index eda2288..99e067c 100644 --- a/configs/leaf6.cfg +++ b/configs/dc-leaf6.cfg @@ -1,7 +1,7 @@ -! Leaf6 Configuration +! DC-Leaf6 Configuration ! VTEP3 - AS 65003 ! -hostname leaf6 +hostname dc-leaf6 ! ! LLDP Management0 lldp management-address Management0 @@ -67,24 +67,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.11/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.11/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access3 + description dc-access3 channel-group 1 mode active ! interface Port-Channel1 - description access3 + description dc-access3 switchport mode trunk switchport trunk allowed vlan 40 mlag 1 diff --git a/configs/leaf7.cfg b/configs/dc-leaf7.cfg similarity index 96% rename from configs/leaf7.cfg rename to configs/dc-leaf7.cfg index 0bbee0b..00505f1 100644 --- a/configs/leaf7.cfg +++ b/configs/dc-leaf7.cfg @@ -1,7 +1,7 @@ -! Leaf7 Configuration +! DC-Leaf7 Configuration ! VTEP4 - AS 65004 ! -hostname leaf7 +hostname dc-leaf7 ! ! LLDP Management0 lldp management-address Management0 @@ -79,24 +79,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.13/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.13/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access4 + description dc-access4 channel-group 1 mode active ! interface Port-Channel1 - description access4 + description dc-access4 switchport mode trunk switchport trunk allowed vlan 78 mlag 1 diff --git a/configs/leaf8.cfg b/configs/dc-leaf8.cfg similarity index 96% rename from configs/leaf8.cfg rename to configs/dc-leaf8.cfg index 2de63a8..ba144c7 100644 --- a/configs/leaf8.cfg +++ b/configs/dc-leaf8.cfg @@ -1,7 +1,7 @@ -! Leaf8 Configuration +! DC-Leaf8 Configuration ! VTEP4 - AS 65004 ! -hostname leaf8 +hostname dc-leaf8 ! ! LLDP Management0 lldp management-address Management0 @@ -79,24 +79,24 @@ interface Port-Channel999 ! ! Underlay P2P interfaces to Spines interface Ethernet11 - description spine1 + description dc-spine1 no switchport ip address 10.0.1.15/31 mtu 9214 ! interface Ethernet12 - description spine2 + description dc-spine2 no switchport ip address 10.0.2.15/31 mtu 9214 ! ! Access-facing interface (MLAG with LACP) interface Ethernet1 - description access4 + description dc-access4 channel-group 1 mode active ! interface Port-Channel1 - description access4 + description dc-access4 switchport mode trunk switchport trunk allowed vlan 78 mlag 1 diff --git a/configs/spine1.cfg b/configs/dc-spine1.cfg similarity index 92% rename from configs/spine1.cfg rename to configs/dc-spine1.cfg index 2e0090a..0721f6a 100644 --- a/configs/spine1.cfg +++ b/configs/dc-spine1.cfg @@ -1,7 +1,7 @@ -! Spine1 Configuration +! DC-Spine1 Configuration ! BGP EVPN Spine - AS 65000 ! -hostname spine1 +hostname dc-spine1 ! ! LLDP Management0 lldp management-address Management0 @@ -34,62 +34,62 @@ interface Loopback0 ! ! Underlay P2P interfaces to Leafs interface Ethernet1 - description leaf1 + description dc-leaf1 no switchport ip address 10.0.1.0/31 mtu 9214 ! interface Ethernet2 - description leaf2 + description dc-leaf2 no switchport ip address 10.0.1.2/31 mtu 9214 ! interface Ethernet3 - description leaf3 + description dc-leaf3 no switchport ip address 10.0.1.4/31 mtu 9214 ! interface Ethernet4 - description leaf4 + description dc-leaf4 no switchport ip address 10.0.1.6/31 mtu 9214 ! interface Ethernet5 - description leaf5 + description dc-leaf5 no switchport ip address 10.0.1.8/31 mtu 9214 ! interface Ethernet6 - description leaf6 + description dc-leaf6 no switchport ip address 10.0.1.10/31 mtu 9214 ! interface Ethernet7 - description leaf7 + description dc-leaf7 no switchport ip address 10.0.1.12/31 mtu 9214 ! interface Ethernet8 - description leaf8 + description dc-leaf8 no switchport ip address 10.0.1.14/31 mtu 9214 ! ! Underlay P2P interfaces to DC Border Leafs interface Ethernet9 - description border-leaf-dc1 + description dc-border-leaf1 no switchport ip address 10.0.1.16/31 mtu 9214 ! interface Ethernet10 - description border-leaf-dc2 + description dc-border-leaf2 no switchport ip address 10.0.1.18/31 mtu 9214 diff --git a/configs/spine2.cfg b/configs/dc-spine2.cfg similarity index 92% rename from configs/spine2.cfg rename to configs/dc-spine2.cfg index 91018ce..c250ed0 100644 --- a/configs/spine2.cfg +++ b/configs/dc-spine2.cfg @@ -1,7 +1,7 @@ -! Spine2 Configuration +! DC-Spine2 Configuration ! BGP EVPN Spine - AS 65000 ! -hostname spine2 +hostname dc-spine2 ! ! LLDP Management0 lldp management-address Management0 @@ -34,62 +34,62 @@ interface Loopback0 ! ! Underlay P2P interfaces to Leafs interface Ethernet1 - description leaf1 + description dc-leaf1 no switchport ip address 10.0.2.0/31 mtu 9214 ! interface Ethernet2 - description leaf2 + description dc-leaf2 no switchport ip address 10.0.2.2/31 mtu 9214 ! interface Ethernet3 - description leaf3 + description dc-leaf3 no switchport ip address 10.0.2.4/31 mtu 9214 ! interface Ethernet4 - description leaf4 + description dc-leaf4 no switchport ip address 10.0.2.6/31 mtu 9214 ! interface Ethernet5 - description leaf5 + description dc-leaf5 no switchport ip address 10.0.2.8/31 mtu 9214 ! interface Ethernet6 - description leaf6 + description dc-leaf6 no switchport ip address 10.0.2.10/31 mtu 9214 ! interface Ethernet7 - description leaf7 + description dc-leaf7 no switchport ip address 10.0.2.12/31 mtu 9214 ! interface Ethernet8 - description leaf8 + description dc-leaf8 no switchport ip address 10.0.2.14/31 mtu 9214 ! ! Underlay P2P interfaces to DC Border Leafs interface Ethernet9 - description border-leaf-dc1 + description dc-border-leaf1 no switchport ip address 10.0.2.16/31 mtu 9214 ! interface Ethernet10 - description border-leaf-dc2 + description dc-border-leaf2 no switchport ip address 10.0.2.18/31 mtu 9214 diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index 2383f4b..07c656d 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -16,94 +16,94 @@ topology: # ===================================================== # DC Spine Switches (AS 65000) - spine1: + dc-spine1: kind: arista_ceos mgmt-ipv4: 172.16.0.1 - startup-config: configs/spine1.cfg + startup-config: configs/dc-spine1.cfg - spine2: + dc-spine2: kind: arista_ceos mgmt-ipv4: 172.16.0.2 - startup-config: configs/spine2.cfg + startup-config: configs/dc-spine2.cfg # DC Leaf Switches - VTEP1 (AS 65001) - leaf1: + dc-leaf1: kind: arista_ceos mgmt-ipv4: 172.16.0.25 - startup-config: configs/leaf1.cfg + startup-config: configs/dc-leaf1.cfg - leaf2: + dc-leaf2: kind: arista_ceos mgmt-ipv4: 172.16.0.50 - startup-config: configs/leaf2.cfg + startup-config: configs/dc-leaf2.cfg # DC Leaf Switches - VTEP2 (AS 65002) - leaf3: + dc-leaf3: kind: arista_ceos mgmt-ipv4: 172.16.0.27 - startup-config: configs/leaf3.cfg + startup-config: configs/dc-leaf3.cfg - leaf4: + dc-leaf4: kind: arista_ceos mgmt-ipv4: 172.16.0.28 - startup-config: configs/leaf4.cfg + startup-config: configs/dc-leaf4.cfg # DC Leaf Switches - VTEP3 (AS 65003) - leaf5: + dc-leaf5: kind: arista_ceos mgmt-ipv4: 172.16.0.29 - startup-config: configs/leaf5.cfg + startup-config: configs/dc-leaf5.cfg - leaf6: + dc-leaf6: kind: arista_ceos mgmt-ipv4: 172.16.0.30 - startup-config: configs/leaf6.cfg + startup-config: configs/dc-leaf6.cfg # DC Leaf Switches - VTEP4 (AS 65004) - leaf7: + dc-leaf7: kind: arista_ceos mgmt-ipv4: 172.16.0.31 - startup-config: configs/leaf7.cfg + startup-config: configs/dc-leaf7.cfg - leaf8: + dc-leaf8: kind: arista_ceos mgmt-ipv4: 172.16.0.32 - startup-config: configs/leaf8.cfg + startup-config: configs/dc-leaf8.cfg # DC Border Leafs - MLAG pair (AS 65005) - border-leaf-dc1: + dc-border-leaf1: kind: arista_ceos mgmt-ipv4: 172.16.0.3 - startup-config: configs/border-leaf-dc1.cfg + startup-config: configs/dc-border-leaf1.cfg - border-leaf-dc2: + dc-border-leaf2: kind: arista_ceos mgmt-ipv4: 172.16.0.4 - startup-config: configs/border-leaf-dc2.cfg + startup-config: configs/dc-border-leaf2.cfg # DC Access Switches - L2 only - access1: + dc-access1: kind: arista_ceos mgmt-ipv4: 172.16.0.41 - startup-config: configs/access1.cfg + startup-config: configs/dc-access1.cfg - access2: + dc-access2: kind: arista_ceos mgmt-ipv4: 172.16.0.42 - startup-config: configs/access2.cfg + startup-config: configs/dc-access2.cfg - access3: + dc-access3: kind: arista_ceos mgmt-ipv4: 172.16.0.43 - startup-config: configs/access3.cfg + startup-config: configs/dc-access3.cfg - access4: + dc-access4: kind: arista_ceos mgmt-ipv4: 172.16.0.44 - startup-config: configs/access4.cfg + startup-config: configs/dc-access4.cfg # DC Host devices - dual-homed with LACP bonding - host1: + dc-server1: kind: linux mgmt-ipv4: 172.16.0.101 image: ghcr.io/hellt/network-multitool @@ -124,7 +124,7 @@ topology: - ip link set bond0.40 up - ip addr add 10.40.40.101/24 dev bond0.40 - host2: + dc-server2: kind: linux mgmt-ipv4: 172.16.0.102 image: ghcr.io/hellt/network-multitool @@ -147,7 +147,7 @@ topology: - ip route add 10.78.78.0/24 via 10.34.34.1 - ip route add 10.60.0.0/16 via 10.34.34.1 - host3: + dc-server3: kind: linux mgmt-ipv4: 172.16.0.103 image: ghcr.io/hellt/network-multitool @@ -168,14 +168,14 @@ topology: - ip link set bond0.40 up - ip addr add 10.40.40.103/24 dev bond0.40 - host4: + dc-server4: kind: linux mgmt-ipv4: 172.16.0.104 image: ghcr.io/hellt/network-multitool cap-add: - NET_ADMIN binds: - - hosts/host4_interfaces:/etc/network/interfaces + - hosts/dc-server4_interfaces:/etc/network/interfaces exec: - ip link add bond0 type bond mode 802.3ad - ip link set dev bond0 type bond xmit_hash_policy layer3+4 @@ -224,15 +224,15 @@ topology: startup-config: configs/campus-spine2.cfg # Campus Border Leafs - MLAG pair (AS 66005) - border-leaf-campus1: + campus-border-leaf1: kind: arista_ceos mgmt-ipv4: 172.16.0.22 - startup-config: configs/border-leaf-campus1.cfg + startup-config: configs/campus-border-leaf1.cfg - border-leaf-campus2: + campus-border-leaf2: kind: arista_ceos mgmt-ipv4: 172.16.0.23 - startup-config: configs/border-leaf-campus2.cfg + startup-config: configs/campus-border-leaf2.cfg # Campus Leafs - VTEP1 (AS 66001) campus-leaf1: @@ -296,71 +296,71 @@ topology: # ===================================================== # Spine1 to Leaf/Border-Leaf connections (underlay) - - endpoints: ["spine1:eth1", "leaf1:eth11"] - - endpoints: ["spine1:eth2", "leaf2:eth11"] - - endpoints: ["spine1:eth3", "leaf3:eth11"] - - endpoints: ["spine1:eth4", "leaf4:eth11"] - - endpoints: ["spine1:eth5", "leaf5:eth11"] - - endpoints: ["spine1:eth6", "leaf6:eth11"] - - endpoints: ["spine1:eth7", "leaf7:eth11"] - - endpoints: ["spine1:eth8", "leaf8:eth11"] - - endpoints: ["spine1:eth9", "border-leaf-dc1:eth11"] - - endpoints: ["spine1:eth10", "border-leaf-dc2:eth11"] + - endpoints: ["dc-spine1:eth1", "dc-leaf1:eth11"] + - endpoints: ["dc-spine1:eth2", "dc-leaf2:eth11"] + - endpoints: ["dc-spine1:eth3", "dc-leaf3:eth11"] + - endpoints: ["dc-spine1:eth4", "dc-leaf4:eth11"] + - endpoints: ["dc-spine1:eth5", "dc-leaf5:eth11"] + - endpoints: ["dc-spine1:eth6", "dc-leaf6:eth11"] + - endpoints: ["dc-spine1:eth7", "dc-leaf7:eth11"] + - endpoints: ["dc-spine1:eth8", "dc-leaf8:eth11"] + - endpoints: ["dc-spine1:eth9", "dc-border-leaf1:eth11"] + - endpoints: ["dc-spine1:eth10", "dc-border-leaf2:eth11"] # Spine2 to Leaf/Border-Leaf connections (underlay) - - endpoints: ["spine2:eth1", "leaf1:eth12"] - - endpoints: ["spine2:eth2", "leaf2:eth12"] - - endpoints: ["spine2:eth3", "leaf3:eth12"] - - endpoints: ["spine2:eth4", "leaf4:eth12"] - - endpoints: ["spine2:eth5", "leaf5:eth12"] - - endpoints: ["spine2:eth6", "leaf6:eth12"] - - endpoints: ["spine2:eth7", "leaf7:eth12"] - - endpoints: ["spine2:eth8", "leaf8:eth12"] - - endpoints: ["spine2:eth9", "border-leaf-dc1:eth12"] - - endpoints: ["spine2:eth10", "border-leaf-dc2:eth12"] + - endpoints: ["dc-spine2:eth1", "dc-leaf1:eth12"] + - endpoints: ["dc-spine2:eth2", "dc-leaf2:eth12"] + - endpoints: ["dc-spine2:eth3", "dc-leaf3:eth12"] + - endpoints: ["dc-spine2:eth4", "dc-leaf4:eth12"] + - endpoints: ["dc-spine2:eth5", "dc-leaf5:eth12"] + - endpoints: ["dc-spine2:eth6", "dc-leaf6:eth12"] + - endpoints: ["dc-spine2:eth7", "dc-leaf7:eth12"] + - endpoints: ["dc-spine2:eth8", "dc-leaf8:eth12"] + - endpoints: ["dc-spine2:eth9", "dc-border-leaf1:eth12"] + - endpoints: ["dc-spine2:eth10", "dc-border-leaf2:eth12"] # DC MLAG Peer Links (leaf pairs + border-leaf pair) - - endpoints: ["leaf1:eth10", "leaf2:eth10"] - - endpoints: ["leaf3:eth10", "leaf4:eth10"] - - endpoints: ["leaf5:eth10", "leaf6:eth10"] - - endpoints: ["leaf7:eth10", "leaf8:eth10"] - - endpoints: ["border-leaf-dc1:eth10", "border-leaf-dc2:eth10"] + - endpoints: ["dc-leaf1:eth10", "dc-leaf2:eth10"] + - endpoints: ["dc-leaf3:eth10", "dc-leaf4:eth10"] + - endpoints: ["dc-leaf5:eth10", "dc-leaf6:eth10"] + - endpoints: ["dc-leaf7:eth10", "dc-leaf8:eth10"] + - endpoints: ["dc-border-leaf1:eth10", "dc-border-leaf2:eth10"] # DC Access switch uplinks to leaf MLAG pairs (dual-homed via LACP) - - endpoints: ["leaf1:eth1", "access1:eth1"] - - endpoints: ["leaf2:eth1", "access1:eth2"] - - endpoints: ["leaf3:eth1", "access2:eth1"] - - endpoints: ["leaf4:eth1", "access2:eth2"] - - endpoints: ["leaf5:eth1", "access3:eth1"] - - endpoints: ["leaf6:eth1", "access3:eth2"] - - endpoints: ["leaf7:eth1", "access4:eth1"] - - endpoints: ["leaf8:eth1", "access4:eth2"] + - endpoints: ["dc-leaf1:eth1", "dc-access1:eth1"] + - endpoints: ["dc-leaf2:eth1", "dc-access1:eth2"] + - endpoints: ["dc-leaf3:eth1", "dc-access2:eth1"] + - endpoints: ["dc-leaf4:eth1", "dc-access2:eth2"] + - endpoints: ["dc-leaf5:eth1", "dc-access3:eth1"] + - endpoints: ["dc-leaf6:eth1", "dc-access3:eth2"] + - endpoints: ["dc-leaf7:eth1", "dc-access4:eth1"] + - endpoints: ["dc-leaf8:eth1", "dc-access4:eth2"] # DC Host connections to access switches (dual-homed via LACP) - - endpoints: ["access1:eth3", "host1:eth1"] - - endpoints: ["access1:eth4", "host1:eth2"] - - endpoints: ["access2:eth3", "host2:eth1"] - - endpoints: ["access2:eth4", "host2:eth2"] - - endpoints: ["access3:eth3", "host3:eth1"] - - endpoints: ["access3:eth4", "host3:eth2"] - - endpoints: ["access4:eth3", "host4:eth1"] - - endpoints: ["access4:eth4", "host4:eth2"] + - endpoints: ["dc-access1:eth3", "dc-server1:eth1"] + - endpoints: ["dc-access1:eth4", "dc-server1:eth2"] + - endpoints: ["dc-access2:eth3", "dc-server2:eth1"] + - endpoints: ["dc-access2:eth4", "dc-server2:eth2"] + - endpoints: ["dc-access3:eth3", "dc-server3:eth1"] + - endpoints: ["dc-access3:eth4", "dc-server3:eth2"] + - endpoints: ["dc-access4:eth3", "dc-server4:eth1"] + - endpoints: ["dc-access4:eth4", "dc-server4:eth2"] # ===================================================== # CORE INTERCONNECT (DC Border Leafs <-> Core <-> Campus Border Leafs) # ===================================================== # DC Border Leafs to Core routers (4 links) - - endpoints: ["border-leaf-dc1:eth13", "core1:eth1"] - - endpoints: ["border-leaf-dc1:eth14", "core2:eth1"] - - endpoints: ["border-leaf-dc2:eth13", "core1:eth2"] - - endpoints: ["border-leaf-dc2:eth14", "core2:eth2"] + - endpoints: ["dc-border-leaf1:eth13", "core1:eth1"] + - endpoints: ["dc-border-leaf1:eth14", "core2:eth1"] + - endpoints: ["dc-border-leaf2:eth13", "core1:eth2"] + - endpoints: ["dc-border-leaf2:eth14", "core2:eth2"] # Campus Border Leafs to Core routers (4 links) - - endpoints: ["border-leaf-campus1:eth13", "core1:eth3"] - - endpoints: ["border-leaf-campus1:eth14", "core2:eth3"] - - endpoints: ["border-leaf-campus2:eth13", "core1:eth4"] - - endpoints: ["border-leaf-campus2:eth14", "core2:eth4"] + - endpoints: ["campus-border-leaf1:eth13", "core1:eth3"] + - endpoints: ["campus-border-leaf1:eth14", "core2:eth3"] + - endpoints: ["campus-border-leaf2:eth13", "core1:eth4"] + - endpoints: ["campus-border-leaf2:eth14", "core2:eth4"] # Core routers interconnect - endpoints: ["core1:eth5", "core2:eth5"] @@ -374,21 +374,21 @@ topology: - endpoints: ["campus-spine1:eth2", "campus-leaf2:eth11"] - endpoints: ["campus-spine1:eth3", "campus-leaf3:eth11"] - endpoints: ["campus-spine1:eth4", "campus-leaf4:eth11"] - - endpoints: ["campus-spine1:eth5", "border-leaf-campus1:eth11"] - - endpoints: ["campus-spine1:eth6", "border-leaf-campus2:eth11"] + - endpoints: ["campus-spine1:eth5", "campus-border-leaf1:eth11"] + - endpoints: ["campus-spine1:eth6", "campus-border-leaf2:eth11"] # Campus Spine2 to Leafs/Border-Leafs (underlay) - endpoints: ["campus-spine2:eth1", "campus-leaf1:eth12"] - endpoints: ["campus-spine2:eth2", "campus-leaf2:eth12"] - endpoints: ["campus-spine2:eth3", "campus-leaf3:eth12"] - endpoints: ["campus-spine2:eth4", "campus-leaf4:eth12"] - - endpoints: ["campus-spine2:eth5", "border-leaf-campus1:eth12"] - - endpoints: ["campus-spine2:eth6", "border-leaf-campus2:eth12"] + - endpoints: ["campus-spine2:eth5", "campus-border-leaf1:eth12"] + - endpoints: ["campus-spine2:eth6", "campus-border-leaf2:eth12"] # Campus MLAG Peer Links (leaf pairs + border-leaf pair) - endpoints: ["campus-leaf1:eth10", "campus-leaf2:eth10"] - endpoints: ["campus-leaf3:eth10", "campus-leaf4:eth10"] - - endpoints: ["border-leaf-campus1:eth10", "border-leaf-campus2:eth10"] + - endpoints: ["campus-border-leaf1:eth10", "campus-border-leaf2:eth10"] # Campus Access switch uplinks to leaf MLAG pairs (dual-homed via LACP) - endpoints: ["campus-leaf1:eth1", "campus-access1:eth1"] diff --git a/evpn-lab.clab.yml.annotations.json b/evpn-lab.clab.yml.annotations.json index ea51282..e9b0e70 100644 --- a/evpn-lab.clab.yml.annotations.json +++ b/evpn-lab.clab.yml.annotations.json @@ -36,8 +36,8 @@ { "id": "campus-leaf3", "position": { "x": 240, "y": 400 } }, { "id": "campus-leaf4", "position": { "x": 380, "y": 400 } }, - { "id": "border-leaf-campus1", "position": { "x": 540, "y": 400 } }, - { "id": "border-leaf-campus2", "position": { "x": 680, "y": 400 } }, + { "id": "campus-border-leaf1", "position": { "x": 540, "y": 400 } }, + { "id": "campus-border-leaf2", "position": { "x": 680, "y": 400 } }, { "id": "campus-access1", "position": { "x": 40, "y": 540 } }, { "id": "campus-access2", "position": { "x": 320, "y": 540 } }, @@ -48,30 +48,30 @@ { "id": "core1", "position": { "x": 960, "y": 300 } }, { "id": "core2", "position": { "x": 1180, "y": 300 } }, - { "id": "border-leaf-dc1", "position": { "x": 1380, "y": 400 } }, - { "id": "border-leaf-dc2", "position": { "x": 1520, "y": 400 } }, + { "id": "dc-border-leaf1", "position": { "x": 1380, "y": 400 } }, + { "id": "dc-border-leaf2", "position": { "x": 1520, "y": 400 } }, - { "id": "spine1", "position": { "x": 1800, "y": 160 } }, - { "id": "spine2", "position": { "x": 2280, "y": 160 } }, + { "id": "dc-spine1", "position": { "x": 1800, "y": 160 } }, + { "id": "dc-spine2", "position": { "x": 2280, "y": 160 } }, - { "id": "leaf1", "position": { "x": 1660, "y": 400 } }, - { "id": "leaf2", "position": { "x": 1800, "y": 400 } }, - { "id": "leaf3", "position": { "x": 1940, "y": 400 } }, - { "id": "leaf4", "position": { "x": 2080, "y": 400 } }, - { "id": "leaf5", "position": { "x": 2220, "y": 400 } }, - { "id": "leaf6", "position": { "x": 2360, "y": 400 } }, - { "id": "leaf7", "position": { "x": 2500, "y": 400 } }, - { "id": "leaf8", "position": { "x": 2640, "y": 400 } }, + { "id": "dc-leaf1", "position": { "x": 1660, "y": 400 } }, + { "id": "dc-leaf2", "position": { "x": 1800, "y": 400 } }, + { "id": "dc-leaf3", "position": { "x": 1940, "y": 400 } }, + { "id": "dc-leaf4", "position": { "x": 2080, "y": 400 } }, + { "id": "dc-leaf5", "position": { "x": 2220, "y": 400 } }, + { "id": "dc-leaf6", "position": { "x": 2360, "y": 400 } }, + { "id": "dc-leaf7", "position": { "x": 2500, "y": 400 } }, + { "id": "dc-leaf8", "position": { "x": 2640, "y": 400 } }, - { "id": "access1", "position": { "x": 1720, "y": 540 } }, - { "id": "access2", "position": { "x": 2000, "y": 540 } }, - { "id": "access3", "position": { "x": 2280, "y": 540 } }, - { "id": "access4", "position": { "x": 2560, "y": 540 } }, + { "id": "dc-access1", "position": { "x": 1720, "y": 540 } }, + { "id": "dc-access2", "position": { "x": 2000, "y": 540 } }, + { "id": "dc-access3", "position": { "x": 2280, "y": 540 } }, + { "id": "dc-access4", "position": { "x": 2560, "y": 540 } }, - { "id": "host1", "position": { "x": 1720, "y": 680 } }, - { "id": "host2", "position": { "x": 2000, "y": 680 } }, - { "id": "host3", "position": { "x": 2280, "y": 680 } }, - { "id": "host4", "position": { "x": 2560, "y": 680 } } + { "id": "dc-server1", "position": { "x": 1720, "y": 680 } }, + { "id": "dc-server2", "position": { "x": 2000, "y": 680 } }, + { "id": "dc-server3", "position": { "x": 2280, "y": 680 } }, + { "id": "dc-server4", "position": { "x": 2560, "y": 680 } } ], "edgeAnnotations": [], "aliasEndpointAnnotations": [], diff --git a/hosts/README.md b/hosts/README.md index 1c8c7cb..60d524b 100644 --- a/hosts/README.md +++ b/hosts/README.md @@ -6,10 +6,10 @@ This directory contains network interface configuration files for Alpine Linux h ### DC hosts -- `host1_interfaces` - Configuration for host1 (VLAN 40, IP 10.40.40.101) -- `host2_interfaces` - Configuration for host2 (VLAN 34, IP 10.34.34.102) -- `host3_interfaces` - Configuration for host3 (VLAN 40, IP 10.40.40.103) -- `host4_interfaces` - Configuration for host4 (VLAN 78, IP 10.78.78.104) +- `dc-server1_interfaces` - Configuration for dc-server1 (VLAN 40, IP 10.40.40.101) +- `dc-server2_interfaces` - Configuration for dc-server2 (VLAN 34, IP 10.34.34.102) +- `dc-server3_interfaces` - Configuration for dc-server3 (VLAN 40, IP 10.40.40.103) +- `dc-server4_interfaces` - Configuration for dc-server4 (VLAN 78, IP 10.78.78.104) ### Campus hosts @@ -17,19 +17,19 @@ Campus hosts are **single-attached** to a Campus access switch (enterprise user pattern — no LACP bond, no VLAN trunking on the host side). Each host sits in a single access VLAN that maps to VRF `gold`. -- `campus-host1_interfaces` - Configuration for campus-host1 (VLAN 60 VRF gold 10.60.60.101/24, GW 10.60.60.1) -- `campus-host2_interfaces` - Configuration for campus-host2 (VLAN 70 VRF gold 10.60.70.102/24, GW 10.60.70.1) +- `campus-dc-server1_interfaces` - Configuration for campus-host1 (VLAN 60 VRF gold 10.60.60.101/24, GW 10.60.60.1) +- `campus-dc-server2_interfaces` - Configuration for campus-host2 (VLAN 70 VRF gold 10.60.70.102/24, GW 10.60.70.1) ## Usage Each file is mounted to `/etc/network/interfaces` in its respective host container via ContainerLab's `binds` feature: ```yaml -host1: +dc-server1: kind: linux image: alpine:latest binds: - - hosts/host1_interfaces:/etc/network/interfaces + - hosts/dc-server1_interfaces:/etc/network/interfaces ``` ## Format diff --git a/hosts/host1_interfaces b/hosts/dc-server1_interfaces similarity index 100% rename from hosts/host1_interfaces rename to hosts/dc-server1_interfaces diff --git a/hosts/host2_interfaces b/hosts/dc-server2_interfaces similarity index 100% rename from hosts/host2_interfaces rename to hosts/dc-server2_interfaces diff --git a/hosts/host3_interfaces b/hosts/dc-server3_interfaces similarity index 100% rename from hosts/host3_interfaces rename to hosts/dc-server3_interfaces diff --git a/hosts/host4_interfaces b/hosts/dc-server4_interfaces similarity index 100% rename from hosts/host4_interfaces rename to hosts/dc-server4_interfaces From ae4fd5663547baba3777f44d5b8fa56f679af66b Mon Sep 17 00:00:00 2001 From: Damien Date: Fri, 24 Apr 2026 07:53:35 +0000 Subject: [PATCH 13/16] Add AS group annotations for remaining fabrics Complete the AS group boxes: add AS65000 (dc-spines), AS65002/3/4 (dc-leaf pairs), AS66000 (campus-spines), AS66001/2 (campus-leaf pairs), AS66005 (campus-border-leaf). --- evpn-lab.clab.yml.annotations.json | 497 +++++++++++++++++++++++++---- 1 file changed, 433 insertions(+), 64 deletions(-) diff --git a/evpn-lab.clab.yml.annotations.json b/evpn-lab.clab.yml.annotations.json index e9b0e70..2e10681 100644 --- a/evpn-lab.clab.yml.annotations.json +++ b/evpn-lab.clab.yml.annotations.json @@ -1,79 +1,448 @@ { "freeTextAnnotations": [ - { - "id": "label-campus", - "position": { "x": -100, "y": 60 }, - "text": "CAMPUS FABRIC (AS 66000 / 66001 / 66002 / 66005)", - "fontSize": 16, - "color": "#2563eb" - }, - { - "id": "label-core", - "position": { "x": 1100, "y": 60 }, - "text": "CORE (AS 65500)", - "fontSize": 16, - "color": "#ea580c" - }, { "id": "label-dc", - "position": { "x": 1600, "y": 60 }, "text": "DATA CENTER FABRIC (AS 65000 / 65001-4 / 65005)", - "fontSize": 16, - "color": "#16a34a" + "position": { + "x": 1600, + "y": 60 + }, + "fontSize": 16 } ], "freeShapeAnnotations": [], "trafficRateAnnotations": [], - "groupStyleAnnotations": [], + "groupStyleAnnotations": [ + { + "id": "group-1", + "name": "AS65500", + "level": "1", + "position": { + "x": 889.1396938996185, + "y": 235.43048452777563 + }, + "width": 384, + "height": 186, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-2", + "name": "AS65005", + "level": "1", + "position": { + "x": 1337.1424783113316, + "y": 370.853013593514 + }, + "width": 248, + "height": 98, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-3", + "name": "AS65001", + "level": "1", + "position": { + "x": 1633.71849074422, + "y": 374.2803159364748 + }, + "width": 246, + "height": 97, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-4", + "name": "AS65002", + "level": "1", + "position": { + "x": 1913, + "y": 374 + }, + "width": 246, + "height": 97, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-5", + "name": "AS65003", + "level": "1", + "position": { + "x": 2193, + "y": 374 + }, + "width": 246, + "height": 97, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-6", + "name": "AS65004", + "level": "1", + "position": { + "x": 2473, + "y": 374 + }, + "width": 246, + "height": 97, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-7", + "name": "AS65000", + "level": "1", + "position": { + "x": 1724.5715043377336, + "y": 131.71464560423502 + }, + "width": 640, + "height": 100, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-8", + "name": "AS66000", + "level": "1", + "position": { + "x": 48.000132591034, + "y": 129.42889343536817 + }, + "width": 460, + "height": 100, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-9", + "name": "AS66001", + "level": "1", + "position": { + "x": -87, + "y": 374 + }, + "width": 246, + "height": 97, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-10", + "name": "AS66002", + "level": "1", + "position": { + "x": 213, + "y": 374 + }, + "width": 246, + "height": 97, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + }, + { + "id": "group-11", + "name": "AS66005", + "level": "1", + "position": { + "x": 513, + "y": 374 + }, + "width": 246, + "height": 97, + "backgroundColor": "rgba(100, 100, 255, 0.1)", + "borderColor": "#bbbebf", + "borderWidth": 2, + "borderStyle": "dashed", + "borderRadius": 8, + "zIndex": -1 + } + ], "networkNodeAnnotations": [], "nodeAnnotations": [ - - { "id": "campus-spine1", "position": { "x": 120, "y": 160 } }, - { "id": "campus-spine2", "position": { "x": 420, "y": 160 } }, - - { "id": "campus-leaf1", "position": { "x": -60, "y": 400 } }, - { "id": "campus-leaf2", "position": { "x": 80, "y": 400 } }, - { "id": "campus-leaf3", "position": { "x": 240, "y": 400 } }, - { "id": "campus-leaf4", "position": { "x": 380, "y": 400 } }, - - { "id": "campus-border-leaf1", "position": { "x": 540, "y": 400 } }, - { "id": "campus-border-leaf2", "position": { "x": 680, "y": 400 } }, - - { "id": "campus-access1", "position": { "x": 40, "y": 540 } }, - { "id": "campus-access2", "position": { "x": 320, "y": 540 } }, - - { "id": "campus-host1", "position": { "x": 40, "y": 680 } }, - { "id": "campus-host2", "position": { "x": 320, "y": 680 } }, - - { "id": "core1", "position": { "x": 960, "y": 300 } }, - { "id": "core2", "position": { "x": 1180, "y": 300 } }, - - { "id": "dc-border-leaf1", "position": { "x": 1380, "y": 400 } }, - { "id": "dc-border-leaf2", "position": { "x": 1520, "y": 400 } }, - - { "id": "dc-spine1", "position": { "x": 1800, "y": 160 } }, - { "id": "dc-spine2", "position": { "x": 2280, "y": 160 } }, - - { "id": "dc-leaf1", "position": { "x": 1660, "y": 400 } }, - { "id": "dc-leaf2", "position": { "x": 1800, "y": 400 } }, - { "id": "dc-leaf3", "position": { "x": 1940, "y": 400 } }, - { "id": "dc-leaf4", "position": { "x": 2080, "y": 400 } }, - { "id": "dc-leaf5", "position": { "x": 2220, "y": 400 } }, - { "id": "dc-leaf6", "position": { "x": 2360, "y": 400 } }, - { "id": "dc-leaf7", "position": { "x": 2500, "y": 400 } }, - { "id": "dc-leaf8", "position": { "x": 2640, "y": 400 } }, - - { "id": "dc-access1", "position": { "x": 1720, "y": 540 } }, - { "id": "dc-access2", "position": { "x": 2000, "y": 540 } }, - { "id": "dc-access3", "position": { "x": 2280, "y": 540 } }, - { "id": "dc-access4", "position": { "x": 2560, "y": 540 } }, - - { "id": "dc-server1", "position": { "x": 1720, "y": 680 } }, - { "id": "dc-server2", "position": { "x": 2000, "y": 680 } }, - { "id": "dc-server3", "position": { "x": 2280, "y": 680 } }, - { "id": "dc-server4", "position": { "x": 2560, "y": 680 } } + { + "id": "campus-spine1", + "position": { + "x": 120, + "y": 160 + } + }, + { + "id": "campus-spine2", + "position": { + "x": 420, + "y": 160 + } + }, + { + "id": "campus-leaf1", + "position": { + "x": -60, + "y": 400 + } + }, + { + "id": "campus-leaf2", + "position": { + "x": 80, + "y": 400 + } + }, + { + "id": "campus-leaf3", + "position": { + "x": 240, + "y": 400 + } + }, + { + "id": "campus-leaf4", + "position": { + "x": 380, + "y": 400 + } + }, + { + "id": "campus-border-leaf1", + "position": { + "x": 540, + "y": 400 + } + }, + { + "id": "campus-border-leaf2", + "position": { + "x": 680, + "y": 400 + } + }, + { + "id": "campus-access1", + "position": { + "x": 40, + "y": 540 + } + }, + { + "id": "campus-access2", + "position": { + "x": 320, + "y": 540 + } + }, + { + "id": "campus-host1", + "position": { + "x": 40, + "y": 680 + } + }, + { + "id": "campus-host2", + "position": { + "x": 320, + "y": 680 + } + }, + { + "id": "core1", + "position": { + "x": 960, + "y": 300 + } + }, + { + "id": "core2", + "position": { + "x": 1180, + "y": 300 + } + }, + { + "id": "dc-border-leaf1", + "position": { + "x": 1380, + "y": 400 + } + }, + { + "id": "dc-border-leaf2", + "position": { + "x": 1520, + "y": 400 + } + }, + { + "id": "dc-spine1", + "position": { + "x": 1800, + "y": 160 + } + }, + { + "id": "dc-spine2", + "position": { + "x": 2280, + "y": 160 + } + }, + { + "id": "dc-leaf1", + "position": { + "x": 1660, + "y": 400 + } + }, + { + "id": "dc-leaf2", + "position": { + "x": 1800, + "y": 400 + } + }, + { + "id": "dc-leaf3", + "position": { + "x": 1940, + "y": 400 + } + }, + { + "id": "dc-leaf4", + "position": { + "x": 2080, + "y": 400 + } + }, + { + "id": "dc-leaf5", + "position": { + "x": 2220, + "y": 400 + } + }, + { + "id": "dc-leaf6", + "position": { + "x": 2360, + "y": 400 + } + }, + { + "id": "dc-leaf7", + "position": { + "x": 2500, + "y": 400 + } + }, + { + "id": "dc-leaf8", + "position": { + "x": 2640, + "y": 400 + } + }, + { + "id": "dc-access1", + "position": { + "x": 1720, + "y": 540 + } + }, + { + "id": "dc-access2", + "position": { + "x": 2000, + "y": 540 + } + }, + { + "id": "dc-access3", + "position": { + "x": 2280, + "y": 540 + } + }, + { + "id": "dc-access4", + "position": { + "x": 2560, + "y": 540 + } + }, + { + "id": "dc-server1", + "position": { + "x": 1720, + "y": 680 + } + }, + { + "id": "dc-server2", + "position": { + "x": 2000, + "y": 680 + } + }, + { + "id": "dc-server3", + "position": { + "x": 2280, + "y": 680 + } + }, + { + "id": "dc-server4", + "position": { + "x": 2560, + "y": 680 + } + } ], "edgeAnnotations": [], "aliasEndpointAnnotations": [], "viewerSettings": {} -} +} \ No newline at end of file From 9bb168abe181d97859c8c17898d667251beab16f Mon Sep 17 00:00:00 2001 From: Damien Date: Fri, 24 Apr 2026 08:17:30 +0000 Subject: [PATCH 14/16] Update documentation and annotation --- README.md | 2 +- assets/arista-evpn-fabric.svg | 299 ---------- assets/evpn-lab.clab.drawio | 997 ++++++++++++++++++++++++++++++++++ assets/evpn-lab.clab.svg | 1 + 4 files changed, 999 insertions(+), 300 deletions(-) delete mode 100644 assets/arista-evpn-fabric.svg create mode 100644 assets/evpn-lab.clab.drawio create mode 100644 assets/evpn-lab.clab.svg diff --git a/README.md b/README.md index 0338616..de8bafc 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Key design choices: ## 📐 Topology -![Topology](assets/arista-evpn-fabric.svg) +![Topology](assets/evpn-lab.clab.svg) ## 🚀 Quick Start diff --git a/assets/arista-evpn-fabric.svg b/assets/arista-evpn-fabric.svg deleted file mode 100644 index efac5f3..0000000 --- a/assets/arista-evpn-fabric.svg +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - Arista EVPN-VXLAN Campus + DC Fabric - Campus EVPN-VXLAN ↔ Core L3 (OSPF + BGP) ↔ DC EVPN-VXLAN - - - - CAMPUS FABRIC (AS 66000/66001/66002/66005) - - - - CORE L3 (AS 65500) - OSPF area 0 + iBGP + VRF gold transit - - - - DATACENTER FABRIC (AS 65000/65001-65004/65005) - - - - - - campus-spine1 - - campus-spine2 - - - - - - campus-leaf1 - - campus-leaf2 - - campus-leaf3 - - campus-leaf4 - - - - - - campus-border-leaf1 - - campus-border-leaf2 - - - - - - campus-access1 - - campus-access2 - - - - - - campus-host1 - - campus-host2 - - - - Route Reflectors (AS 66000) - VTEP1 (AS 66001) - VTEP2 (AS 66002) - Campus Border Leafs MLAG (AS 66005) - VLAN 60 (10.60.60.101, gold) - single-attached (access) - VLAN 70 (10.60.70.102, gold) - single-attached (access) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - core1 - - core2 - - - iBGP + OSPF - - - - - - - - - - - - - - - - - - dc-spine1 - - dc-spine2 - - - - - - dc-leaf1 - - dc-leaf2 - - dc-leaf3 - - dc-leaf4 - - dc-leaf5 - - dc-leaf6 - - dc-leaf7 - - dc-leaf8 - - - - - - dc-border-leaf1 - - dc-border-leaf2 - - - - - - dc-access1 - - dc-access2 - - dc-access3 - - dc-access4 - - - - - - dc-server1 - - dc-server2 - - dc-server3 - - dc-server4 - - - - Route Reflectors (AS 65000) - VTEP1 (65001) - VTEP2 (65002) - VTEP3 (65003) - VTEP4 (65004) - DC Border Leafs MLAG (AS 65005) - VLAN 40 - VLAN 34 (gold) - VLAN 40 - VLAN 78 (gold) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Legend - - Spine (RR) - - Leaf (VTEP) - - Border Leaf - - Core router - - Access L2 - - Host - - Fabric (underlay + EVPN) - - Core (OSPF+BGP / VRF gold) - - MLAG peer-link - L2 VNI 110040 (DC VLAN 40), 110050 (Campus VLAN 50); L3 VNI 100001 (VRF gold, shared) - - diff --git a/assets/evpn-lab.clab.drawio b/assets/evpn-lab.clab.drawio new file mode 100644 index 0000000..b484a5c --- /dev/null +++ b/assets/evpn-lab.clab.drawio @@ -0,0 +1,997 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/evpn-lab.clab.svg b/assets/evpn-lab.clab.svg new file mode 100644 index 0000000..8b91e23 --- /dev/null +++ b/assets/evpn-lab.clab.svg @@ -0,0 +1 @@ +dc-spine1dc-spine2dc-leaf1dc-leaf2dc-leaf3dc-leaf4dc-leaf5dc-leaf6dc-leaf7dc-leaf8dc-border-leaf1dc-border-leaf2dc-access1dc-access2dc-access3dc-access4dc-server1dc-server2dc-server3dc-server4core1core2campus-spine1campus-spine2campus-border-leaf1campus-border-leaf2campus-leaf1campus-leaf2campus-leaf3campus-leaf4campus-access1campus-access2campus-host1campus-host2
eth1
eth1
eth11
eth11
eth2
eth2
eth11
eth11
eth3
eth3
eth11
eth11
eth4
eth4
eth11
eth11
eth5
eth5
eth11
eth11
eth6
eth6
eth11
eth11
eth7
eth7
eth11
eth11
eth8
eth8
eth11
eth11
eth9
eth9
eth11
eth11
eth10
eth10
eth11
eth11
eth1
eth1
eth12
eth12
eth2
eth2
eth12
eth12
eth3
eth3
eth12
eth12
eth4
eth4
eth12
eth12
eth5
eth5
eth12
eth12
eth6
eth6
eth12
eth12
eth7
eth7
eth12
eth12
eth8
eth8
eth12
eth12
eth9
eth9
eth12
eth12
eth10
eth10
eth12
eth12
eth10
eth10
eth10
eth10
eth1
eth1
eth1
eth1
eth1
eth1
eth2
eth2
eth10
eth10
eth10
eth10
eth1
eth1
eth1
eth1
eth1
eth1
eth2
eth2
eth10
eth10
eth10
eth10
eth1
eth1
eth1
eth1
eth1
eth1
eth2
eth2
eth10
eth10
eth10
eth10
eth1
eth1
eth1
eth1
eth1
eth1
eth2
eth2
eth10
eth10
eth10
eth10
eth13
eth13
eth1
eth1
eth14
eth14
eth1
eth1
eth13
eth13
eth2
eth2
eth14
eth14
eth2
eth2
eth3
eth3
eth1
eth1
eth4
eth4
eth2
eth2
eth3
eth3
eth1
eth1
eth4
eth4
eth2
eth2
eth3
eth3
eth1
eth1
eth4
eth4
eth2
eth2
eth3
eth3
eth1
eth1
eth4
eth4
eth2
eth2
eth5
eth5
eth5
eth5
eth1
eth1
eth11
eth11
eth2
eth2
eth11
eth11
eth3
eth3
eth11
eth11
eth4
eth4
eth11
eth11
eth5
eth5
eth11
eth11
eth6
eth6
eth11
eth11
eth1
eth1
eth12
eth12
eth2
eth2
eth12
eth12
eth3
eth3
eth12
eth12
eth4
eth4
eth12
eth12
eth5
eth5
eth12
eth12
eth6
eth6
eth12
eth12
eth13
eth13
eth3
eth3
eth14
eth14
eth3
eth3
eth10
eth10
eth10
eth10
eth13
eth13
eth4
eth4
eth14
eth14
eth4
eth4
eth10
eth10
eth10
eth10
eth1
eth1
eth1
eth1
eth1
eth1
eth2
eth2
eth10
eth10
eth10
eth10
eth1
eth1
eth1
eth1
eth1
eth1
eth2
eth2
eth3
eth3
eth1
eth1
eth3
eth3
eth1
eth1
Text is not SVG - cannot display
\ No newline at end of file From bd3dbc181c589061ebce774b672f1626c1b77003 Mon Sep 17 00:00:00 2001 From: Damien Date: Fri, 24 Apr 2026 08:18:20 +0000 Subject: [PATCH 15/16] Update arista cEOS image version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de8bafc..2e0239b 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Key design choices: - ContainerLab - Docker -- Arista cEOS image: `ceos:4.35.0` +- Arista cEOS image: `ceos:4.36.0` ### Deploy the Lab From 2e57976c56e878584936104b3d9709583ccdfa24 Mon Sep 17 00:00:00 2001 From: Damien Date: Fri, 24 Apr 2026 08:24:37 +0000 Subject: [PATCH 16/16] update annotation --- evpn-lab.clab.yml.annotations.json | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/evpn-lab.clab.yml.annotations.json b/evpn-lab.clab.yml.annotations.json index 2e10681..faf5b4f 100644 --- a/evpn-lab.clab.yml.annotations.json +++ b/evpn-lab.clab.yml.annotations.json @@ -1,15 +1,5 @@ { - "freeTextAnnotations": [ - { - "id": "label-dc", - "text": "DATA CENTER FABRIC (AS 65000 / 65001-4 / 65005)", - "position": { - "x": 1600, - "y": 60 - }, - "fontSize": 16 - } - ], + "freeTextAnnotations": [], "freeShapeAnnotations": [], "trafficRateAnnotations": [], "groupStyleAnnotations": [