无需其他Openwrt路由器,使用任意带无线网的Linux机器解锁红米AX6路由器的SSH
最近小米有品上再次开始售卖起了红米AX6,由于这是小米出品的,能刷Openwrt的机器中较为便宜的一款,便购买了一台。根据网上的一些帖子,解锁AX6的SSH需要额外找一台运行Openwrt的路由器来跑脚本。不过经过研究,理论上任何能够开Wi-Fi热点(AP),且能够配置静态IP的设备都能用于路由器的解锁。
准备
- 一台能够开Wi-Fi热点(AP),且能够配置静态IP的设备。(笔者使用了安装Ubuntu的树莓派开热点,理论上Linux虚拟机+能够开热点的无线网卡或者Windows电脑直接开热点都能达到类似的效果)。
- 设备上需要能运行web服务器(笔者用的nginx),或者能运行python(能监听本地端口即可)
- 未解锁的红米AX6路由器。
- (可选)随便找台路由器,让操作的电脑,AX6和树莓派处在同一内网内方便ssh操作。
启用树莓派的热点
参考其他作者写的在openwrt上运行的脚本(Github Link),解锁所需的操作可被简化为设置一个静态IP,网关为169.254.31.1
的无线网络,同时在网关上开一个接受POST的api server,路径为/cgi-bin/luci/api/xqsystem/token
。
这一步只要做到开启热点和配置静态IP即可。配置静态IP的软件与Linux的发行版有关,笔者的树莓派使用的是netplan
。具体步骤可请参考自己的Linux使用的网络配置软件。
使用hostapd
配置热点
(如果使用的是外接网卡,可自行解决驱动等问题)
首先安装hostapd
:
1 | apt install hostapd |
建立热点配置文件 /etc/hostapd/hostapd.conf
(这里使用的SSID为xiaomirouterssh
,密码为xiaomi12345
,可自行修改:
1 | interface=wlan0 |
之后修改/etc/default/hostapd
,在里面添加一行:
1 | DAEMON_CONF="/etc/hostapd/hostapd.conf" |
之后启动使用hostpad
开的热点:
1 | systemctl unmask hostapd |
配置静态IP
笔者的树莓派使用的网络配置软件为netplan。
修改/etc/netplan/50-cloud-init.yaml
,加一个wlan0
的接口,配置静态IP为169.254.31.1/24
:
1 | network: |
之后使用netplan generate 50-cloud-init.yaml && netplan apply
应用配置。
配置树莓派上的api server
方法1:nginx
参考配置文件如下:
1 | server { |
同时将解锁用的payload放在/opt/test/response.json
下:
1 | {"token":"; nvram set ssh_en=1; nvram set uart_en=1; nvram set boot_wait=on; nvram commit; uci set wireless.@wifi-iface[0].key=`mkxqimage -I`; uci commit; sed -i 's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear; /etc/init.d/dropbear start;","code":0} |
方法2:Python
先保证系统内安装了flask
,requests
,json
这几个包。
并运行下面的python脚本:
1 | # app.py |
1 | python3 app.py |
如果运行成功,可以看到:
1 | * Serving Flask app 'app' (lazy loading) |
这样的log,这时可以用curl确认一下运行的正不正常(如果返回了上方payload中的那个json就是正常的):
1 | curl -X POST http://169.254.31.1/cgi-bin/luci/api/xqsystem/token |
解锁SSH
这部分写的比较简单,如果有不清楚的地方可以参考这篇文章:
首先,登入AX6的后台,找到url里的STOCK
(
http://192.168.31.1/cgi-bin/luci/;stok=xxx
其中的xxx
即为 STOK)
然后 依次 访问下面的 URL(STOK 不含尖括号):
1 | http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/extendwifi_connect?ssid=xiaomirouterssh&password=xiaomi12345 |
如出现 connect success
则代表路由 B 已成功连接到路由 A,可以继续访问下一个 URL:
1 | http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqsystem/oneclick_get_remote_token?username=xxx&password=xxx&nonce=xxx |
如出现下图中的内容,则代表 SSH 开启成功
随后打开管理界面,查看5GHz的Wi-Fi的密码,5GHz Wi-Fi的密码即为路由器ssh的密码。可通过ssh [email protected]
登录。
至此就可以衔接其他作者写的刷机教程了。
固化SSH(可选)
引用这篇文章里的操作:
进入源码(前面提到的 https://github.com/shell-script/unlock-redmi-ax3000/ ,可以clone下来备用)目录,在电脑上执行下列命令:
1
2 scp ax3000.sh [email protected]:/etc/ax3000.sh
scp fuckax3000 [email protected]:/etc/fuckax3000然后通过 SSH 连接,执行下列命令:
1 sh /etc/ax3000.sh dump
脚本会自动导出备份数据,请通过下面的地址保存以防万一:
1 http://192.168.31.1/backup/log/bdata_mtd9.img\5. 固化 Telnet/SSH 访问权限
默认情况下,当路由器恢复出厂设置或者升级后,相关权限将会丢失,因此我们需要额外的操作以保留它们
通过 SSH 连接路由 B,执行下面的命令:
1
2
3 sh /etc/ax3000.sh unlock
路由器会自行重启,重启后执行
sh /etc/ax3000.sh hack\6. 挂载 overlay 空间
方便安装各种软件包和你想要的一些功能
通过 SSH 连接路由 B,执行下面的命令:
1
2
3 sh /etc/ax3000.sh mount
自行重启路由器,然后执行
sh /etc/ax3000.sh keep\7. (可选)更换 dists 源
小米固件内的 dists 源已经非常老旧且不推荐使用,更换到最新源即可享受在线安装 xray-core 等权利
将路由 B 的/etc/opkg/distfeeds.conf
文件更改为如下内容:
1
2
3
4 src/gz openwrt_base http://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/base
src/gz openwrt_luci http://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/luci
src/gz openwrt_packages http://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/packages
src/gz openwrt_routing http://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/routing运行
opkg update
后即可愉快食用。
参考资料
https://github.com/shell-script/unlock-redmi-ax3000/
《红米 AX3000 (AX6) 解锁 SSH 教程》