很行
一,什么是ifenslave
[root@master1 ~]# rpm -ql iputils | grep bin....../usr/sbin/ifenslave
ifenslave 命令是 Linux 系统中用于管理网络接口绑定(Bonding)的工具,其核心功能是将多个物理网络接口(如 eth0、eth1)绑定为一个逻辑接口(如 bond0),以实现网络负载均衡、冗余备份或带宽聚合。
同属iputils包。
二,参数信息
[root@localhost ~]# ifenslave -h用法ifenslave [-f] <主接口> <从属接口> [<从属接口>...]ifenslave -d <主接口> <从属接口> [<从属接口>...]ifenslave -c <主接口> <从属接口>ifenslave --help创建绑定设备的步骤加载所需驱动确保内核已加载绑定模块和网卡驱动:# modprobe bonding ; modprobe <3c59x|eepro100|pcnet32|tulip|...>为主接口分配 IP 地址# ifconfig bond0 <IP地址> netmask <子网掩码> broadcast <广播地址>将所有需要的接口绑定到主设备# ifenslave [{-f|--force}] bond0 eth0 [eth1 [eth2]...]如果 bond0 没有 MAC 地址,将继承 eth0 的 MAC。后续绑定的接口会使用相同的 MAC 地址(ALB/TLB 模式除外)。其他操作关闭绑定设备并自动释放所有从属接口# ifconfig bond0 down分离故障接口(无需关闭主设备)# ifenslave {-d|--detach} bond0 eth0 [eth1 [eth2]...]切换活动从属接口# ifenslave {-c|--change-active} bond0 eth0显示主接口信息# ifenslave bond0显示所有接口信息# ifenslave {-a|--all-interfaces}启用详细输出# ifenslave {-v|--verbose} ...显示用法# ifenslave {-u|--usage}显示版本# ifenslave {-V|--version}显示帮助信息# ifenslave {-h|--help}关键说明-f/--force 选项强制绑定接口(即使类型不匹配,如非以太网设备)。MAC 地址继承主接口首次绑定时会继承第一个从属接口的 MAC 地址。后续绑定的接口默认使用该 MAC(ALB/TLB 模式会动态分配)。模式兼容性负载均衡模式(如 balance-rr)可能因交换机不支持导致数据包乱序,需测试验证。ALB/TLB 模式会动态调整 MAC 地址,避免此问题。现代替代方案推荐使用 ip link 命令(如 ip link set eth0 master bond0)或 nmcli(NetworkManager 工具)配置绑定接口。
三,例子
1、基础绑定:将 ens33 和 ens37 绑定到 bond0,记得用&&拼接, 要不然会断网
# 加载 bonding 模块(若未自动加载)[root@localhost ~]# modprobe bonding# 创建 bond0 逻辑接口(无需提前创建)[root@localhost ~]# ifconfig bond0 192.168.67.128 netmask 255.255.255.0 up && ifenslave bond0 ens33 ens37# 将 eth33 和 eth37 绑定到 bond0,记得用&&拼接,要不然会断网
如果接口类型不匹配时,强制绑定
# 强制将 tun0(虚拟隧道接口)绑定到 bond0ifenslave -f bond0 tun0
检查
[root@localhost ~]# ifconfig bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.67.128 netmask 255.255.255.0 broadcast 192.168.67.255 inet6 fe80::20c:29ff:fe2a:e04c prefixlen 64 scopeid 0x20<link> ether 00:0c:29:2a:e0:4c txqueuelen 1000 (Ethernet) RX packets 615 bytes 41232 (40.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 171 bytes 16831 (16.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:0c:29:2a:e0:4c txqueuelen 1000 (Ethernet) RX packets 605 bytes 47997 (46.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 221 bytes 27138 (26.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens37: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:0c:29:2a:e0:4c txqueuelen 1000 (Ethernet) RX packets 263 bytes 16529 (16.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 64 bytes 5906 (5.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 110 bytes 22677 (22.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 110 bytes 22677 (22.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2、解绑单个接口(不关闭 bond0)我这里没有重启,第一次直接移除ens33(原本的主会断网)
可以先切换活动接口(主备模式)
# 假设 bond0 使用主备模式(mode=1),将活动接口从 esn33切换到 esn37[root@localhost ~]# ifenslave -c bond0 esn37
再解绑
# 从 bond0 中分离 ens37(例如 ens37 故障)[root@localhost ~]# ifenslave -d bond0 ens33
重新绑定
[root@localhost ~]# ifenslave bond0 eth33#若 bond0 处于主备模式(mode=active-backup),剩余接口会自动接管流量。
3、清理绑定(重置环境),切记拼接,这里很容易断网
# 关闭 bond0 并释放所有从属接口,移除 bonding 模块(若无需使用)ifconfig bond0 down && ifenslave -d bond0 ens33 ens37 && rmmod bonding && ifdown ens33 && ifup ens33
四,补充
| |
|---|
| ifenslave bond0 eth0 eth1 |
| ifenslave -f bond0 tun0 |
| ifenslave -d bond0 eth1 |
| ifenslave -c bond0 eth1 |
| ifenslave bond0 或 cat /proc/net/bonding/bond0 |
| echo "balance-rr" > /sys/class/net/bond0/bonding/mode |
| nmcli 是 NetworkManager 的命令行工具 |
五,总结
ifenslave 命令很容易造成断网,现在也极少使用,在此只做分享,并且最新的系统也都改用了nmcli(nmcli 是 NetworkManager 的命令行工具,用于在 Linux 系统中配置和管理网络连接)。以上仅作为学习分享,切记不要用于实际生产环境。
最后的最后(Last but not least),欢迎交流:
关注公众号留言,或者在下方直接留言: