低成本扩展上网带宽——家用网关的链路聚合

前言

数个月前,联通办活动,每个月多交10块钱,就可以把家里的宽带升级成千兆,并且换了一个号称万兆的光猫,再加上移动的宽带,外网总带宽已经妥妥超千兆了。而纯千兆内网实测大概是960Mbps,离千兆网络还有一定的差距的。而一般千兆光网的实际带宽是1.2Gbps,所以为了充分使用家里的网络带宽,扩展千兆网络已经成为了一个必要选项。

家中大部分设备是千兆接口,而且光猫也是4个千兆接口,所以结合现有的情况,我选中了链路聚合的方案。但是找遍了国内的网站,发现关于链路聚合的中文资料非常匮乏,并且也有网友询问链路聚合的方案。这也让我萌生了写这篇文章的念头,但由于工作繁忙(由996社畜向007猝死族进军),所以拖延了将近半年,最近总算是可以有时间来完成这篇文章了。

鉴于网友的接受程度,我这里只使用最简单的OpenWrt的bonding方案,尽量把专业术语的部分简化,并略过理论的部分,在实在不能省略的部分详加注释,以保证大多数网友能够理解并使用。

方案概述

现有网络扩展有很多方案,直接使用光猫上带的wifi6无线路由的方案也是可以接受的,这也是联通默认提供的方案,但是有线带宽比无线低,总感觉有点奇怪。

链路聚合并不是什么新技术,在企业服务中很少有单网卡的服务器,4×1G、4×10G和2×10G+4×1G的服务器都是比较常见的,这些服务器其实是默认支持了链路聚合的。但可悲的是,现在机房中很多的服务器都只插一个网口,白白浪费了其他网卡的带宽。

首先发一个我家的网络简图:

[网络简图]

网络简图

为了避免长篇大论,这里其他部分全部略过,只讲软路由的链路聚合部分。

具体设置

铺垫那么多,总算说到正题了,硬件需求因人而异,我的网络中骨干设备是

4口软路由一个;MikroTik CRS305 1台;MikroTik CSS610 2台;网络模块若干;

硬件需求:

软路由一台,最少4个千兆口,有万兆口更好。

交换机一台,最少4千兆口,背板速率越高越好,8口以上并有万兆口更好。

如果有线只接一台PC或NAS,那么交换机也不是必须的,只是PC或NAS上最少有2个千兆口或一个万兆口和软路由万兆口相连。

我这里只有一个4口千兆软路由,加了一个USB千兆网卡,可以看作一个5口千兆软路由,暂时也够用。

这里需要注意的是,软路由加USB网卡之前需要在编译ROM的时候加入网卡驱动,或者使用底层的虚拟化软件。

(其实我一直不理解为什么在安装软路由之前要安装ESXI虚拟化,就是因为驱动的问题么?)

准备工作

在linux中使用bonding的方式就可以实现链路聚合的功能,而这也是OP所支持的,所以下文中的bonding可以等价理解为“链路聚合”,OP的作用就是把脚本形成插件,调用linux的内核功能,实现低功耗软路由的功能。

在软路由上刷OP是必须的,但是这里每个人都有个人习惯;这里无论你是自编译,还是直接用打包好的ROM都无所谓,安装上就行了,我们直接从设置使用走起。

luci是OP的图形化界面包,可以在刷好OP之后再行安装开启,下面如果有luci的话,都是指OP的图形化界面。

步骤一 安装插件

设置openwrt需要先安装bonding相关的插件,其中kmod-bonding是必须安装的,要不内核中没有这个功能,其他两个插件我不太确定不安装能不能实现链路聚合,但是UI设置上可能会有麻烦,所以还是建议都安装上。

3个插件分别是:kmod-bonding,proto-bonding,luci-proto-bonding

[必要插件]

必要插件

再顺便安装一个 iperf3 测速插件,以备后面测试链路聚合成功与否的时候使用。

步骤二 LAN口聚合

在"系统--管理权"中打开软OP的SSH

当然,也可以直接接显示器和键盘操作,不过还是SSH比较省事,因为你可以直接粘贴命令。

使用SSH工具连接软路由,输入 vi /etc/rc.local 编辑自启动文件。

按 i 进入插入模式 ;

在 exit 0上面加入;

modprobe bonding mode=0 miimon=100 #设置bonding模式为0,通用性较好,不依赖交换机协议

ifconfig bond0 10.0.0.222 netmask 255.255.255.0 up

#设置bond0 启动,IP地址可以随意设置只要不和外部IP冲突就可以,这个IP地址的存在只是为了让bond0下的网卡可以找到bond0的访问路径

#把eth0 和eth1 这两个网卡加入bond0接口

ip link set eth0 master bond0

ip link set eth1 master bond0

按esc退出插入模式

输入 :wq存盘,如果编辑错误了可以输入 :q! 放弃存盘。

注意:这个时候千万别重启,因为网卡IP还没设置,如果这个时候重启,你就要接显示器和键盘调整网卡了。

在luci界面设置LAN的接口

[接口]

接口

点击编辑,修改接口为bond0

[接口]

接口

点击“保存并应用”后,开始读秒,但是这里系统并不会直接重启,所以要手动重启一下软路由(按reset或者电源重新插拔)

这里也可以参照设置好的文件对 /etc/config/network 进行修改,然后保存并重启

注意:在重启之前要把ETH0和ETH1的网线都插到交换机上,这样才能正常找到两个网卡。

这里设置如果错误,并不会变砖,而是会产生找不到网卡IP的问题,需要插上显示器和键盘进行本地调试。为了避免这个情况发生,可以在设置bonding之前在eth2或eth3上建一个LAN,从而可以通过其他IP设置软路由。

步骤三 测试网络

当软路由重启之后,两个网卡的灯交替闪烁,基本证明已经设置成功了,可以通过原IP地址进行登录。

进入软路由的命令行之后(直接键盘显示器或SSH调用命令行),输入 iperf3 -s ,打开测速server界面。

在其他电脑上输入 iperf3 -c 软路由IP -P 20 ;注意P是大写的,这里的意思是20线程测试,不加这个参数则为单线程

我这里是 10.0.0.254所以命令是 iperf3 -c 10.0.0.254 -P 20

由于我这里的交换机已经是万兆交换机,所以不需要再多做其他设置了,如果是千兆交换机的话,需要双网卡或4网卡的电脑进行测试。当然,前提是你的电脑或NAS也已经做了链路聚合。(好像windows天然支持链路聚合,linux的话,按以上步骤设置一下就可以了。当然,因为没有luci界面,所以需要编辑 /etc/config/network文件来进行设置。群晖是支持bonding的,所以也可以用来测速)

测试结果如下:

单线程:

[单线程2网卡bonding]

单线程2网卡bonding

多线程:

[多线程2网卡bonding]

多线程2网卡bonding

对比单网线的测试结果:

[多线程单网线带宽]

多线程单网线带宽

这里证明bonding已经起到了增加带宽的作用,设置已经成功了。

在测试的时候突发奇想,把4个网卡都加入bond0(编辑 /etc/rc.local 并重启),4根网线都插到交换机上之后带宽可以达到3G左右,忘记截图了,就直接写个结论吧。

以后如果带宽再增加的话,可以考虑把USB3.0上插一个2.5G网卡以满足外网连接的带宽需求。

同时在测试的时候也发现bonding 0模式需要成对的网线才会生效,3根网线的话,速率和2根是一样的,所以是2或4个网卡设置为一组,6根网线没有机会测试,因为我这里也没有这么多网卡的服务器或软路由。

现在lan口聚合已经搞定,后面要设置WAN口的聚合了。

步骤四 WAN口聚合

这里还是 vi /etc/rc.local

加入一个bond1作为wan口bongding接口

最终完整设置结果如下:

[rc.local 配置] rc.local 配置

然后把WAN口的物理接口设置为bond1

这里注意,我们的方案是通过内核banding的,所以接口模式不需要选择链路聚合,直接选择固定IP或DHCP或PPPOE即可,我这里是选择的PPPoE,并把eht2、eth3的接口都插入到光猫的千兆口上。

[WAN配置]

WAN配置

这里需要把WAN口的防火墙配置到WAN下,其他的设置就没什么可说的了,按照单网线的方式配置就可以了,多调一下就可以了。

最后我们来测试一下外网网速:

先接一根wan线:

[单线网速]

单线网速

双路bonding

[bonding后网速]

bonding后网速

网速大于1G之后,最直接的后果是机械硬盘已经赶不上网络的下载速度了,在PC的机械硬盘上做下载的时候,每次下载到100%后,都会有很长时间的写盘,甚至内存小的PC会因为下载速度过高,内存溢出而蓝屏。

这里单纯测试一根光纤看起来提升的效果并不大,可以列为瞎折腾系列,但是在双wan叠加之后,嘿嘿

[所有宽带并发]

所有宽带并发

转载于:https://post.smzdm.com/p/av7o06mn/

版权声明:
作者:RuyeNet
链接:https://www.iloveu.top/archives/75
来源:RuyeNet
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录