This PR merges all fixes and improvements from the troubleshooting journey to make the Arista EVPN-VXLAN lab fully operational with both L2 and L3 VXLAN connectivity.
Proper LACP setup following network-multitool best practices:
- ip link add bond0 type bond mode 802.3ad- ip link set dev bond0 type bond xmit_hash_policy layer3+4- ip link set dev eth1 down- ip link set dev eth2 down- ip link set eth1 master bond0- ip link set eth2 master bond0- ip link set dev eth1 up- ip link set dev eth2 up- ip link set dev bond0 type bond lacp_rate fast- ip link set dev bond0 up
VLAN Configuration
L2 VXLAN hosts (host1, host3): VLAN 40 tagged on bond0
L3 VXLAN hosts (host2, host4): VLANs 34 and 78 tagged on bond0
Routing Strategy
Kept management default route (172.16.0.254 via eth0)
Added specific routes for L3 VXLAN networks instead of default routes:
host2: ip route add 10.78.78.0/24 via 10.34.34.1
host4: ip route add 10.34.34.0/24 via 10.78.78.1
📁 Files Changed
Switch Configurations (Updated)
configs/spine1.cfg - Added ip routing, EVPN activation
configs/spine2.cfg - Added ip routing, EVPN activation
Added network statements for loopback addresses in IPv4 address family:
- Leaf3/4: network 10.0.250.13/32, 10.0.250.14/32, 10.0.255.12/32
- Leaf7/8: network 10.0.250.17/32, 10.0.250.18/32, 10.0.255.14/32
This ensures EVPN BGP sessions establish properly on redeploy.
Previously these were only in the VRF gold section.
- All hosts now dual-homed to MLAG pairs using LACP bonding
- host1: connects to leaf1 (eth1) and leaf2 (eth2) - VLAN 40
- host2: connects to leaf3 (eth1) and leaf4 (eth2) - VLAN 34
- host3: connects to leaf5 (eth1) and leaf6 (eth2) - VLAN 40
- host4: connects to leaf7 (eth1) and leaf8 (eth2) - VLAN 78
- Each host creates bond0 with LACP (mode 802.3ad)
- Proper MAC address assignment per host
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 40
- This matches the host1 LACP bond configuration
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 40
- This matches the host1 LACP bond configuration
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 34
- This matches the host2 LACP bond configuration
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 34
- This matches the host2 LACP bond configuration
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 40
- This matches the host3 LACP bond configuration
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 40
- This matches the host3 LACP bond configuration
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 78
- This matches the host4 LACP bond configuration
- Changed channel-group 1 from 'mode on' to 'mode active' for LACP
- Changed Port-Channel1 from access to trunk mode
- Added switchport trunk allowed vlan 78
- This matches the host4 LACP bond configuration
Replace exec commands with binds mounting /etc/network/interfaces files.
This provides cleaner, more maintainable configuration that properly
handles LACP bonding and VLAN tagging on Alpine Linux hosts.
All hosts now:
- Mount their interface config from hosts/ directory
- Install required packages (ifupdown, bonding, vlan)
- Load kernel modules (bonding, 8021q)
- Bring up interfaces with ifup -a
Document the persistent interface file approach using binds, explaining:
- Dual-homing architecture with LACP bonding
- VLAN tagging configuration on hosts
- Interface file format and parameters
- Deployment process and requirements
- Testing and troubleshooting procedures
The bonding executor must be explicitly enabled with 'use bond'
for ifupdown-ng to create the bond interface properly.
Requires 'bonding' package installed.
Tested and verified working:
- bond0 created with LACP (802.3ad) mode
- eth1 and eth2 enslaved to bond0
- VLAN interface bond0.40 working
- MLAG showing active-full on switches
VLAN interface creation will be handled by exec commands in topology
since ifupdown-ng can't reliably create VLAN sub-interfaces on bonds.
Removed 'inet manual' to allow bond0 to come up automatically.
Interface files handle bond0 creation with LACP via ifupdown-ng.
VLAN sub-interfaces created via ip link commands in exec due to
ifupdown-ng limitations with VLAN interfaces on bonds.
This combines the best of both approaches:
- Persistent bond configuration in /etc/network/interfaces
- Reliable VLAN interface creation via ip commands
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
This PR merges all fixes and improvements from the troubleshooting journey to make the Arista EVPN-VXLAN lab fully operational with both L2 and L3 VXLAN connectivity.
What's Changed
🎯 Major Achievements
🔧 Infrastructure Fixes
BGP & Routing
ip routingcommand to all spine and leaf switchesMLAG Configuration
Switch Port Configuration
switchport trunk allowed vlanfor host VLANs (34, 40, 78)no shutdownfrom Port-Channel interfaces🖥️ Host Networking - Complete Redesign
Image Change
alpine:latest(had bonding syntax issues)ghcr.io/hellt/network-multitool(networking tools pre-installed)LACP Bonding Configuration
Proper LACP setup following network-multitool best practices:
VLAN Configuration
Routing Strategy
ip route add 10.78.78.0/24 via 10.34.34.1ip route add 10.34.34.0/24 via 10.78.78.1📁 Files Changed
Switch Configurations (Updated)
configs/spine1.cfg- Added ip routing, EVPN activationconfigs/spine2.cfg- Added ip routing, EVPN activationconfigs/leaf1.cfg- Port-Channel trunk mode, VLAN configconfigs/leaf2.cfg- Port-Channel trunk mode, VLAN configconfigs/leaf3.cfg- Added ip routing, loopback ads, Port-Channel configconfigs/leaf4.cfg- Added ip routing, loopback ads, Port-Channel configconfigs/leaf5.cfg- Port-Channel trunk mode, VLAN configconfigs/leaf6.cfg- Port-Channel trunk mode, VLAN configconfigs/leaf7.cfg- Added ip routing, loopback ads, Port-Channel configconfigs/leaf8.cfg- Added ip routing, loopback ads, Port-Channel configTopology (Updated)
evpn-lab.clab.yml- Updated all host configurations with network-multitool image and proper LACP/VLAN setupDocumentation (New)
hosts/README.md- Host interface configuration guidehosts/host1_interfaces- Interface file for host1 (not currently used, kept for reference)hosts/host2_interfaces- Interface file for host2 (not currently used, kept for reference)hosts/host3_interfaces- Interface file for host3 (not currently used, kept for reference)hosts/host4_interfaces- Interface file for host4 (not currently used, kept for reference)Testing & Verification
✅ L2 VXLAN (VLAN 40)
✅ L3 VXLAN (VRF gold)
✅ Infrastructure Status
Related Issues
Fixes #1 - Lab deployment and configuration fixes
Fixes #2 - BGP EVPN neighbors stuck in Connect state
Fixes #3 - Ready for deployment with EVPN activation
Fixes #4 - Lab convergence in progress
Fixes #5 - BGP EVPN neighbors stuck in Active state
Fixes #11 - Host LACP bonding configuration
Fixes #13 - L3 VXLAN default route issue
Key Technical Learnings
ip routingbefore BGP can functionDeployment
After merging, deploy with:
No manual post-deployment configuration needed - everything works from initial deployment!
Breaking Changes
⚠️ Host image changed from
alpine:latesttoghcr.io/hellt/network-multitool⚠️ Host configuration completely redesigned - old exec commands replaced
Reviewers
@Damien - Please review and merge when ready
This PR represents the complete troubleshooting journey and brings the lab to production-ready status with full L2 and L3 VXLAN functionality. 🚀