解决方案
系统环境:Debian
网络绑定模式:Mode=1(active-backup)
安装ifenslave包
apt-get install ifenslave-2.6
加载内核的bonding模块
如果要使用网络绑定功能,内核需要加载bonding模块。执行命令:
# 加载 bonding 模块 # 在正常情况下,执行该命令是没有输出的; # 如果输出 modprobe: ERROR: could not insert 'bonding': Module already in kernel 表示模块已加载; modprobe --first-time bonding # 持久化配置,即在重启主机时会自动加载bonding模块: echo 'bonding' >> /etc/modules
创建网络绑定接口(bond0)
这一步配置bond0接口。需要编辑/etc/network/interface,该文件包含了系统连接的所有网络设备的网络接口的设置信息。创建bond0接口的配置如下:
# vim /etc/network/interface # 系统启动时自动初始化bond0。由于暂时不需要自动启动,所以注释调了。 # auto bond0 # 定义bond0,并从DHCP获取IP地址 iface bond0 inet dhcp # 设置bond模式为1; bond-mode 1 # 指定主网口; bond-primary wlan0 # 声明所属bond的网口; bond-slaves wlan0 wlan1 # 告诉内核每100毫秒检查一次链路状态 bond-miimon 100 # 关闭当前活跃网口前等待的时间; bond-downdelay 400 # 使用新网口等待的时间; bond-updelay 800 # 注意事项: # downdelay和updelay必须是miimon的倍数
启动bond0网口
首先,如果要启动bond0网口,记住一定要先down掉从网卡,在这个例子中我们要donw调wlan0、wlan1,命令如下:
ifconfig wlan0 down ifconfig wlan1 down # 如果你在/etc/network/interfaces中配置了wlan0与wlan1,那么可以使用ifdown命令: ifdown wlan0 ifdown wlan1
然后,执行如下命令来启动bond0接口:
ifup bond0
如果没有什么问题,bond0接口会正常启动,接口wlan0、wlan1会被重新激活。
注意事项
1)不要执行ifconfig bond0 up来激活bond0接口,这与ifup bond0不同。
2)如果你远程注意执行这些命令,会断开当前连接(因为关闭网络了)。
确认当前网络状态
方法一:ifconfig
输出如下:
方法二:cat /proc/net/bonding/bond0
输出如下:
检测网卡绑定是否有效
目前,网卡的bond是已经做完了,但是是否能够进行切换,还需要进行验证。下面的两张图是分别执行ifconfig wlan0 down前后抓取的/proc/net/bond/bond0的内容:
至此,我们可以看到在执行ifconfig wlan0 down后,网卡自动切换到了wlan1。然后我们再执行ifconfig wlan1 up,再次cat /proc/net/bond/bond0,你会发现主网卡又切回了wlan0(这里不再截图演示了)。
可能出现的问题
#1 无法访问网络
现象:网络绑定是正常的,但是无法访问网络。
原因:在做网络绑定之前,我已经配置过wlan0、wlan1接口,导致路由表里由二者的配置,所以需要删除到wlan0及wlan1的路由配置。
解决:检查一下你的路由表吧。
参考文献
man 7 nmcli-examples / Example 7. Adding a team master and two slave connection profiles
What is Network Bonding? Types of Network Bonding
How to Configure Network (NIC) Bonding/Teaming on Debian Linux