Linux bonding配置失败主因是加载顺序、模块未加载或NetworkManager干扰;需确认bonding模块已加载、按发行版配置永久启用、严格遵循ifcfg文件约束、禁用NetworkManager或清理残留配置。

Linux bonding 配置失败,90% 是因为顺序错、模块没加载、或 NetworkManager 干扰 —— 不是配置写错了,而是系统根本没按你写的执行。
确认 bonding 内核模块已加载且可用
运行 lsmod | grep bonding,无输出说明模块未加载。此时 modprobe bonding 可临时启用,但重启后失效。永久生效需按发行版处理:
- Debian/Ubuntu:往
/etc/modules追加一行bonding - RHEL/CentOS 7+(使用 network-scripts):在
/etc/sysconfig/modules/bonding.modules中写入#!/bin/sh /sbin/modprobe bonding并 chmod +x - 若
modinfo bonding报错或无输出,说明内核未编译该模块(极少见,多见于定制内核或旧版本)
注意:CONFIG_BONDING=m 或 =y 必须存在于 /boot/config-$(uname -r) 中,否则 modprobe 会静默失败。
配置 ifcfg-bond0 和从属网卡时的关键约束
以 RHEL/CentOS 7 为例(network-scripts 模式),ifcfg-bond0 和两个 slave 网卡的配置必须满足以下硬性条件,缺一不可:
-
ifcfg-bond0中不能出现GATEWAY(网关应写在全局/etc/sysconfig/network或用DEFROUTE=yes控制) - 两个从属网卡(如
ifcfg-eth0、ifcfg-eth1)必须设为BOOTPROTO=none,且**严禁配置 IPADDR、NETMASK、DHCP 等网络参数** - slave 文件中必须同时存在
MASTER=bond0和SLAVE=yes;ONBOOT=yes推荐开启,但启动顺序依赖 bond 主接口先 up -
BONDING_OPTS="mode=1 miimon=100"应写在ifcfg-bond0中,而非/etc/modprobe.d/—— 后者在 CentOS 7+ 已被 network-scripts 忽略
常见错误:ifdown eth0 && ifup bond0 后发现 ip link show bond0 是 DOWN 状态,大概率是 slave 网卡的 ONBOOT=no 或 BOOTPROTO 错配导致驱动拒绝绑定。
mode=1 主备模式下 fail_over_mac=1 的真实作用
默认 mode=1 下,主备切换时交换机会短暂“看不见”bond 接口的 MAC 地址,引发 2–5 秒 ARP 超时。启用 fail_over_mac=1 可让两个物理口使用相同 MAC,避免此问题:
- 必须配合
ifconfig eth0 down && ifconfig eth1 down清除原 MAC 学习缓存,再ifup bond0 - 虚拟化环境(VMware/KVM)中,宿主机网卡需开启混杂模式(promiscuous mode),否则
fail_over_mac=1无效 - 某些老旧交换机不支持同一 MAC 多端口转发,此时反而会导致泛洪或丢包 —— 建议先在测试环境拔线验证
注意:fail_over_mac=1 仅对 mode=1 有效,mode=4 下由 LACP 协议管理 MAC 行为,无需手动干预。
NetworkManager 与 network-scripts 冲突的典型表现
CentOS 7+/RHEL 8 默认启用 NetworkManager,它会主动接管 ifcfg-* 文件并覆盖 bonding 配置。现象包括:
-
systemctl restart network成功,但cat /proc/net/bonding/bond0显示 “No such file or directory” - 手动
ip link set bond0 up后立刻变为 DOWN,日志中出现 “device bond0 is managed by NetworkManager” - 运行
nmcli device status发现 eth0/eth1 状态为 “unmanaged”,但 bond0 根本不出现
解决方法只有两种:
① 彻底禁用 NM:systemctl disable NetworkManager && systemctl stop NetworkManager,再 systemctl restart network
② 改用 nmcli 定义 bond(不推荐用于生产服务器,因调试链路长、故障定位难)
真正容易被忽略的是:即使你停用了 NetworkManager,若之前用 nmcli 创建过连接,残留的 /etc/sysconfig/network-scripts/ifcfg-* 文件可能含 NM_CONTROLLED=yes,必须手动改为 no 并删掉 UUID 行,否则 network service 仍会跳过该文件。


















