3、配置网络绑定(命令行):使用iproute2工具创建bond接口、添加从属接口、配置IP地址
说实话,很多运维兄弟一听到「命令行配网绑」就头大。总觉得要背一堆参数,生怕敲错一个字母把远程连接搞断。我刚开始带团队那会儿,也遇到过类似的事——半夜三点,生产环境网卡挂了,手忙脚乱敲命令,结果 bond 没起来,反而把主网卡也搞 down 了。嗯,从那以后我就养成了一个习惯:先在测试环境把命令跑熟,再上生产。
这一章,我们就用 iproute2 这套工具,手把手把 bond 接口搭起来。你跟着我敲一遍,其实没那么玄乎。
3.1 准备工作:确认内核模块和工具
动手之前,先看看你的系统有没有装 iproute2。现在主流发行版基本都自带,但万一你用的是精简版呢?
# 检查 ip 命令是否可用
ip link show
# 检查 bonding 内核模块是否加载
lsmod | grep bonding
# 如果没加载,手动加载
modprobe bonding
我个人习惯在加载模块时指定一下 mode,省得后面再改:
modprobe bonding mode=1 miimon=100
这里 mode=1 是主备模式,miimon=100 表示每 100 毫秒检测一次链路状态。你想想看,如果不设 miimon,链路断了内核都不知道,那绑定还有什么意义?
/etc/modules-load.d/bonding.conf 里写一行 bonding 就行。参数可以写在 /etc/modprobe.d/bonding.conf 里。
3.2 创建 bond 接口
用 ip link add 命令创建 bond 接口,名字我一般用 bond0:
ip link add bond0 type bond mode 802.3ad miimon 100 lacp_rate fast
这条命令干了三件事:
- 创建了一个名为
bond0的虚拟接口 - 指定类型为
bond - 设置模式为 802.3ad(动态链路聚合),链路检测间隔 100ms,LACP 报文发送频率为 fast
为什么我推荐 802.3ad?因为它在交换机侧也配了 LACP,两端协商,比静态的 balance-rr 或 balance-xor 更靠谱。我在一个数据中心项目里遇到过,用 balance-xor 结果流量全走一条链路,查了半天才发现是交换机没配聚合——802.3ad 至少会报错,不会让你「假聚合」。
bond0 被 NetworkManager 占用了),会报错 File exists。可以用 ip link delete bond0 先删掉再创建。
3.3 添加从属接口
bond 接口创建好了,但它还是个「光杆司令」。得把物理网卡加进去。假设我们有两张网卡 eth0 和 eth1:
# 先把从属接口 down 掉
ip link set eth0 down
ip link set eth1 down
# 添加到 bond0
ip link set eth0 master bond0
ip link set eth1 master bond0
# 启动 bond0
ip link set bond0 up
这里有个细节:添加从属接口前,一定要先把物理网卡 down 掉。为什么?因为如果网卡处于 up 状态,它有自己的 IP 和路由,加到 bond 里会造成冲突。我曾经有一次忘了 down,结果 bond0 起来了,但 eth0 还在跑流量,网络直接乱套。
添加完成后,可以用 ip link show 查看状态:
ip link show bond0
ip link show eth0
你会看到 eth0 和 eth1 的 master 字段指向了 bond0,说明绑定成功。
3.4 配置 IP 地址
bond 接口起来了,接下来配 IP。用 ip addr add 命令:
ip addr add 192.168.1.100/24 dev bond0
ip link set bond0 up
配完之后,用 ip addr show bond0 确认:
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:ab:cd:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 scope global bond0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feab:cdef/64 scope link
valid_lft forever preferred_lft forever
看到 state UP 和 inet 192.168.1.100/24,说明配置生效了。
ip link add bond0 address 00:11:22:33:44:55 type bond。这在某些交换机 MAC 学习场景下很有用。
3.5 验证绑定状态
配完了,怎么确认 bond 在正常工作?我一般用这几个命令:
# 查看 bond 详细信息
cat /proc/net/bonding/bond0
# 查看从属接口状态
ip link show eth0
ip link show eth1
# 测试连通性
ping -c 4 192.168.1.1
/proc/net/bonding/bond0 这个文件是 bonding 模块暴露的内核信息,里面能看到:
- 当前激活的从属接口(Active Slave)
- 每个从属接口的链路状态(MII Status)
- LACP 协商状态(如果用的是 802.3ad)
- 收发包统计
举个例子,输出大概长这样:
Ethernet Channel Bonding Driver: v5.10.0-136.el7.x86_64
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
看到两个 Slave 都是 MII Status: up,说明链路正常。如果其中一个 down 了,bond 会自动把流量切到另一个上——这就是绑定的核心价值。
3.6 完整配置流程一览
我把上面所有步骤串起来,给你一个可以直接复制粘贴的脚本:
#!/bin/bash
# 快速配置 bond0(802.3ad 模式)
# 1. 加载模块
modprobe bonding mode=4 miimon=100
# 2. 创建 bond 接口
ip link add bond0 type bond mode 802.3ad miimon 100 lacp_rate fast
# 3. 添加从属接口
ip link set eth0 down
ip link set eth1 down
ip link set eth0 master bond0
ip link set eth1 master bond0
# 4. 配置 IP
ip addr add 192.168.1.100/24 dev bond0
ip link set bond0 up
# 5. 验证
cat /proc/net/bonding/bond0 | grep -E "MII Status|Speed|Duplex"
这个脚本在 CentOS 7/8、Ubuntu 20.04+ 上都跑过,没出过问题。不过我还是建议你逐条执行,别一股脑全贴进去——万一哪条失败了,你至少知道卡在哪。
3.7 常见问题与避坑
| 问题 | 原因 | 解决办法 |
|---|---|---|
bond0 起不来,报错 Operation not supported |
内核没加载 bonding 模块,或者内核版本太老不支持 802.3ad | 执行 modprobe bonding,或者换用 mode=1(主备) |
添加从属接口时提示 Device or resource busy |
物理网卡处于 up 状态,或者被其他服务(如 NetworkManager)占用 | 先 ip link set ethX down,再添加 |
| bond 起来了,但 ping 不通网关 | 交换机侧没配 LACP,或者两端聚合模式不匹配 | 检查交换机配置,确保 mode 一致;临时切到 mode=1 测试 |
| 拔掉一根网线,业务中断了几秒才恢复 | miimon 值太大,或者链路检测机制不灵敏 | 把 miimon 降到 50 甚至 10,同时配合 updelay 和 downdelay 参数 |
3.8 知识结构图
下面这张图帮你理清整个配置流程和关键概念:
这张图把整个流程分成了五个步骤,外加核心参数和四种常用模式。你照着这个顺序操作,基本不会乱。记住:先加载模块,再创建接口,然后添加从属,最后配 IP 和验证——顺序错了,bond 起不来。
3.9 写在最后
用 iproute2 配 bond,说白了就是几条命令的事。但真正考验人的,是对模式的理解和对异常的处理。我见过太多人把 bond 配好了,一拔网线就炸——要么是 miimon 没设,要么是交换机侧没配。
所以,我建议你配完之后,一定要做故障演练:拔一根网线,看看业务断几秒;插回去,看看能不能自动恢复。只有亲手验证过,你才敢说这个 bond 是「靠谱」的。