简介
bond功能用于多网卡的设备,也可以用于有线和无线网络同时接入一个网络的情况,主要就是将两张网卡当成一张网卡来使用,可以起到带宽加倍的作用,也可以起到安全冗余的作用,一个网卡挂了的话另一个网卡还能继续完成所有的工作。
过程
总的步骤如下
- 内核选项打开
bond相关选项并编译 - 编译
ifenslave工具 - 升级内核,并加载
bonding驱动 ifenslave绑定网卡
打开bond相关内核选项
路径:
-> Device Drivers
-> Network device support (NETDEVICES [=y])
-> Network core driver support (NET_CORE [=y])

我们把bonding选择成编译为模块的形式

然后编译新的内核跟驱动,驱动就在drivers/net/bonding/bonding.ko

ifenslave
网上的说法是,ifenslave.c源码在Documentation/networking下,但是我翻遍我的4.1.15版本的内核源码,并没有找到,后来在kernel.org中发现,被删除了

然后查看内核中的Documentation/networking/bonding.txt文档,其实也提到了用sysfs的方法来代替ifenslave的功能,这个最后再介绍

那现在没有ifenslave.c文件,就去老版本的内核找,恰巧我在这里,3.10版本中,在Documentation/networking找到了ifenslave.c文件,进行交叉编译
arm-linux-gnueabihf-gcc -Wall -O ifenslave.c -o ifenslave

安装bonding驱动
升级内核后,加载bonding驱动前先确保要绑定的网卡是down状态,在我这里我是eth0跟wlan0

执行命令
ifconfig eth0 down
ifconfig wlan0 down


这时候加载驱动,可以看到bond0网卡
insmod bonding.ko mode=active-backup

接着配置IP(一定要先配置,不然后面会有奇怪的报错)
ifconfig bond0 192.168.1.211 netmask 255.255.255.0

ifenslave绑定bond网卡
现在绑定wlan0网卡
./ifenslave bond0 wlan0


同理绑定eth0网卡
./ifenslave bond0 eth0

测试
设备ping我的主机192.168.1.104

我的主机ping我的设备三个网卡的地址

其他
sysfs实现ifenslave
前面提到ifenslave源码被删除了,有sysfs的方法,然后自己在网上搜到这个帖子提到用sysfs的方法,具体的内容可以看这个帖子的原文,帖子中也有讲sysfs的用法。这里就简单的实现一下。



确保eth0跟wlan0网卡都是down的情况下这时候加载bonding驱动后,输入
echo +eth0 > /sys/class/net/bond0/bonding/slaves


同理wlan0
echo +wlan0 > /sys/class/net/bond0/bonding/slaves


这时候电脑去ping这三个IP都是可以的
双网卡
好像如果是双网卡的话 ,貌似只能用其中一个,而且还是先up上的那个,这个估计可能得看内核的源码中是怎么去做的这件事情

但是主机去ping这两个网址都是ok的

这个时候比如是eth0能用,wlan0不行,如果把 eth0给down掉,这个时候wlan0又能用了