Sukka's Blog

童话只美在真实却从不续写

  1. 1. 解锁小米路由器 SSH
  2. 2. 刷入 Breed 不死控制台
  3. 3. 刷入 Netcap 固件
  4. 4. 配置多线多拨
    1. 4.1. VLAN
    2. 4.2. 添加 WAN 口
    3. 4.3. 负载均衡

最近在宿舍里办了两条 100Mbps 宽带,打算做个多线多拨叠加到 200Mbps,所以把手上的小米路由器 3G 刷成 Openwrt 并配置了一下 macvlan。记录一下折腾的过程。

解锁小米路由器 SSH

这个页面 下载小米路由器开发版固件,这里我们选择 R3G 的固件,然后登陆到小米路由器的 管理后台,进入常用设置,选择手动升级,上传下载的开发版固件,路由器会自动刷入固件。当小米路由器自动重启后即完成刷入开发版固件。

miwifi-flash-xiaoqiang.png

下载 小米 WIFI 的手机客户端 并登陆你的小米账户,然后手机连接到小米路由器的 WIFI 上,会自动提示是否绑定,选择绑定,于是小米路由器就已经绑定到你的小米账户下面。

前往 小米路由器 SSH 权限获取 页面,登陆你的小米账号,同意小米路由器解锁的相关协议,就可以获取当前路由器的 SSH root 密码。下载页面上提供的对应的 miwifi_ssh.bin 文件,拷贝进一个格式化为 FAT32 的 U 盘的根目录下,按照页面上的指示解锁 SSH。

miwifi-ssh-root.png

打开 SSH 终端(可以使用 WSL 或者 Putty 之类的)连接上小米路由器。这里我用 WSL(Ubuntu 18.04) 的终端为例:

$ ssh root@192.168.31.1

输入 root 密码以后,如果看到小米路由器的彩蛋,即说明连接成功:

miwifi-ssh-terminal.png

刷入 Breed 不死控制台

在使用 SSH 干坏事之前,要先做好备份。在终端中输入 cat /proc/mtd 查看分区情况:

root@XiaoQiang:~# cat /proc/mtd
dev: size erasesize name
mtd0: 07f80000 00020000 "ALL"
mtd1: 00080000 00020000 "Bootloader"
mtd2: 00040000 00020000 "Config"
mtd3: 00040000 00020000 "Bdata"
mtd4: 00040000 00020000 "Factory"
mtd5: 00040000 00020000 "crash"
mtd6: 00040000 00020000 "crash_syslog"
mtd7: 00040000 00020000 "reserved0"
mtd8: 00400000 00020000 "kernel0"
mtd9: 00400000 00020000 "kernel1"
mtd10: 02000000 00020000 "rootfs0"
mtd11: 02000000 00020000 "rootfs1"
mtd12: 03580000 00020000 "overlay"
mtd13: 012a6000 0001f000 "ubi_rootfs"
mtd14: 030ec000 0001f000 "data"

我们需要备份前面 13 个分区(第 14 个分区可能提示占用而不能被备份)。在小米路由器上插入一个格式化为 FAT32 格式的 U 盘(你可以继续用之前解锁 SSH 的 U 盘),然后在终端执行 df -h 查看你的 U 盘的路径(通常形如 /extdisks/sdax)。我的是 /extdisks/sda1,下文以此为例。

miwifi-extdisk-path.png

在终端中依次输入下面的指令(别忘了修改为你的 U 盘的路径):

dd if=/dev/mtd0 of=/extdisks/sda1/backup/ALL.bin
dd if=/dev/mtd1 of=/extdisks/sda1/backup/Bootloader.bin
dd if=/dev/mtd2 of=/extdisks/sda1/backup/Config.bin
dd if=/dev/mtd3 of=/extdisks/sda1/backup/Bdata.bin
dd if=/dev/mtd4 of=/extdisks/sda1/backup/Factory.bin
dd if=/dev/mtd5 of=/extdisks/sda1/backup/crash.bin
dd if=/dev/mtd6 of=/extdisks/sda1/backup/crash_syslog.bin
dd if=/dev/mtd7 of=/extdisks/sda1/backup/reserved0.bin
dd if=/dev/mtd8 of=/extdisks/sda1/backup/kernel0.bin
dd if=/dev/mtd9 of=/extdisks/sda1/backup/kernel1.bin
dd if=/dev/mtd10 of=/extdisks/sda1/backup/rootfs0.bin
dd if=/dev/mtd11 of=/extdisks/sda1/backup/rootfs1.bin
dd if=/dev/mtd12 of=/extdisks/sda1/backup/overlay.bin
dd if=/dev/mtd13 of=/extdisks/sda1/backup/ubi_rootfs.bin
dd if=/dev/mtd14 of=/extdisks/sda1/backup/data.bin

当你运行到最后一个是可能会遇到以下报错提示:

dd: can't open '/dev/mtd14': Device or resource busy

这个无所谓,我们只需要备份前 13 个分区就行,最后一个分区没有备份的必要。

如果你还在使用 MIWIFI 的官方固件,需要还原上述备份,你可以使用下述指令;当然现在我们不需要执行这些操作:

mtd write /extdisks/sda1/backup/Bootloader.bin Bootloader
mtd write /extdisks/sda1/backup/Config.bin Config
mtd write /extdisks/sda1/backup/Bdata.bin Bdata
mtd write /extdisks/sda1/backup/Factory.bin Factory
mtd write /extdisks/sda1/backup/crash.bin crash
mtd write /extdisks/sda1/backup/crash_syslog.bin crash_syslog
mtd write /extdisks/sda1/backup/reserved0.bin reserved0
mtd write /extdisks/sda1/backup/kernel0.bin kernel0
mtd write /extdisks/sda1/backup/kernel1.bin kernel1
mtd write /extdisks/sda1/backup/rootfs0.bin rootfs0
mtd write /extdisks/sda1/backup/rootfs1.bin rootfs1
mtd write /extdisks/sda1/backup/overlay.bin overlay
mtd write /extdisks/sda1/backup/ubi_rootfs.bin ubi_rootfs
# 如果你备份了 data,你可以继续执行下面的指令还原 data
mtd write /extdisks/sda1/backup/data.bin data

备份完成后为小米路由器 3G 开始刷入 Breed 不死控制台:

cd /tmp && wget https://breed.hackpascal.net/breed-mt7621-xiaomi-r3g.bin
mtd -r write breed-mt7621-xiaomi-r3g.bin Bootloader

Breed 控制台的下载地址是 HTTPS 链接,所以在执行第一条命令时就有可能出现下述报错:

wget: not an http or ftp url: https://breed.hackpascal.net/breed-mt7621-xiaomi-r3g.bin

如果出现这个问题,就把 U 盘插到电脑上,在电脑上下载小米路由器 3G 的 Breed 不死控制台固件并重命名为 breed.bin,在 U 盘中新建 breed 文件夹,把 breed.bin 复制到 U 盘的 breed 目录之中。然后把 U 盘插回到小米路由器上,并在终端直接执行下面的指令(依然要注意你 U 盘的路径):

mtd -r write /extdisks/sda1/breed/breed.bin Bootloader

小米路由器会自动重启,当指示灯亮起为蓝色时说明刷入成功。

刷入 Netcap 固件

Netcap 固件是恩山无线论坛的 ptpt52 大佬基于 OpenWrt 制作的固件,除了集成了 Netcap、macvlan 以外还内置了 Luci,这是 固件发布帖,相关信息可以在发布帖看。属于比较实用的固件。而且由于集成 macvlan,适合我们接下来实现多线多拨。

固件下载页(固件作者没有配 SSL,需要忽略错误访问),使用 Ctrl/Command + F 在页面中搜索 r3g 即可找到适配了小米路由器 3G 的三种固件。这里我们需要下载带 breed 字样的固件,因为接下来需要会直接用 Breed 不死控制台刷。

这时需要断开小米路由器的电源。确保你的电脑的有线网设置了 DHCP 自动获取 IP 地址(Windows 在「控制面板 - 网络与共享中心 - 更改适配器设置 - 以太网 - 属性 - TCP/IPv4」中全部选择自动),用网线将你的电脑的 RJ45 口和小米路由器的 WAN 口连接,然后用尖锐物按下小米路由器的 reset 按钮不放、同时接上电源,当路由器的灯开始闪烁时松开 reset,在浏览器上中访问 192.168.1.1 就可以看到 Breed 不死控制台了。

上述步骤就是进入小米路由器的 Bootloader 的方法,在之前的步骤中我们将 Breed 不死控制台刷入了 Bootloader 分区,所以上述步骤就是进入 Breed 的方式,以后刷固件都会用到。

miwifi-breed-ui.png

选择「固件更新」,选择你方才下载的 Netcap 固件,确认刷入。然后根据 Breed 控制台的提示完成固件的刷入即可。

路由器重启后,WIFI 的 SSID 默认形如 NATCAP_XXXX,WIFI 密码是 88888888,管理后台(Luci)的地址是 192.168.15.1,Luci 的用户名是 root,密码是 admin。通过上述信息连接 WIFI 并登陆管理后台。

别忘了修改后台管理密码、WIFI 连接信息!

配置多线多拨

VLAN

在 Luci 中,在顶端导航栏中找到「网络 - 交换机」,确认两个 LAN 口和 WAN 口与页面上的 ethx 的对应关系。你只需要把上网口的网线分别插入不同的接口,根据页面上的提示就可以确定对应关系。在我的例子中,我的小米路由器 3G 上从左往右的三个接口的顺序是 LAN1、LAN2 和蓝色的 WAN。

miwifi-netcap-vlan.png

由于小米路由器 3G 的 CPU 管理所有的 LAN 口和 WAN 口,而且网上也没有相关配置小米路由器 3G 的 VLAN 的教程,所以我自己摸索出了将两个 LAN 口都虚拟成 WAN 口的配置方法(看图):

miwifi-netcap-vlan-config.png

配置的要领是:

  • 新建一个配置,这样就有三行 VLAN
  • CPU(eth0) 三个都需要配置 已标记
  • 确保三行中每行中有且只有一个 未标记,而且三个接口的三列中每列也有且只有一个 未标记,剩下的都设置为

这三行从上往下分别对应的是 eth0.1 eth0.2 eth0.3。记住他们分别和哪个接口对应。

添加 WAN 口

接着访问「网络 - 接口」,可以看到默认带了 LAN WAN WAN6 三个配置。我们首先编辑 WAN 的配置,在「基本设置」选项卡中选择拨号方式并填入相关连接信息;在「高级设置」选项卡中你可以自行修改配置,这里只需要着重注意「使用网关跃点」的配置,填入 40;在「物理设置」中分配 eth0.1,点击「保存并应用」。将网线插入 eth0.1 对应的接口(不记得对应关系了?不是让你记住的了?赶紧浏览器新建一个标签页去「网络 - 交换机」再看看),看看能不能拨号成功。
接下来添加第二条网线。点击「返回至概况」回在「网络 - 接口」中点击「添加新接口」,名称使用 WAN2,「新接口的协议」取决于你的拨号方式,「在多个接口上创建桥接」不要勾选,「包括以下接口」选择 eth0.2。确认以后会进入 WAN2 的配置页面。在「基本设置」选项卡中填入相关连接信息;在「高级设置」选项卡中注意「使用网关跃点」的配置填入 41(第三个 WAN 口就 42),「防火墙设置」中选择 WAN 口,然后「保存并应用」并将网线插入 eth0.2 对应的接口。

点击「返回至概况」回到「网络 - 接口」,你应该可以看到两条网线的 WAN 口应该都已经拨号成功了(分配到的不同的 IP 通常在同一个 /24 下面)。

miwifi-netcap-network.png

负载均衡

两条网线都拨号成功了,接下来配置负载均衡。
在「网络 - 负载均衡」的「接口」选项卡中,删除除 wan 以外的配置。然后编辑 wan 配置网络测活。如果不会或者偷懒可以保留默认,不过「跟踪的 IP 地址」推荐设置一些国内的公共 DNS 比如 119.29.29.29 114.114.114.114 1.2.4.8 223.5.5.5 。你应该还会注意到,这里的网关跃点是 40

点击「保存并应用」后会回到「接口」选项卡,在列表的下面的输入框中输入 WAN2 并「添加」,配置和之前的类似,但是你会发现这里的网关跃点是 41。如果是这样,说明负载均衡的接口配置就没有问题。

miwifi-mwan.png

接下来前往「成员」选项卡,这里我们要新建两条规则,分别是 wan1_onlywan2_only。两者的跃点数要一样,比重根据你两条网线的带宽情况定(如果两条宽带运营商相同并且带宽相等,那么比重也相等即可)。
如果你觉得其它默认规则烦人,你可以把其余的都删掉。

配置完「成员」就可以前往「策略」选项卡。直接编辑 balanced 条目,使用的成员选择 wan1_onlywan2_only,备用成员保持默认的「不可达(拒绝)」即可。

最后需要的配置的是「规则」选项卡。删除所有的规则,然后在下面的输入框输入 default_rules 、点击「添加」新增一条规则。
在规则配置页面,除「目标 IP 地址」输入 0.0.0.0/24 、分配的策略选择 balanced 以外,其余全部保留默认配置、空白的保留空白,点击「保存并应用」。

miwifi-mwan-rules.png

如果组合这个编辑页面的各个选项可以编写不同的模式。上文的设定直接就是对应全部流量的规则。

好了,接下来全部的连接应该会均衡地分配到两条网线上。你可以开始正常上网,一段时间后回到 Luci 的「网络 - 接口」页面查看两条 WAN 口分别分配到多少流量是不是相对平衡。

本文作者 : Sukka
本文采用 CC BY-NC-SA 4.0 许可协议。转载和引用时请注意遵守协议!
本文链接 : https://blog.skk.moe/post/miwifi-r3g-mwan/

本文最后更新于 天前,文中所描述的信息可能已发生改变