bond简单实现

Posted by 婷 on July 3, 2022 本文总阅读量

简介

bond功能用于多网卡的设备,也可以用于有线和无线网络同时接入一个网络的情况,主要就是将两张网卡当成一张网卡来使用,可以起到带宽加倍的作用,也可以起到安全冗余的作用,一个网卡挂了的话另一个网卡还能继续完成所有的工作。

过程

总的步骤如下

  • 内核选项打开bond相关选项并编译
  • 编译ifenslave工具
  • 升级内核,并加载bonding驱动
  • ifenslave绑定网卡

打开bond相关内核选项

路径:

-> Device Drivers
	 -> Network device support (NETDEVICES [=y])  
	 	 -> Network core driver support (NET_CORE [=y]) 

image-20220627225633449

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

image-20220627225805222

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

image-20220627230052348

ifenslave

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

image-20220703113615051

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

image-20220630004825286

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

arm-linux-gnueabihf-gcc  -Wall -O ifenslave.c -o ifenslave

image-20220630005458398

安装bonding驱动

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

image-20220703172208620

执行命令

ifconfig eth0 down
ifconfig wlan0 down

image-20220703172305252

image-20220703172335456

这时候加载驱动,可以看到bond0网卡

insmod bonding.ko mode=active-backup

image-20220703172436708

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

ifconfig bond0 192.168.1.211 netmask 255.255.255.0

image-20220703172549996

ifenslave绑定bond网卡

现在绑定wlan0网卡

./ifenslave bond0 wlan0

image-20220703172635550

image-20220703172729744

同理绑定eth0网卡

./ifenslave bond0 eth0

image-20220703173116871

测试

设备ping我的主机192.168.1.104

image-20220630005845444

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

image-20220703173521787

其他

sysfs实现ifenslave

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

image-20220703114516299

image-20220703114922010

image-20220703114950430

确保eth0wlan0网卡都是down的情况下这时候加载bonding驱动后,输入

echo +eth0 > /sys/class/net/bond0/bonding/slaves

image-20220703174829100

image-20220703174815609

同理wlan0

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

image-20220703174916345

image-20220703174940972

这时候电脑去ping这三个IP都是可以的

双网卡

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

image-20220703191425557

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

image-20220703191528741

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