bond0: link status down

Network Bonding Fails After Reboot on Ubuntu 22.04

Your bonded interface drops after reboot. The fix is a missing 'auto' line in /etc/network/interfaces. I'll show you exactly what to add.

Yeah, that moment when you reboot your Ubuntu server and your bonded network interface just sits there dead — frustrating. You spent hours setting up bonding, it worked fine until restart, and now ip link show bond0 shows DOWN and no machines can reach each other. I've trained a bunch of techs who ran into this exact thing. Here's what actually fixes it.

The Real Fix: Add the Missing auto Line

Most people write their bonding config in /etc/network/interfaces and forget one line. Open that file:

sudo nano /etc/network/interfaces

Look for the bond interface block. It likely looks like this:

iface bond0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    bond-slaves eth0 eth1
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 1
    bond-xmit_hash_policy layer3+4

Notice what's missing? There's no auto bond0 line above the iface line. Without it, the system never brings the bond up at boot. Add it right before the iface line. Your file should look like:

auto bond0
iface bond0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    bond-slaves eth0 eth1
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 1
    bond-xmit_hash_policy layer3+4

Save the file. Then run:

sudo ifdown bond0 && sudo ifup bond0

Watch for error messages. If you don't see any, run ip link show bond0. You should see state UP. Then test with ping 192.168.1.1 (or your gateway IP).

What you should see: After ifdown, the bond interface disappears. After ifup, it comes back with the correct IP and the link is green. The slave interfaces (eth0, eth1) should show MII Status: up if you run cat /proc/net/bonding/bond0.

Why This Happens

The auto directive in /etc/network/interfaces tells the system to bring up that interface at boot time. Without it, the system reads the interface definition but never activates it. It's like having the keys to your car but no ignition switch. The weird part is that older Ubuntu versions (like 18.04) sometimes worked without auto because of how networkd handled things. But starting with Ubuntu 20.04 and definitely in 22.04, ifupdown is stricter. Skip the auto line, and your bond stays dead after restart.

Also, if you used netplan instead of ifupdown, the issue is different — but this guide assumes you're using /etc/network/interfaces because that's what most older tutorials recommend. If you switched to netplan, you wouldn't have this problem.

Less Common Variations

Bond module not loading

Sometimes the bonding kernel module doesn't load at boot. Check with lsmod | grep bonding. If nothing shows, add bonding to /etc/modules. One line:

sudo sh -c 'echo bonding >> /etc/modules'

Then reboot. Without the module, no bond interface appears at all, even with auto present.

Slave interfaces not set to manual

Your slave interfaces (eth0, eth1) need to be marked as manual in /etc/network/interfaces. Example:

auto eth0
iface eth0 inet manual
    bond-master bond0

auto eth1
iface eth1 inet manual
    bond-master bond0

If you skip the auto eth0 and auto eth1 lines, the slaves never get attached to the bond at boot. The bond comes up but has no slaves — so ip link show bond0 shows up but NO-CARRIER. Add those auto lines for each slave.

Using NetworkManager instead of ifupdown

If you have NetworkManager running (common on desktop Ubuntu), it might override your bonding config. Disable it for the bond interface:

sudo nmcli device set bond0 managed no

Or just disable NetworkManager entirely for systemd-networkd setups:

sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

After that, restart networking: sudo systemctl restart networking.

Prevention: Get It Right the First Time

Do this:

  1. Always add auto bond0 and auto eth0, auto eth1 before their iface blocks. Copy-paste from a known working example — don't rely on memory.
  2. Test after every reboot. Before you walk away from a server, reboot it and SSH back in. If bonding fails, you catch it immediately.
  3. Keep a backup of the working /etc/network/interfaces file. One typo during an edit can break everything. sudo cp /etc/network/interfaces /etc/network/interfaces.backup
  4. Use systemctl status networking to check if the service started cleanly. If it's failed, journalctl -xe | grep -i bond usually shows the exact missing auto line.

That's it. No magic. Just a missing auto line that the docs assume you know to add. Now your bond stays up after restart.

Related Errors in Linux & Unix
Screen Resolution Option Missing on Linux – Fixed Nginx page not redirecting? Fix the return directive order null Fix Kernel Panic: VFS Unable to Mount Root Filesystem UFW Just Blocked Your SSH — Here's the Fastest Fix

Was this solution helpful?

EP
Erropedia Team
Tech Support Editors
The Erropedia editorial team researches and documents real-world tech errors from across Windows, Linux, macOS, networking, databases, cloud platforms, and more. Every solution is reviewed for accuracy and updated as software and systems evolve.