小米路由器的官方固件优化不够好,很多人都出现限速、断流的现象。我之前也出现过限速的情况,最后没办法只能设置路由器定时重启。前几天突发奇想把定时重启关了,发现路由器居然连着好几天都没啥问题,我以为从此以后就能安心用了,可惜今天又出现了无法上网的情况。我实在是忍无可忍,遂寻找路由器的刷机办法。
小米路由器3刚出来的时候,由于闪存类型变为了NAND,导致很长时间都没有第三方刷机包出来。不过过了这么长时间,终于有了适配。本文参考了OpenWrt网站小米路由器3页面和MassMesh维基,如果英语好的话可以直接看原文。另外由于是外网的教程,所以用到的网盘等资源可能无法正常访问,请自备加速器。另外再说一下,本文讨论的是小米路由器3的刷机教程,注意别弄错了。由于涉及到终端linux命令,建议没有Linux使用经验的同学先去在虚拟机里练习一下基本命令,免得到时候手忙脚乱,命令输错了就麻烦了。最后注意一下,一旦获取了SSH权限乃至刷了机,就失去了保修资格,大家在刷机之前还是要好好考虑一下。
不过最后我想了一下,还是把资源上传到了百度网盘,分享文件夹点进去就能看到路由器刷机资源了,包含2.11.20降级包和潘多拉固件。潘多拉压缩包解压之后有几个文件夹,bootloader和firmware里面用最新的就可以了,stock文件夹用于刷回官方固件。
获取SSH权限
首先将路由器降级为2.11.20,降级包在此。降级方法很简单,在小米路由器管理界面中选择系统升级,手动上传ROM包即可。
然后正常设置并登录路由器管理界面,注意地址栏路径的STOK,注意这个参数很重要,后面经常要用到。当然现在也不用着急把它记下来,这个参数每次登录路由器的时候都会变,你只要记下来这次登录的stok就行了。
然后依次访问下面的URL,注意将<STOK>替换为实际的字符串值。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
mtd write pb-boot-xiaomi3-20181021-fd6329c.img Bootloader
reboot
如果用ls命令看一下,可以发现/tmp里面东西还是挺多的。观察一下,固件上传成功就好。
刷入固件
上面的命令执行完之后,路由器会重启,等待4-5分钟左右。这时候路由器应该一直处于黄灯状态。
然后拔掉电源线来关闭路由器,找根曲别针插到路由器后面的RESET按钮上,不要松开,然后插上线重启路由器,路由器通电后等1-2秒钟在松开RESET,这时候路由器应该会处于黄灯闪烁的状态。然后浏览器打开192.168.1.1,应该会看到潘多拉恢复模式。
这时候就很好办了,点击浏览文件,选择PandoraBox Firmware里面的固件(形如*-sysupgrade.bin
的文件),然后点击恢复固件。
等待一段时间之后,就可以进入到路由器管理页面了,默认密码是admin。如此一来,潘多拉固件就成功刷入了!
刷回原厂固件
如果你觉得潘多拉固件不好用,还可以刷回原厂固件。原厂固件相关文件在Revert to Stock文件夹中。
- 首先进入潘多拉恢复模式,然后选择
openwrt-ramips-mt7620-xiaomi_miwifi-r3-squashfs-pb-boot.bin
文件并上传。 - 浏览器中登录192.168.1.1,不需要密码直接登录,然后在里面设置密码并开启SSH。
- 用scp命令将必要的文件(Bootloader.bin和kernel0.bin)传到/tmp目录中。
- 在SSH中执行以下命令。
cd /tmp
mtd write Bootloader.bin Bootloader
mtd write kernel0.bin kernel0_rsvd
reboot
- 等路由器重启之后,再次进入SSH,输入以下命令:
fw_setenv flag_try_sys2_failed 1
reboot
- 重启之后,路由器应该会显示为红灯闪烁状态,说明进入了恢复模式。然后准备一个FAT32格式的U盘,将miwifi.bin固件放入,然后插到路由器上。
- 按住RESET按钮1-2秒,直到红灯闪烁变为黄灯闪烁。
- 等待4-5分钟,然后登录192.168.31.1设置路由器。
潘多拉固件网络设置
我虽然是计算机专业的,学过计算机网络这门课程,不过也就是随便看看混过去的水平。不过就算我这样的,配置一般的路由器也是不在话下。因为这些路由器自带的固件设置一般都是简化过的。不过在配置潘多拉固件的时候真是难倒我了,我自己摸索了大半天也没弄明白。所以在我成功配置好后,我还是决定写点东西,免得有人和我一样弄不明白。
潘多拉固件里面功能也挺多的,如果遇到看不明白的选项,建议不要瞎改,让它保持默认即可。如果搞出问题了,按住RESET几秒钟,重置路由器,然后重头再来。另外我觉得潘多拉固件比较不方便的一点就是好像有些东西改了之后不会自动重启,需要我手动拔电源线。
另外在设置的时候也要明确自己的光猫和路由器作用,是光猫直连、路由器拨号,还是光猫拨号、路由器直连。我是路由器直连、光猫拨号的,所以理论上我只需要将路由器设置为DHCP,就直接有网了。但是由于光猫和路由器的默认IP都是192.168.1.1,导致了冲突,所以我这种情况需要将路由器IP改一下。
路由器IP设置
我这种情况需要修改一下路由器IP,如果你是路由器拨号,就不需要设置。在潘多拉固件里面找到接口设置,然后在LAN上点击修改。
然后将IPv4地址修改即可。本来我改为了小米路由器的默认IP地址192.168.31.1,不过修改之后发现有线网络居然连不上了,只能用手机WIFI来修改。所以最后还是改成了192.168.1.2 。另外保存之后可能需要手动重启路由器。
WAN设置
接下来就是WAN设置了,说简单点就是设置路由器拨号。可以看到还有一个WAN6,这是IPv6的设置,可惜我这里还没支持IPv6,所以也就不用管它了。直接点击WAN右边的修改按钮。
进入WAN设置之后,根据你的情况选择协议。如果是光猫里面设置好拨号,那么这里用DHCP客户端就可以了,只要保证IP地址不冲突即可。如果是路由器拨号,那么就在这里选择PPPoE。修改之后点击切换协议,网页就会刷新,然后输入相关信息即可。
无线设置
潘多拉默认已经设置好了双频WIFI,不过默认WIFI没有密码,所以我们还得自己修改。
以2.4G信道为例,点击右边的修改进入具体设置。基本设置里面可以修改WIFI名。
然后在无线安全里面设置密码,加密算法用安全性最高的WPA2-PSK,然后填写至少8位的WIFI密码,WPS模式有漏洞,禁用就好了,况且小米路由器3上面也没有WPS按键。
5G信道的设置方法类似,就不介绍了。