Skip to main content
RunBook Academy

Proxmox VEIV · NetworkingLinux networking

Bonds, LACP, VLANs, MTU

Intermediate⏱ ~18 min

What you'll learn

  • Configure a bond with LACP end-to-end
  • Set up VLAN-aware bridges
  • Choose appropriate MTU values and detect MTU mismatches
  • Recognise the difference between access ports and trunks

Prerequisites

Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12

Not yet marked complete on this device.

Why this matters in production

Most production outages caused by networking are not “the network broke.” They are “the network reconfigured itself because one link flapped and the bond didn’t failover.” This lesson teaches the configurations that survive real failures.

Bond modes

ModeBehaviourFailoverLoad balancingSwitch cooperation
balance-rr (0)Round-robin packetsNoPer packetNone required
active-backup (1)One active, others standbyYesNoNone required
balance-xor (2)Hash-basedNoPer flowStatic EtherChannel
802.3ad / LACP (4)Negotiated aggregationYesPer flowLACP required
balance-tlb (5)Transmit load balancingYesTX onlyNone required
balance-alb (6)TLB + RLBYesBothNone required

Configuring a bond with LACP

In /etc/network/interfaces:

auto eno1
iface eno1 inet manual

auto eno2
iface eno2 inet manual

auto bond0
iface bond0 inet manual
    bond-slaves eno1 eno2
    bond-miimon 100
    bond-mode 802.3ad
    bond-lacp-rate fast
    bond-xmit-hash-policy layer3+4

Reload with ifreload -a, and read the result rather than assuming it. Note that the edit goes to /etc/network/interfaces.new when made through the GUI; the lesson on applying network changes covers the staging model and the rollback timer that belongs around any bond change.

Service impact possibleapply, then verify the bond actually aggregated
ifreload -a

cat /proc/net/bonding/bond0

# the three things to look for, extracted
grep -E 'MII Status|Aggregator ID|Churn State|Partner Mac' /proc/net/bonding/bond0
Read-only / Safe
$ grep -E 'MII Status|Aggregator ID|Churn State' /proc/net/bonding/bond0
MII Status: up
Aggregator ID: 1
MII Status: up
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
MII Status: up
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none

Illustrative output

VLAN-aware bridges

A VLAN-aware bridge allows multiple VLANs to share a single bridge + bond, with the bridge handling the 802.1Q tagging instead of the host creating a subinterface per VLAN.

auto vmbr0
iface vmbr0 inet manual
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 10 20 30 100

VMs attached to vmbr0 specify their VLAN tag in the GUI/CLI; the bridge handles the tag.

Read-only / Safewhich VLANs does each bridge port actually allow?
bridge vlan show
bridge -d link show | grep -A2 vmbr0
grep -A8 'iface vmbr0' /etc/network/interfaces

MTU and jumbo frames

The default Ethernet MTU is 1500 bytes. Jumbo frames (9000) can improve storage throughput but only work if every device on the path agrees.

Path componentMTU setting
Physical NICDriver default or configured (ip link set eno1 mtu 9000)
BondMust support the higher MTU (most do)
BridgeInherits from lowest member
VM guestMust be configured in the guest OS
Physical switchMust allow jumbo frames on the port
Storage targetNFS, Ceph, iSCSI must all agree
TARGET_IP=192.0.2.30
ping -M do -s 8972 -c 3 "$TARGET_IP"

If the 8972-byte ping (which is 9000 minus IP+ICMP headers) succeeds, the path supports jumbo frames.

Switch configuration

The switch side must match:

ProxmoxSwitch
Bond with LACPPort-channel / EtherChannel with LACP active
VLAN trunkTrunk port with allowed VLANs
Access VLANAccess port with PVID
Jumbo framesMTU 9216 on the port (9216 = 9000 + headers)

GUI walkthrough

Node → Network lists every interface, bond, and bridge. Create operations:

  1. Create → Linux Bridge: choose ifup/ifdown, IP/CIDR/gateway, bridge ports, VLAN awareness, port for management.
  2. Create → Bond: choose bond mode, slaves, monitoring interval, LACP rate.
  3. Create → VLAN: choose parent interface (a bond or bridge), VLAN ID, optional IP.

Edits to a running network device are applied with ifreload -a. Some changes (like adding a slave to a bond) require a brief interruption.

CLI walkthrough

ip -br -d link show
bridge vlan show
ip -d link show eno1 | grep mtu

Production considerations

Common mistakes

  • Setting MTU 9000 on one side and 1500 on the other.
  • Using balance-tlb instead of LACP because “we don’t want to coordinate with the network team.” TLB has asymmetric performance and surprises during failover.
  • Forgetting that VLAN-aware bridges do not require per-VLAN subinterfaces but do require the bridge to be told which VLANs exist (bridge-vids).
  • Mixing tagged and untagged traffic on the same bridge port.

Key takeaways

  • LACP (bond-mode 802.3ad) is the production default for bonds.
  • A bond being UP is not evidence it aggregated. Check that both slaves share one Aggregator ID and that Churn State is none.
  • VLAN-aware bridges scale better than per-VLAN bridges, and bridge-vids is an allow-list — a missing VLAN breaks guests while the host keeps working.
  • MTU must match end-to-end. Mismatches cause silent failures.

Knowledge check

Knowledge check · 4 questions

  1. Q1. Which bond mode requires switch cooperation?

  2. Q2. An MTU mismatch usually shows up as large transfers stalling while ping and small packets succeed.

  3. Q3. Which command reloads the Proxmox network configuration without disrupting active interfaces?

  4. Q4. A guest on VLAN 250 has no network. The node itself can reach the VLAN 250 gateway through a subinterface. bond and bridge are up and ifreload reported no errors. Where do you look?

Passing score: 75%. Answers are checked in this browser.