Bonding fails after reboot on RHEL 8 – fix ifcfg config

Linux & Unix Intermediate 👁 9 views 📅 Jun 29, 2026

Network bonding in Linux dies after reboot because ifcfg files miss a key line. Here's the real fix.

Quick answer

Add BONDING_OPTS="mode=1 miimon=100" to /etc/sysconfig/network-scripts/ifcfg-bond0 and remove NM_CONTROLLED=no from slave interfaces.

Why this happens

You set up a bond interface – say bond0 with two slaves, eth0 and eth1. It works great until the next reboot. Then the bond isn't there. NetworkManager doesn't know how to activate it because the bond config files miss a critical parameter: BONDING_OPTS. Without it, the kernel doesn't apply bonding settings after restart. The bond interface shows as down, or the slaves don't join. I've seen this on RHEL 8.4, CentOS 8, and Rocky Linux 8. The trigger is usually a reboot after manually editing ifcfg files instead of using nmcli.

Fix steps

  1. Check current bond status
    Run cat /proc/net/bonding/bond0 to see if the bond exists. If it shows nothing, the bond isn't loaded yet.
  2. Open the bond config
    Type sudo vi /etc/sysconfig/network-scripts/ifcfg-bond0. You should see something like:
    DEVICE=bond0
    TYPE=Bond
    NAME=bond0
    BOOTPROTO=none
    ONBOOT=yes
    IPADDR=192.168.1.100
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
  3. Add BONDING_OPTS
    Insert this line after ONBOOT=yes:
    BONDING_OPTS="mode=1 miimon=100"
    Replace mode=1 with your preferred mode (0 for balance-rr, 4 for 802.3ad). Save and exit.
  4. Fix slave interfaces
    Open each slave config, like /etc/sysconfig/network-scripts/ifcfg-eth0 and ifcfg-eth1. Make sure they look like this:
    DEVICE=eth0
    TYPE=Ethernet
    BOOTPROTO=none
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    NM_CONTROLLED=no
    If NM_CONTROLLED=no is missing, add it. If it's set to yes, change it to no. Do the same for eth1.
  5. Remove stale NetworkManager connection
    Run sudo nmcli con show. Look for a connection named bond0 or eth0. Delete them with sudo nmcli con delete <name>. NetworkManager sometimes creates its own profiles that conflict.
  6. Restart network
    Type sudo systemctl restart NetworkManager. Then check with cat /proc/net/bonding/bond0. You should see the bond active with slaves attached. Also ping your gateway to confirm connectivity.

Alternative fixes

If the bond still doesn't come up after reboot:

  • Use nmcli instead – run sudo nmcli con add type bond con-name bond0 ifname bond0 mode active-backup. Then add slaves with sudo nmcli con add type bond-slave ifname eth0 master bond0. This creates correct configs automatically. I recommend this for new setups.
  • Check kernel module – the bonding module may not load. Add bonding to /etc/modules-load.d/bonding.conf and run sudo modprobe bonding.
  • Disable NetworkManager entirely – set NM_CONTROLLED=no in /etc/sysconfig/network-scripts/ifcfg-* for all interfaces including the bond. Then use old network service: sudo systemctl enable network && sudo systemctl start network. This works but is heavy-handed.

Prevention tip

Always use nmcli to create bonds. Don't hand-edit ifcfg files. If you must edit manually, triple-check that BONDING_OPTS is present and that slave interfaces have NM_CONTROLLED=no. After any change, test with a reboot before deploying to production.

Was this solution helpful?