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 57b107e..2e0239b 100644 --- a/README.md +++ b/README.md @@ -1,304 +1,366 @@ -# 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 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** 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 -![Topology](assets/arista-evpn-fabric.svg) +![Topology](assets/evpn-lab.clab.svg) ## πŸš€ Quick Start ### Prerequisites -- ContainerLab installed -- Docker installed -- Arista cEOS image: `ceos:4.35.0` +- ContainerLab +- Docker +- Arista cEOS image: `ceos:4.36.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-dc-border-leaf1 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 | `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) | `campus-border-leaf1`, `campus-border-leaf2` | 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 (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 | +| 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 | Host attachment | +| --------------- | ------------------------ | -------- | -------------- | ------------------------- | +| 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) | -- 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`. MSTP + edge-port BPDU guard. -### IP Addressing +Host-facing ports: -#### Management Network +- **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. -- 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` +## 🧭 IP Addressing Plan -#### Loopback Interfaces +### Management (`172.16.0.0/24`) -- **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` +| Node | IP | Node | IP | +| ------------------------- | --------------- | ------------------------- | --------------- | +| 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 | +| 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 | -- **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` +Gateway: `172.16.0.254`. -#### Underlay P2P Links +### Router-ID Loopback0 (`Lo0`) -- 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` +| Zone | Range | Nodes | +| ------ | ------------------- | --------------------------------------------------------------------- | +| 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 | -#### Host Network Addressing +### VTEP Loopback1 (`Lo1`) β€” shared per MLAG pair -| 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 | +| Fabric | VTEP | Address | Leafs | +| ------ | ------ | --------------- | ---------------------- | +| 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` | campus-border-leaf1/2 | -**Notes:** +### Underlay P2P (`/31`) -- 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 +| Segment | Subnets | +| -------------------------------- | --------------------------------------- | +| 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` | +| 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 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` | -### VXLAN Network Identifiers (VNI) +### Host Addressing -#### L2 VNI (VLAN to VNI Mapping) +| Host | VLAN | VRF | IP / Mask | Gateway | Purpose | +| ------------- | ---- | -------- | ----------------- | ------------ | ------------------------------ | +| 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 | -| 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 | +> 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. -**L2 VNI Details:** +## 🏷️ VXLAN Network Identifiers -- 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 +### L2 VNI Mapping -#### L3 VNI (VRF to VNI Mapping) +| VLAN | Description | VNI | Scope | RT | +| ---- | ------------------------------ | ------ | ------------------------------------------------------ | ---------- | +| 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 | +| 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 | -| 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 | +### L3 VNI Mapping (end-to-end) -**L3 VNI Details:** +| VRF | L3 VNI | RT | Scope | +| ---- | ------- | ---------- | ----------------------------------------------------- | +| gold | 100001 | 1:100001 | DC VTEP2/VTEP4/DC-BL + Campus VTEP1/VTEP2/Campus-BL | -- 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 +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. -#### VNI Summary +### Route Distinguisher Convention -| 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) | +- 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`). -### Features Implemented +## πŸ”€ Control Plane Summary -βœ… **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-dc-border-leaf1 "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: dc-server1 ↔ dc-server3 +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): dc-server2 ↔ dc-server4 +docker exec -it clab-arista-evpn-fabric-host2 ping -c 3 10.78.78.104 ``` -#### L3 VXLAN Testing (VRF gold) +### Intra-Campus connectivity -Test Layer 3 connectivity between host2 and host4 in VRF "gold": +Campus hosts sit in VRF `gold` β€” use the L3 test to validate VTEP1↔VTEP2 via campus spines. ```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 - -# 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 +> 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 -# 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) β†’ 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 -# 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) β†’ dc-server4 (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-dc-border-leaf1 "show bgp evpn route-type ip-prefix ipv4" + +# EVPN Type-5 on Campus-BL +ssh admin@clab-arista-evpn-fabric-campus-border-leaf1 "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/ +β”‚ β”œβ”€β”€ 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 +β”‚ β”œβ”€β”€ campus-border-leaf1.cfg, campus-border-leaf2.cfg +β”‚ └── campus-access1.cfg, campus-access2.cfg +└── hosts/ β”œβ”€β”€ README.md - β”œβ”€β”€ host1_interfaces - β”œβ”€β”€ host2_interfaces - β”œβ”€β”€ host3_interfaces - └── host4_interfaces + β”œβ”€β”€ dc-server1_interfaces … dc-server4_interfaces + β”œβ”€β”€ campus-dc-server1_interfaces + └── campus-dc-server2_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/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 deleted file mode 100644 index bf68ced..0000000 --- a/assets/arista-evpn-fabric.svg +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - spine1 - - - - - - - - - - - - - - - - - - - - - spine2 - - - - - - - - - - - - - - - - - - - - - leaf1 - - - - - - - - - - - - - - - - - - - - - leaf2 - - - - - - - - - - - - - - - - - - - - - leaf3 - - - - - - - - - - - - - - - - - - - - - leaf4 - - - - - - - - - - - - - - - - - - - - - leaf5 - - - - - - - - - - - - - - - - - - - - - leaf6 - - - - - - - - - - - - - - - - - - - - - leaf7 - - - - - - - - - - - - - - - - - - - - - leaf8 - - - - - - - - - - - - - - - - - - - - - access1 - - - - - - - - - - - - - - - - - - - - - access2 - - - - - - - - - - - - - - - - - - - - - access3 - - - - - - - - - - - - - - - - - - - - - access4 - - - - - - - - - - - - - - - - - - - - - host1 - - - - - - - - - - - - - - - - - - - - - host2 - - - - - - - - - - - - - - - - - - - - - host3 - - - - - - - - - - - - - - - - - - - - - host4 \ No newline at end of file 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 diff --git a/configs/campus-access1.cfg b/configs/campus-access1.cfg new file mode 100644 index 0000000..0d04f2c --- /dev/null +++ b/configs/campus-access1.cfg @@ -0,0 +1,56 @@ +! Campus-Access1 Configuration +! L2-only access switch for Campus VTEP1 (campus-leaf1/dc-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 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 60 + no shutdown +! +! Host-facing access port (single-attached endpoint in VLAN 60) +interface Ethernet3 + description campus-host1 + switchport mode access + switchport access vlan 60 + spanning-tree portfast + spanning-tree bpduguard enable + 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..e38cda9 --- /dev/null +++ b/configs/campus-access2.cfg @@ -0,0 +1,56 @@ +! Campus-Access2 Configuration +! L2-only access switch for Campus VTEP2 (campus-leaf3/dc-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 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 70 + no shutdown +! +! Host-facing access port (single-attached endpoint in VLAN 70) +interface Ethernet3 + description campus-host2 + switchport mode access + switchport access vlan 70 + spanning-tree portfast + spanning-tree bpduguard enable + no shutdown +! +! Default route for management +ip route 0.0.0.0/0 172.16.0.254 +! +end diff --git a/configs/campus-border-leaf1.cfg b/configs/campus-border-leaf1.cfg new file mode 100644 index 0000000..f67ef76 --- /dev/null +++ b/configs/campus-border-leaf1.cfg @@ -0,0 +1,238 @@ +! 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 campus-border-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 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 + ! + address-family ipv4 + neighbor 10.0.15.0 activate + neighbor 10.0.15.4 activate + ! + redistribute connected +! +end diff --git a/configs/campus-border-leaf2.cfg b/configs/campus-border-leaf2.cfg new file mode 100644 index 0000000..48a8273 --- /dev/null +++ b/configs/campus-border-leaf2.cfg @@ -0,0 +1,238 @@ +! 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 campus-border-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 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 + ! + address-family ipv4 + neighbor 10.0.15.2 activate + neighbor 10.0.15.6 activate + ! + redistribute connected +! +end diff --git a/configs/campus-leaf1.cfg b/configs/campus-leaf1.cfg new file mode 100644 index 0000000..a4ae61a --- /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 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..dbf3683 --- /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 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..1731d33 --- /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 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..59c6c27 --- /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 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..e29ed05 --- /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 campus-border-leaf1 + no switchport + ip address 10.1.1.8/31 + mtu 9214 +! +interface Ethernet6 + description campus-border-leaf2 + 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..bf59865 --- /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 campus-border-leaf1 + no switchport + ip address 10.1.2.8/31 + mtu 9214 +! +interface Ethernet6 + description campus-border-leaf2 + 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/configs/core1.cfg b/configs/core1.cfg new file mode 100644 index 0000000..d30b201 --- /dev/null +++ b/configs/core1.cfg @@ -0,0 +1,232 @@ +! 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 dc-border-leaf1 + no switchport + mtu 9214 +! +interface Ethernet1.100 + description dc-border-leaf1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.0/31 + mtu 9214 +! +interface Ethernet1.200 + description dc-border-leaf1-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 dc-border-leaf2 + no switchport + mtu 9214 +! +interface Ethernet2.100 + description dc-border-leaf2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.2/31 + mtu 9214 +! +interface Ethernet2.200 + description dc-border-leaf2-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 campus-border-leaf1 + no switchport + mtu 9214 +! +interface Ethernet3.100 + description campus-border-leaf1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.0/31 + mtu 9214 +! +interface Ethernet3.200 + description campus-border-leaf1-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 campus-border-leaf2 + no switchport + mtu 9214 +! +interface Ethernet4.100 + description campus-border-leaf2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.2/31 + mtu 9214 +! +interface Ethernet4.200 + description campus-border-leaf2-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 + ! + 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 new file mode 100644 index 0000000..181c527 --- /dev/null +++ b/configs/core2.cfg @@ -0,0 +1,232 @@ +! 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 dc-border-leaf1 + no switchport + mtu 9214 +! +interface Ethernet1.100 + description dc-border-leaf1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.4/31 + mtu 9214 +! +interface Ethernet1.200 + description dc-border-leaf1-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 dc-border-leaf2 + no switchport + mtu 9214 +! +interface Ethernet2.100 + description dc-border-leaf2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.4.6/31 + mtu 9214 +! +interface Ethernet2.200 + description dc-border-leaf2-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 campus-border-leaf1 + no switchport + mtu 9214 +! +interface Ethernet3.100 + description campus-border-leaf1-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.4/31 + mtu 9214 +! +interface Ethernet3.200 + description campus-border-leaf1-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 campus-border-leaf2 + no switchport + mtu 9214 +! +interface Ethernet4.100 + description campus-border-leaf2-underlay + encapsulation dot1q vlan 100 + ip address 10.0.5.6/31 + mtu 9214 +! +interface Ethernet4.200 + description campus-border-leaf2-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 + ! + 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 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/dc-border-leaf1.cfg b/configs/dc-border-leaf1.cfg new file mode 100644 index 0000000..2f1ecb5 --- /dev/null +++ b/configs/dc-border-leaf1.cfg @@ -0,0 +1,238 @@ +! 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 dc-border-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 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 dc-spine1 + no switchport + ip address 10.0.1.17/31 + mtu 9214 +! +interface Ethernet12 + description dc-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 + ! + address-family ipv4 + neighbor 10.0.14.0 activate + neighbor 10.0.14.4 activate + ! + redistribute connected +! +end diff --git a/configs/dc-border-leaf2.cfg b/configs/dc-border-leaf2.cfg new file mode 100644 index 0000000..023d20e --- /dev/null +++ b/configs/dc-border-leaf2.cfg @@ -0,0 +1,238 @@ +! 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 dc-border-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 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 dc-spine1 + no switchport + ip address 10.0.1.19/31 + mtu 9214 +! +interface Ethernet12 + description dc-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 + ! + address-family ipv4 + neighbor 10.0.14.2 activate + neighbor 10.0.14.6 activate + ! + redistribute connected +! +end 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 79% rename from configs/spine1.cfg rename to configs/dc-spine1.cfg index f6438b1..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,53 +34,66 @@ 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 dc-border-leaf1 + no switchport + ip address 10.0.1.16/31 + mtu 9214 +! +interface Ethernet10 + description dc-border-leaf2 + 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/dc-spine2.cfg similarity index 79% rename from configs/spine2.cfg rename to configs/dc-spine2.cfg index 6ae75d6..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,53 +34,66 @@ 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 dc-border-leaf1 + no switchport + ip address 10.0.2.16/31 + mtu 9214 +! +interface Ethernet10 + description dc-border-leaf2 + 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..07c656d 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -8,87 +8,102 @@ mgmt: topology: kinds: arista_ceos: - image: ceos:4.35.0F + image: gitea.arnodo.fr/damien/ceos:4.36.0F nodes: - # Spine Switches - spine1: + # ===================================================== + # DATACENTER FABRIC + # ===================================================== + + # DC Spine Switches (AS 65000) + 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 - # Leaf Switches - VTEP1 (AS 65001) - leaf1: + # DC Leaf Switches - VTEP1 (AS 65001) + 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 - # Leaf Switches - VTEP2 (AS 65002) - leaf3: + # DC Leaf Switches - VTEP2 (AS 65002) + 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 - # Leaf Switches - VTEP3 (AS 65003) - leaf5: + # DC Leaf Switches - VTEP3 (AS 65003) + 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 - # Leaf Switches - VTEP4 (AS 65004) - leaf7: + # DC Leaf Switches - VTEP4 (AS 65004) + 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 - # Access Switches - L2 only - access1: + # DC Border Leafs - MLAG pair (AS 65005) + dc-border-leaf1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.3 + startup-config: configs/dc-border-leaf1.cfg + + dc-border-leaf2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.4 + startup-config: configs/dc-border-leaf2.cfg + + # DC Access Switches - L2 only + 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 - # Host devices - DUAL-HOMED with LACP bonding to access switches - host1: + # DC Host devices - dual-homed with LACP bonding + dc-server1: kind: linux mgmt-ipv4: 172.16.0.101 image: ghcr.io/hellt/network-multitool @@ -109,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 @@ -130,8 +145,9 @@ 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: + dc-server3: kind: linux mgmt-ipv4: 172.16.0.103 image: ghcr.io/hellt/network-multitool @@ -152,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 @@ -175,64 +191,211 @@ 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) + campus-border-leaf1: + kind: arista_ceos + mgmt-ipv4: 172.16.0.22 + startup-config: configs/campus-border-leaf1.cfg + + campus-border-leaf2: + kind: arista_ceos + mgmt-ipv4: 172.16.0.23 + startup-config: configs/campus-border-leaf2.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 - 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: + - ifup eth1 + + campus-host2: + kind: linux + mgmt-ipv4: 172.16.0.106 + image: ghcr.io/hellt/network-multitool + cap-add: + - NET_ADMIN + binds: + - hosts/campus-host2_interfaces:/etc/network/interfaces + exec: + - ifup eth1 links: - # Spine1 to Leaf connections (underlay fabric) - - 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"] + # ===================================================== + # DATACENTER FABRIC LINKS + # ===================================================== - # Spine2 to Leaf connections (underlay fabric) - - 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"] + # Spine1 to Leaf/Border-Leaf connections (underlay) + - 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"] - # MLAG Peer Links (leaf pairs) - - endpoints: ["leaf1:eth10", "leaf2:eth10"] - - endpoints: ["leaf3:eth10", "leaf4:eth10"] - - endpoints: ["leaf5:eth10", "leaf6:eth10"] - - endpoints: ["leaf7:eth10", "leaf8:eth10"] + # Spine2 to Leaf/Border-Leaf connections (underlay) + - 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"] - # Access switch uplinks to leaf MLAG pairs (dual-homed via LACP) - # access1 dual-homed to leaf1 + leaf2 - - endpoints: ["leaf1:eth1", "access1:eth1"] - - endpoints: ["leaf2:eth1", "access1:eth2"] + # DC MLAG Peer Links (leaf pairs + border-leaf pair) + - 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"] - # access2 dual-homed to leaf3 + leaf4 - - endpoints: ["leaf3:eth1", "access2:eth1"] - - endpoints: ["leaf4:eth1", "access2:eth2"] + # DC Access switch uplinks to leaf MLAG pairs (dual-homed via LACP) + - 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"] - # access3 dual-homed to leaf5 + leaf6 - - endpoints: ["leaf5:eth1", "access3:eth1"] - - endpoints: ["leaf6:eth1", "access3:eth2"] + # DC Host connections to access switches (dual-homed via LACP) + - 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"] - # access4 dual-homed to leaf7 + leaf8 - - endpoints: ["leaf7:eth1", "access4:eth1"] - - endpoints: ["leaf8:eth1", "access4:eth2"] + # ===================================================== + # CORE INTERCONNECT (DC Border Leafs <-> Core <-> Campus Border Leafs) + # ===================================================== - # Host connections to access switches (dual-homed via LACP) - # host1 dual-homed to access1 - - endpoints: ["access1:eth3", "host1:eth1"] - - endpoints: ["access1:eth4", "host1:eth2"] + # DC Border Leafs to Core routers (4 links) + - 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"] - # host2 dual-homed to access2 - - endpoints: ["access2:eth3", "host2:eth1"] - - endpoints: ["access2:eth4", "host2:eth2"] + # Campus Border Leafs to Core routers (4 links) + - 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"] - # host3 dual-homed to access3 - - endpoints: ["access3:eth3", "host3:eth1"] - - endpoints: ["access3:eth4", "host3:eth2"] + # Core routers interconnect + - endpoints: ["core1:eth5", "core2:eth5"] - # host4 dual-homed to access4 - - endpoints: ["access4:eth3", "host4:eth1"] - - endpoints: ["access4:eth4", "host4:eth2"] + # ===================================================== + # 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", "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", "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: ["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"] + - 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 (single link, enterprise user endpoint) + - endpoints: ["campus-access1:eth3", "campus-host1:eth1"] + - endpoints: ["campus-access2:eth3", "campus-host2:eth1"] diff --git a/evpn-lab.clab.yml.annotations.json b/evpn-lab.clab.yml.annotations.json index 8984cba..faf5b4f 100644 --- a/evpn-lab.clab.yml.annotations.json +++ b/evpn-lab.clab.yml.annotations.json @@ -2,133 +2,433 @@ "freeTextAnnotations": [], "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": "spine1", + "id": "campus-spine1", "position": { - "x": 260, + "x": 120, "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", + "id": "campus-spine2", "position": { "x": 420, - "y": 420 + "y": 160 } }, { - "id": "leaf5", + "id": "campus-leaf1", "position": { - "x": 580, - "y": 420 + "x": -60, + "y": 400 } }, { - "id": "leaf6", + "id": "campus-leaf2", "position": { - "x": 740, - "y": 420 + "x": 80, + "y": 400 } }, { - "id": "leaf7", + "id": "campus-leaf3", "position": { - "x": 920, - "y": 420 + "x": 240, + "y": 400 } }, { - "id": "leaf8", + "id": "campus-leaf4", "position": { - "x": 1080, - "y": 420 + "x": 380, + "y": 400 } }, { - "id": "host1", + "id": "campus-border-leaf1", "position": { - "x": 20, - "y": 680 + "x": 540, + "y": 400 } }, { - "id": "host2", + "id": "campus-border-leaf2", "position": { - "x": 340, - "y": 680 + "x": 680, + "y": 400 } }, { - "id": "host3", + "id": "campus-access1", "position": { - "x": 660, - "y": 680 - } - }, - { - "id": "host4", - "position": { - "x": 1000, - "y": 680 - } - }, - { - "id": "access4", - "position": { - "x": 1000, + "x": 40, "y": 540 } }, { - "id": "access3", + "id": "campus-access2", "position": { - "x": 660, - "y": 520 + "x": 320, + "y": 540 } }, { - "id": "access2", + "id": "campus-host1", "position": { - "x": 340, - "y": 520 + "x": 40, + "y": 680 } }, { - "id": "access1", + "id": "campus-host2", "position": { - "x": 20, - "y": 520 + "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 } } ], diff --git a/hosts/README.md b/hosts/README.md index 44bdaac..60d524b 100644 --- a/hosts/README.md +++ b/hosts/README.md @@ -4,26 +4,39 @@ This directory contains network interface configuration files for Alpine Linux h ## Files -- `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 hosts + +- `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 + +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-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 -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 @@ -43,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 new file mode 100644 index 0000000..cfc500a --- /dev/null +++ b/hosts/campus-host1_interfaces @@ -0,0 +1,8 @@ +auto lo +iface lo inet loopback + +auto eth1 +iface eth1 inet static + address 10.60.60.101 + netmask 255.255.255.0 + post-up ip route replace default via 10.60.60.1 diff --git a/hosts/campus-host2_interfaces b/hosts/campus-host2_interfaces new file mode 100644 index 0000000..57e2c66 --- /dev/null +++ b/hosts/campus-host2_interfaces @@ -0,0 +1,8 @@ +auto lo +iface lo inet loopback + +auto eth1 +iface eth1 inet static + address 10.60.70.102 + netmask 255.255.255.0 + post-up ip route replace default via 10.60.70.1 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