Linux  ·  high  ·  Networking, DNS & SSH

Bonded or teamed interfaces will not come up, or run at one link's speed

The bond exists on the server but the switch does not agree, so either it does not come up or only one link carries traffic.

What you see

bond0 shows one active slave, or the interface has an address and no connectivity. Throughput matches a single link no matter how many are in the bond.

What is actually wrong

LACP configured on one end only, a mismatched hash policy, or the expectation that a bond multiplies the speed of a single connection — which it does not.

Codes and articles

bond0802.3adLACPmode=4no partnerSlave Interface

Fixes (2)

Get both ends agreeing
Root shell and the switch40 minuteshigh riskreversible

The bond is down or only one link is active.

  1. Read the bond's own status file, which states exactly what the switch is or is not saying.

    Shell
    cat /proc/net/bonding/bond0

    The partner MAC and partner key fields are the answer. All zeros means the switch is not speaking LACP on those ports at all, which is a switch configuration job, not a Linux one.

  2. Check the mode. Mode 4 (802.3ad) requires the switch to be configured with a matching port-channel; modes 1 (active-backup) and 6 (balance-alb) do not.

  3. If the switch cannot be configured, use active-backup, which needs nothing from the switch and gives redundancy without extra throughput.

    Shell
    sudo nmcli connection add type bond con-name bond0 ifname bond0 bond.options 'mode=active-backup,miimon=100'
  4. For LACP, configure the switch ports into a channel group first, then bring the bond up — bringing up an unconfigured bond against a switch can create a loop.

  5. Add the slaves.

    Shell
    sudo nmcli connection add type ethernet slave-type bond con-name bond0-p1 ifname enp1s0 master bond0sudo nmcli connection add type ethernet slave-type bond con-name bond0-p2 ifname enp2s0 master bond0sudo nmcli connection up bond0
Confirm it workedBoth slaves report active and the partner details are populated.
Shell
cat /proc/net/bonding/bond0 | grep -E 'Slave Interface|MII Status|Partner Mac'
If you need to undo itnmcli connection delete removes the bond and its slaves, returning the interfaces to standalone.
Set the hash policy, and correct the expectation
Root shell and the switch30 minutesmedium riskreversible

The bond is up and throughput is unchanged.

  1. Understand the limit first: a single TCP connection always uses one physical link. A two-link bond does not make one file copy twice as fast — it lets two copies run at full speed at the same time.

    This is the expectation that causes most bonding complaints, and no configuration change will alter it. Aggregation distributes flows, it does not split them.

  2. Check the current hash policy.

    Shell
    cat /proc/net/bonding/bond0 | grep -i 'hash policy'
  3. Set layer3+4 hashing, which distributes by port as well as address and spreads multiple connections between the same two machines.

    Shell
    sudo nmcli connection modify bond0 bond.options 'mode=802.3ad,miimon=100,lacp_rate=fast,xmit_hash_policy=layer3+4'sudo nmcli connection up bond0
  4. Set the matching hash on the switch. A mismatch is legal and simply distributes badly in one direction.

  5. Test with several parallel streams rather than one.

    Shell
    iperf3 -c 10.0.0.20 -P 8 -t 30
Confirm it workedParallel streams together exceed a single link's capacity and the per-slave counters both rise.
Shell
cat /proc/net/bonding/bond0 | grep -A3 'Slave Interface'
If you need to undo itSet xmit_hash_policy back to layer2 and reapply.

Where this stops. This write-up was written and checked by hand. It says what each step changes, how to confirm it worked and how to reverse it, and anything destructive is flagged before you reach it. If it does not match what your machine is doing, search the Support Centre for the exact code or message — and when something needs a person, get in touch.