Linux双网卡绑定需先确认bonding模块已加载,否则会报“Unknown interface”;应选用mode=1并配置ARP监控、SLAVE=yes、primary及正确IP设置,再通过/proc/net/bonding和tcpdump验证实际生效。

Linux 双网卡绑定不是“配了就自动高可用”,bond 模式选错、驱动没加载、交换机没配合,绑了也白绑。
怎么确认系统支持 bond 模块并正确加载
很多问题其实卡在第一步:内核根本没加载 bonding 模块。不检查就直接写配置,ifup bond0 会报 Unknown interface bond0 或 Device does not exist。
- 运行
lsmod | grep bonding,没输出说明模块没加载 - 临时加载:
modprobe bonding;要开机自动加载,往/etc/modules里追加一行bonding - 注意:某些云厂商(如 AWS、阿里云)的定制内核可能默认禁用 bonding,或要求启用
net.ifnames=0避免网卡名不一致
mode=1(active-backup)是最稳妥的入门选择
别一上来就搞 mode=4(802.3ad),它依赖交换机 LACP 配置,而大多数家用路由器、普通交换机根本不支持——结果是两根线只有一根通,还查不出原因。
-
mode=1不需要交换机配合,主备切换靠内核检测链路状态(ARP 或 MII),适合绝大多数物理服务器场景 - 必须指定
primary=eth0(比如),否则故障切换时可能选错主接口 - 启用 ARP 监控比 MII 更可靠:
arp_interval=1000+arp_ip_target=192.168.1.1(填网关或下游稳定设备 IP)
配置文件里漏掉 SLAVE=yes 是高频翻车点
CentOS/RHEL 系的 /etc/sysconfig/network-scripts/ifcfg-eth0 里,如果忘了加这行,ifup bond0 会成功,但 eth0 实际没被纳入 bond,cat /proc/net/bonding/bond0 显示 “No slaves”。
- 每个从属网卡(如 eth0、eth1)配置文件中必须包含:
DEVICE=eth0、SLAVE=yes、MASTER=bond0 -
bond0主配置里不能写IPADDR和NETMASK在从属卡上——这些只写在bond0配置里 - 重启网络前,先用
ifconfig bond0 down && ifconfig eth0 down && ifconfig eth1 down清理残留状态,避免绑定失败却无提示
验证 bond 是否真生效,别只看 ip a
ip a 显示 bond0 有 IP,不代表流量走的是双网卡。真正要看的是底层状态和实际路径。
- 查绑定详情:
cat /proc/net/bonding/bond0,确认Slave Interface: eth0下面有Link Failure Count: 0且当前状态是Up - 拔一根网线,等 2–3 秒,再查上面命令——
Currently Active Slave应该已切换,且Link Failure Count增加 - 用
tcpdump -i eth0 icmp和tcpdump -i eth1 icmp同时抓包,ping 网关,观察只有 active 接口有包(mode=1 下正常)
最常被忽略的是交换机侧:mode=1 虽不依赖 LACP,但交换机端口不能开生成树(STP)阻塞,也不能配置成 access+trunk 混合模式;物理连线最好接同一台交换机,跨交换机做 active-backup 要额外调 STP 定时器,不然切换延迟可能到 30 秒以上。

















