小米路由器 3G 解锁刷入 OpenWrt X-wrt(Netcap) 固件并配置多线多拨
最近在宿舍里办了两条 100Mbps 宽带,打算做个多线多拨叠加到 200Mbps,所以把手上的小米路由器 3G 刷成 OpenWrt 并配置了一下 macvlan。记录一下折腾的过程。
解锁小米路由器 SSH
在 这个页面 下载小米路由器开发版固件,这里我们选择 R3G 的固件,然后登陆到小米路由器的 管理后台,进入常用设置,选择手动升级,上传下载的开发版固件,路由器会自动刷入固件。当小米路由器自动重启后即完成刷入开发版固件。
下载 小米 WIFI 的手机客户端 并登陆你的小米账户,然后手机连接到小米路由器的 WIFI 上,会自动提示是否绑定,选择绑定,于是小米路由器就已经绑定到你的小米账户下面。
前往 小米路由器 SSH 权限获取 页面,登陆你的小米账号,同意小米路由器解锁的相关协议,就可以获取当前路由器的 SSH root 密码。下载页面上提供的对应的 miwifi_ssh.bin
文件,拷贝进一个格式化为 FAT32 的 U 盘的根目录下,按照页面上的指示解锁 SSH。
打开 SSH 终端(可以使用 WSL 或者 Putty 之类的)连接上小米路由器。这里我用 WSL(Ubuntu 18.04) 的终端为例:
$ ssh root@192.168.31.1
输入 root 密码以后,如果看到小米路由器的彩蛋,即说明连接成功:
刷入 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
,下文以此为例。
在终端中依次输入下面的指令(别忘了修改为你的 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
小米路由器会自动重启,当指示灯亮起为蓝色时说明刷入成功。
刷入 X-wrt(Netcap) 固件
X-wrt 固件是恩山无线论坛的 ptpt52 大佬基于 OpenWrt 制作的固件(原名 Netcap 固件),除了集成了 Netcap、macvlan 以外还内置了 Luci,这是 固件发布帖,相关信息可以在发布帖看。属于比较实用的固件。而且由于集成 macvlan,适合我们接下来实现多线多拨。
在 稳定版固件下载页 或者 开发版固件下载页,使用 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 的方式,以后刷固件都会用到。
选择「固件更新」,选择你方才下载的 Netcap 固件,确认刷入。然后根据 Breed 控制台的提示完成固件的刷入即可。
路由器重启后,WIFI 的 SSID 默认形如 X-WRT_XXXX
,WIFI 密码是 88888888
,管理后台(Luci)的地址是 192.168.15.1,Luci 的用户名是 root
,密码是 admin
。通过上述信息连接 WIFI 并登陆管理后台。
别忘了修改后台管理密码、WIFI 连接信息!
配置单线多拨
X-wrt 已经集成了傻瓜化的单线多拨界面,可以阅读固件作者提供的 多拨和负载均衡配置教程。
配置多线多拨
VLAN
在 Luci 中,在顶端导航栏中找到「网络 - 交换机」,确认两个 LAN 口和 WAN 口与页面上的 ethx
的对应关系。你只需要把上网口的网线分别插入不同的接口,根据页面上的提示就可以确定对应关系。在我的例子中,我的小米路由器 3G 上从左往右的三个接口的顺序是 LAN1、LAN2 和蓝色的 WAN。
由于小米路由器 3G 的 CPU 管理所有的 LAN 口和 WAN 口,而且网上也没有相关配置小米路由器 3G 的 VLAN 的教程,所以我自己摸索出了将两个 LAN 口都虚拟成 WAN 口的配置方法(看图):
配置的要领是:
- 新建一个配置,这样就有三行 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 下面)。
负载均衡
两条网线都拨号成功了,接下来配置负载均衡。
在「网络 - 负载均衡」的「接口」选项卡中,删除除 wan
以外的配置。然后编辑 wan
配置网络测活。如果不会或者偷懒可以保留默认,不过「跟踪的 IP 地址」推荐设置一些国内的公共 DNS 比如 119.29.29.29
114.114.114.114
1.2.4.8
223.5.5.5
。你应该还会注意到,这里的网关跃点是 40
。
点击「保存并应用」后会回到「接口」选项卡,在列表的下面的输入框中输入 WAN2
并「添加」,配置和之前的类似,但是你会发现这里的网关跃点是 41
。如果是这样,说明负载均衡的接口配置就没有问题。
接下来前往「成员」选项卡,这里我们要新建两条规则,分别是 wan1_only
和 wan2_only
。两者的跃点数要一样,比重根据你两条网线的带宽情况定(如果两条宽带运营商相同并且带宽相等,那么比重也相等即可)。
如果你觉得其它默认规则烦人,你可以把其余的都删掉。
配置完「成员」就可以前往「策略」选项卡。直接编辑 balanced
条目,使用的成员选择 wan1_only
和 wan2_only
,备用成员保持默认的「不可达(拒绝)」即可。
最后需要的配置的是「规则」选项卡。删除所有的规则,然后在下面的输入框输入 default_rules
、点击「添加」新增一条规则。
在规则配置页面,除「目标 IP 地址」输入 0.0.0.0/24
、分配的策略选择 balanced
以外,其余全部保留默认配置、空白的保留空白,点击「保存并应用」。
如果组合这个编辑页面的各个选项可以编写不同的模式。上文的设定直接就是对应全部流量的规则。
好了,接下来全部的连接应该会均衡地分配到两条网线上。你可以开始正常上网,一段时间后回到 Luci 的「网络 - 接口」页面查看两条 WAN 口分别分配到多少流量是不是相对平衡。