比较费心的折腾 篇二:小米路由器青春版折腾负载均衡
2020-06-04 11:00:23
3点赞
10收藏
8评论
创作立场声明:本文的核心目的是对于比较久远的硬件进行折腾,提及的软件可以在官网、软件包或者github找到。
开篇预警
本文截图较多,但是前期操作不可复制,也没有截图下来,所以就真的没法保留了。本文的具体操作是可以自己搜索到的,作者也能保证本文的具体操作都是走过了一遍,确保没有问题。
本文其实是一个不完全版本,等七月份会有补充截图,并把这段话删除。如果有玩过openwrt的,对于其中的操作应该不会陌生;如果是linux基础比较好的,在没有完全截图引导下也可以以文字问辅助完成整套操作(才不是大作业没时间了没顾及截图
)。
为什么要折腾嵌入式系统的大作业
感觉网速叠加还是非常有用的
这里面会涉及到如下内容:路由器刷机、telnet漏洞、mwan3负载均衡、macvlan虚拟网卡。
小米路由器青春版介绍
小米路由器青春版,具体型号R1CL,CPU是MT7628AN,575MHz的速度,内存64M,闪存16M,micro-USB接口5V1A供电,100Mbps的WAN和LAN。
这个路由器其实比较早了,感觉还挺有折腾的价值。
打开telnet、ssh
打开telnet
这里实际上是利用了一个web漏洞才可以打开telnet,同时后续版本已经封了这个漏洞,需要刷入非常早期的开发板固件才可以调用对应API。
在初次设置完成之后,会进入一个类似于miwifi.com/cgi-bin/luci/;stok=xxx/web/home#router这样的网址,此时需要把stok=xxx后面的内容换成/api/xqsystem/set_name_password?oldPwd=当前路由器管理密码&newPwd=新密码,这样可以重新设置后续ssh、telnet的root密码,否则root的密码和当前路由管理密码不一样照样进不去。成功的返回码是{code:0}。
在刚才的基础之上,把原有部分换成/api/xqnetwork/set_wifi_ap?ssid=tianbao& encryption=NONE&enctype=NONE&channel=1%3B%2Fusr%2Fsbin%2Ftelnetd,这样才能打开telnet模式。这一步时间大约需要1分钟,不要急着刷新。成功的返回值是{"msg":"未能连接到指定WiFi(Probe timeout)","code":1616},返回码有可能不同。
打开ssh
之后利用powershell、linux的bash,putty等等支持telnet的软件进入路由器,IP默认情况下是192.168.31.1,用户名root,密码是刚才设置的新密码。进去以后直接使用三个命令,可能需要等一段时间才能结束。sed -i ":x;N;s/if [.*; thenn.*return 0n.*fi/#tb/;b x" /etc/init.d/dropbear
/etc/init.d/dropbear start
nvram set ssh_en=1; nvram commit
刷入breed、openwrt
刷入breed
在打开ssh之后,用ssh登录路由器,IP、用户名和密码不变。在另一个窗口用scp命令上传breed.in作为刷入的文件,或者使用WinSCP的scp传输协议连接到路由器,上传到/tmp/即可(如果路径不一样,需要修改下面的命令)。
之后使用mtd命令刷入。刷机需要等待一段时间,并且会重启。mtd -r write /tmp/breed.bin Bootloader
进入breed的方法是断电后按住reset键的同时插入电源(要先按住再插入电源)。第一次刷完之后重启会自动进入。刷入breed不会影响原系统。进入breed时,只有有线才可以连接到路由器,无线不开启,IP针对不同的包不一样,我用的是192.168.1.1。
刷入openwrt
电脑有线连接之后可以打开这个界面,默认在“系统信息”选项卡,上传openwrt固件即可,会要求二次确认的。
本次刷机也需要一定时间和重启,重启之后可以按照相同方法回到breed。
breed界面
安装macvlan、mwan3与设置
在一个单WAN口的地方怎么可能做到负载均衡?很显然这是多个网口的事情,于是我们可以做类似于单线多拨的操作,通过虚拟网卡和负载均衡达到这样的效果。
更新与安装macvlan、mwan3
首先使用ssh登录路由器Terminal,然后使用opkg更新已有库文件。opkg update
opkg list-upgradable
opkg upgrade *(这里没有*这个符号,仅仅用于指代你看到的所有软件包)
希望zdm能给代码提供一个比较好的支持(markdown大法好)
之后下载安装macvlan、mwan3和web界面设置。opkg install kmod-macvlan mwan3 luci-app-mwan3
产生新的网卡
用ip命令生成网卡。ip link add link eth0.2 name veth0 type macvlan
ifconfig veth0 up
检查可以用ifconfig查询veth0是否出现。
用ifconfig检查一下虚拟化是否成功
在Network->Interfaces点击Add new interface生成接口并设置,此时才可以拨号。记得把网关越点设置到和其他都不一样(默认是0)。
vwan0的设置1-网关越点
vwan0的设置2-划分物理接口
vwan0的设置3-划分VLAN
负载均衡
打开负载均衡页面,可以发现默认自带一系列规则,但是这些规则会导致在关闭默认wan之后无法通过其他wan上网,但是电脑本身还是处在联通状态。正是因此才需要调整
删除掉Interfaces标签页下的所有的东西,新增wan和vwan0,Enabled选择启用,Metric填入之前设计好的网关越点。Members也全部删除,新增wan和vwan0,权重一样。最终在policies的策略全部删除,只留下balanced,成员选择wan、vwan0,last resort选择default。
给mwan添加interfaces
删除默认规则后,给mwan设置仅有的balance规则
至此,所有设置完成。如果需要添加多个的话只需要多写几个vwan即可。
实际体验与方案的不足
通常来说有mac就可以拿到IP,所以在有mac和IP的情况下,只需要验证关闭一部分的情况下依旧可以连通网络,和在所有都联通的情况下,上网流量的分配大致按照预计进行。本实验中依旧只用wan和vwan0。关闭wan或者vwan0,网页打开bilibili.com,查看能否打开主页。如果wan关闭以后无法打开,可能是因为你的mwan3安装并且没有设置好;如果是vwan0关闭也是同理,也有可能是因为wan本身网络就不对。
两者都打开,随意打开一个视频(或者能观察到明显网络流量的其他动作,比如下载),过一段时间观察两者的分配情况。
最后的结果是,通过两个端口都可以单独上网;同时通过两个端口上网时,可以看到端口的流量是差不多的,基本做到了负载均衡。
这个方案其实有一个问题:在刷入openwrt之后,/etc/rc.local写入ip link命令会不生成网卡,但是把那段命令的eth0.2改成eth0就可以做到生成虚拟网卡,但是无法拿到IP(显然)。这显然是涉及到eth0.2生成时间的问题,就需要花费时间去阅读启动shell才可以定位到对应位置,已知的是从S95done这一块调用的rc.local,直接从后面开始应该没有问题。