最近小米有品上再次开始售卖起了红米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
。
netplan
。具体步骤可请参考自己的Linux使用的网络配置软件。使用hostapd
配置热点
(如果使用的是外接网卡,可自行解决驱动等问题)
首先安装hostapd
:
apt install hostapd
建立热点配置文件 /etc/hostapd/hostapd.conf
(这里使用的SSID为xiaomirouterssh
,密码为xiaomi12345
,可自行修改:
interface=wlan0
driver=nl80211
ssid=xiaomirouterssh
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=xiaomi12345
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
之后修改/etc/default/hostapd
,在里面添加一行:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
之后启动使用hostpad
开的热点:
systemctl unmask hostapd
systemctl start hostapd
配置静态IP
笔者的树莓派使用的网络配置软件为netplan。
修改/etc/netplan/50-cloud-init.yaml
,加一个wlan0
的接口,配置静态IP为169.254.31.1/24
:
network:
ethernets:
eth0:
dhcp4: true
optional: true
wlan0:
dhcp4: no
addresses:
- 169.254.31.1/24
version: 2
之后使用netplan generate 50-cloud-init.yaml && netplan apply
应用配置。
配置树莓派上的api server
方法1:nginx
参考配置文件如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
location /cgi-bin/luci/api/xqsystem/token {
if ($request_method != POST) { return 404; }
return 405;
error_page 405 =200 /test/response.json;
}
location = /test/response.json {
root /opt;
}
}
同时将解锁用的payload放在/opt/test/response.json
下:
{"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脚本:
# app.py
from flask import Flask, request, jsonify
app = Flask(__name__)
payload = {"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}
@app.post("/cgi-bin/luci/api/xqsystem/token")
def return_payload():
return payload, 200
if __name__ == '__main__':
app.run(host='169.254.31.1', port=80)
python3 app.py
如果运行成功,可以看到:
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://169.254.31.1/ (Press CTRL+C to quit)
这样的log,这时可以用curl确认一下运行的正不正常(如果返回了上方payload中的那个json就是正常的):
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 不含尖括号):
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/extendwifi_connect?ssid=xiaomirouterssh&password=xiaomi12345
如出现 connect success
则代表路由 B 已成功连接到路由 A,可以继续访问下一个 URL:
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下来备用)目录,在电脑上执行下列命令:
scp ax3000.sh [email protected]:/etc/ax3000.sh scp fuckax3000 [email protected]:/etc/fuckax3000
然后通过 SSH 连接,执行下列命令:
sh /etc/ax3000.sh dump
脚本会自动导出备份数据,请通过下面的地址保存以防万一:
http://192.168.31.1/backup/log/bdata_mtd9.img
\5. 固化 Telnet/SSH 访问权限 默认情况下,当路由器恢复出厂设置或者升级后,相关权限将会丢失,因此我们需要额外的操作以保留它们 通过 SSH 连接路由 B,执行下面的命令:
sh /etc/ax3000.sh unlock 路由器会自行重启,重启后执行 sh /etc/ax3000.sh hack
\6. 挂载 overlay 空间 方便安装各种软件包和你想要的一些功能 通过 SSH 连接路由 B,执行下面的命令:
sh /etc/ax3000.sh mount 自行重启路由器,然后执行 sh /etc/ax3000.sh keep
\7. (可选)更换 dists 源 小米固件内的 dists 源已经非常老旧且不推荐使用,更换到最新源即可享受在线安装 xray-core 等权利 将路由 B 的
/etc/opkg/distfeeds.conf
文件更改为如下内容: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
后即可愉快食用。