低成本扩展上网带宽——家用网关的链路聚合
创作立场声明:本文所测商品为自费购入。如参加张大妈家的活动获得,我会在文中点明。坚持独立的评价观点是笔者创作的基本底线,绝不会因商品来源不同而有所偏颇,请各位放心。
前言
数个月前,联通办活动,每个月多交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的,所以也可以用来测速)
测试结果如下:
单线程:
多线程:
对比单网线的测试结果:
这里证明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接口
最终完整设置结果如下:
然后把WAN口的物理接口设置为bond1
这里注意,我们的方案是通过内核banding的,所以接口模式不需要选择链路聚合,直接选择固定IP或DHCP或PPPOE即可,我这里是选择的PPPoE,并把eht2、eth3的接口都插入到光猫的千兆口上。
这里需要把WAN口的防火墙配置到WAN下,其他的设置就没什么可说的了,按照单网线的方式配置就可以了,多调一下就可以了。
最后我们来测试一下外网网速:
先接一根wan线:
双路bonding
网速大于1G之后,最直接的后果是机械硬盘已经赶不上网络的下载速度了,在PC的机械硬盘上做下载的时候,每次下载到100%后,都会有很长时间的写盘,甚至内存小的PC会因为下载速度过高,内存溢出而蓝屏。
这里单纯测试一根光纤看起来提升的效果并不大,可以列为瞎折腾系列,但是在双wan叠加之后,嘿嘿













huzz8683500
校验提示文案
mmDXT
校验提示文案
茶几男
校验提示文案
Death冷色
校验提示文案
MrDangDangDang
校验提示文案
两袖空空
校验提示文案
zcyycz
校验提示文案
Planton
校验提示文案
tianrui521
校验提示文案
值友2577831445
校验提示文案
dop_
校验提示文案
tel易
校验提示文案
zhaobin5252
校验提示文案
likethe265
校验提示文案
魏皇兄大大
校验提示文案
值友5664211363
校验提示文案
米高M
校验提示文案
值友6280044474
校验提示文案
chyzp
校验提示文案
探客染白
校验提示文案
眼镜帅哥哥
校验提示文案
值友5503046017
校验提示文案
大魔王mk
校验提示文案
adu-SEU
校验提示文案
WCH2428
然后再luci界面里软绑定一下成功了,结果不能用DHCP服务,不能在局域网里分配地址
校验提示文案
AYYsam
校验提示文案
墨色之月
校验提示文案
譬如北辰丶
校验提示文案
fengziX
校验提示文案
starttimes
校验提示文案
starttimes
校验提示文案
光芒星辰
校验提示文案
光芒星辰
校验提示文案
windshow
校验提示文案
值友8395399411
校验提示文案
值友2572414331
校验提示文案
sampoonpoon
校验提示文案
Tarantula
校验提示文案
墨色之月
校验提示文案
值友6482250497
校验提示文案