版权声明:本文为博主原创文章,转载请注明出处。 https://cloud.tencent.com/developer/article/1454352
小米路由器的官方固件优化不够好,很多人都出现限速、断流的现象。我之前也出现过限速的情况,最后没办法只能设置路由器定时重启。前几天突发奇想把定时重启关了,发现路由器居然连着好几天都没啥问题,我以为从此以后就能安心用了,可惜今天又出现了无法上网的情况。我实在是忍无可忍,遂寻找路由器的刷机办法。
小米路由器3刚出来的时候,由于闪存类型变为了NAND,导致很长时间都没有第三方刷机包出来。不过过了这么长时间,终于有了适配。本文参考了 OpenWrt网站小米路由器3页面 和 MassMesh维基 ,如果英语好的话可以直接看原文。另外由于是外网的教程,所以用到的网盘等资源可能无法正常访问,请 自备加速器 。另外再说一下,本文讨论的是 小米路由器3 的刷机教程,注意别弄错了。由于涉及到 终端linux命令 ,建议没有Linux使用经验的同学先去在虚拟机里练习一下基本命令,免得到时候手忙脚乱,命令输错了就麻烦了。最后注意一下,一旦获取了SSH权限乃至刷了机,就 失去了保修资格 ,大家在刷机之前还是要好好考虑一下。
不过最后我想了一下,还是把资源上传到了 百度网盘 ( 提取码: 3533)。文件夹点进去就能看到路由器刷机资源了,包含2.11.20降级包和潘多拉固件。潘多拉压缩包解压之后有几个文件夹,bootloader和firmware里面用最新的就可以了,stock文件夹用于刷回官方固件。
获取SSH权限
首先将路由器降级为2.11.20,降级包 在此 。降级方法很简单,在小米路由器管理界面中选择系统升级,手动上传ROM包即可。

然后正常设置并登录路由器管理界面,注意地址栏路径的STOK,注意这个参数很重要,后面经常要用到。当然现在也不用着急把它记下来,这个参数每次登录路由器的时候都会变,你只要记下来这次登录的stok就行了。

然后依次访问下面的URL,注意将替换为实际的字符串值。OLD_PASSWORD就是刚才设置路由器时候设置的密码,NEW_PASSWORD随便设,别忘了就行,新旧密码我都设置的8个1。 这几步操作涉及到字符串复制和替换,很有可能出错,大家在执行的时候一定要注意。
* http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqnetwork/set_wifi_ap?ssid=Xiaomi&encryption=NONE&enctype=NONE&channel=1%3Bnvram%20set%20ssh%5Fen%3D1%3B%20nvram%20commit
* http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqnetwork/set_wifi_ap?ssid=Xiaomi&encryption=NONE&enctype=NONE&channel=1%3Bsed%20%2Di%20%22%3Ax%3AN%3As%2Fif%20%5C%5B%2E%2A%5C%3B%20then%5Cn%2E%2Areturn%200%5Cn%2E%2Afi%2F%23tb%2F%3Bb%20x%22%20%2Fetc%2Finit.d%2Fdropbear
* http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqnetwork/set_wifi_ap?ssid=Xiaomi&encryption=NONE&enctype=NONE&channel=1%3B%2Fetc%2Finit.d%2Fdropbear%20start
* http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqsystem/set_name_password?oldPwd=<OLD_PASSWORD>&newPwd=<NEW_PASSWORD>
前三条命令比较安全,顺利的话应该返回
{"msg":"未能连接到指定WiFi(Probe timeout)","code":1616}
,如果不是这个结果可以重来一遍,直到返回结果是这个为止。其实如果学过计算机的应该可以看出来,这大概算是利用了旧版固件的漏洞,直接在地址栏上附带参数进行渗透攻击。最后一条命令应该返回的结果是
{"code":0}
这时候应该已经可以用SSH访问路由器了。然后需要一个可以SSH到Linux的软件,Windows 10的WSL、Git for Windows、MobaXterm等软件都可以。我这里用的是MobaXterm。然后用下面的命令SSH到路由器里面。SSH密码就是刚刚最后一条URL的NEW_PASSWORD。
ssh root@192.168.31.1
成功的话应该会显示出欢迎信息,并进入到了一个新终端。

成功进入到终端之后,依次输入下面的命令重新激活串口功能,最后用reboot命令重启路由器使之生效。建议一条一条复制。
nvram set flag_last_success=1
nvram set boot_wait=on
nvram set uart_en=1
nvram commit
reboot
刷入潘多拉固件
刷入bootloader
上面的步骤做完了之后,就可以刷入潘多拉固件了。固件下载地址在 Mega网盘 上,或者用我上传的百度网盘资源也行。下载并解压了潘多拉固件之后,在SSH软件中切进该目录,然后用scp命令将BootLoader复制到/tmp文件夹中。
scp pb-boot-xiaomi3-20181021-fd6329c.img root@192.168.31.1:/tmp
这里我改用了WSL,不过不管用啥SSH道理都一样,大家注意终端里的相对路径就行了。不懂这个的最好先去虚拟机里面建一个Linux练一练。

然后SSH登录到路由器上。
ssh root@192.168.31.1
然后依次执行以下命令。其实说白了就是切进/tmp目录把刚刚上传的固件刷到BootLoader里面去。刚刚scp上传的是哪个文件,这里刷的就是哪个文件。最后一条命令重启路由器,等到路由器再次启动,离大功告成也就差不多了。
cd /tmp