红米Redmi AX6000 刷 OpenWrt

最近新买了个红米路由器,由于现在 OpenWrt 系统这么火,想着给新路由器也刷一个,发挥它的最大用处,本文记录的是 UBoot 大分区版的 OpenWrt 刷机过程。

准备工作:

  1. 一根网线,连接电脑与路由器
  2. 卡针,用于初始化路由器 Reset 键
  3. Uboot 与 OpenWrt 系统固件,百度网盘链接:https://pan.baidu.com/s/1v7Fgmhko0kR6ZysMbcguuw?pwd=jqem
    提取码:jqem

本文参考:

视频:https://youtu.be/zUvNv61Ylno

文档:https://www.miaoer.xyz/posts/network/flash-redmi-ax6000

一、开启 Telnet

获取自己家路由器管理端地址栏中的 stok 值,如 stok=3df48a1976770ebb80cfcbe254ac3379,将下述网址替换成自己的后,输入浏览器执行。该值重启路由器后会更改,注意变化。

1.1 开启开发模式

http://192.168.31.1/cgi-bin/luci/;stok=3df48a1976770ebb80cfcbe254ac3379/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}

1.2 重启路由器

http://192.168.31.1/cgi-bin/luci/;stok=3df48a1976770ebb80cfcbe254ac3379/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

浏览器返回 {"code":0}

1.3 永久开启 telnet

等待路由器重启完成,重新访问路由器管理端,再次获取新生成的 stok 值。

http://192.168.31.1/cgi-bin/luci/;stok=a3418457d10632ebc8916c4a6f88dd53/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

浏览器返回 {"code":0}

1.4 重启路由器

http://192.168.31.1/cgi-bin/luci/;stok=a3418457d10632ebc8916c4a6f88dd53/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

浏览器返回 {"code":0}

二、开启 SSH

上一步骤开启了 Telnet 功能,接下来使用 telnet 连接路由器系统,手动开启 SSH 服务。注意协议、主机与端口号,默认是跟我一样。

image-20230226135519661

登录后界面

image-20230226135913204

2.1 修改 root 默认密码

将 root 密码修改为 admin

echo -e 'admin\nadmin' | passwd root 

2.2 固化 SSH

nvram set ssh_en=1
nvram set telnet_en=1
nvram set uart_en=1
nvram set boot_wait=on
nvram commit

2.3 永久开启 SSH

直接运行网上大神编写好的一键脚本

cd /tmp && curl --silent -O https://fastly.jsdelivr.net/gh/miaoermua/unlock-redmi-ax6000@main/setup.sh && chmod +x setup.sh && ./setup.sh
  • 防止连接失效,setup.sh 脚本内容如下
###
 # @Author: ttimochan
 # @Date: 2022-12-21 21:16:34
 # @LastEditors: ttimochan
 # @LastEditTime: 2023-01-22 18:47:49
 # @FilePath: /unlock-redmi-ax6000/setup.sh
### 
#!/bin/bash
if [ $(id -u) != "0" ]; then
    echo "Error: You must be root to run this script, please use root user"
    exit 1
fi
nvram_set(){
    echo -e 'admin\nadmin' | passwd root
    nvram set ssh_en=1
    nvram set telnet_en=1
    nvram set uart_en=1
    nvram set boot_wait=on
    nvram commit
}
set_init(){
    sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear
    /etc/init.d/dropbear restart
}
uci_readly(){
    mkdir /data/auto_ssh
    cd /data/auto_ssh
    curl -O https://fastly.jsdelivr.net/gh/lemoeo/AX6S@main/auto_ssh.sh
    if [ ! -f auto_ssh.sh ]; then
        echo "Error: auto_ssh.sh download failed"
        exit 1
    fi
    chmod +x auto_ssh.sh
}
uci_start(){
    uci set firewall.auto_ssh=include
    uci set firewall.auto_ssh.type='script'
    uci set firewall.auto_ssh.path='/data/auto_ssh/auto_ssh.sh'
    uci set firewall.auto_ssh.enabled='1'
    uci commit firewall
    uci set system.@system[0].timezone='CST-8'
    uci set system.@system[0].webtimezone='CST-8'
    uci set system.@system[0].timezoneindex='2.84'
    uci commit
}
main(){
    
    nvram_set

    if [ $(nvram get ssh_en) != "1" ]; then
        echo "Error: nvram_set failed"
        exit 1
    fi 

    set_init

    if [ $(ps | grep dropbear | grep -v grep | wc -l) == "0" ]; then
        echo "Error: set_init failed"
        exit 1
    fi

    uci_readly

    if [ ! -f /data/auto_ssh/auto_ssh.sh ]; then
        echo "Error: uci_readly failed"
        exit 1
    fi
    uci_start

    if [ $(uci show firewall | grep auto_ssh | wc -l) == "0" ]; then
        echo "Error: uci_start failed"
        exit 1
    fi
    mtd erase crash
    
    echo "all works done!"
    sleep 1
    echo "reboot 1 second later"
    reboot
}
main
  • auto_ssh.sh 脚本内容如下
#!/bin/sh

host_key=/etc/dropbear/dropbear_rsa_host_key
host_key_bk=/data/auto_ssh/dropbear_rsa_host_key

# 如果存在备份的SSH密钥,将备份的密钥链接到dropbear使用的密钥
if [ -f $host_key_bk ]; then
    ln -sf $host_key_bk $host_key
fi

# 当前固件为稳定版时,需要执行下面命令开启SSH
channel=`/sbin/uci get /usr/share/xiaoqiang/xiaoqiang_version.version.CHANNEL`
if [ "$channel" = "release" ]; then
    sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear
    /etc/init.d/dropbear restart
fi

# 备份SSH密钥
if [ ! -s $host_key_bk ]; then
    i=0
    while [ $i -le 30 ]
    do
        if [ -s $host_key ]; then
            cp -f $host_key $host_key_bk 2>/dev/null
            break
        fi
        let i++
        sleep 1s
    done
fi

2.4 使用 SSH 连接

重启后就可以使用 ssh 连接路由器了。

image-20230226141820774

登录后界面

image-20230226143529976

三、刷入 UBoot 固件

3.1 备份路由器分区

执行命令将分区备份到 /tmp 目录

dd if=/dev/mtd1 of=/tmp/mtd1_BL2.bin
dd if=/dev/mtd2 of=/tmp/mtd2_Nvram.bin
dd if=/dev/mtd3 of=/tmp/mtd3_Bdata.bin
dd if=/dev/mtd4 of=/tmp/mtd4_Factory.bin
dd if=/dev/mtd5 of=/tmp/mtd5_FIP.bin

在 windows 上使用 scp 命令将这些文件下载至本地保存备份。

scp root@192.168.31.1:/tmp/mtd*.bin ./

3.2 刷入 UBoot 系统

上传 uboot 文件mt7986_redmi_ax6000-fip-fixed-parts.bin上传至 /tmp 目录中

scp .\mt7986_redmi_ax6000-fip-fixed-parts.bin root@192.168.31.1:/tmp

使用 md5 校验是否同一个文件

root@XiaoQiang:/tmp# md5sum mt7986_redmi_ax6000-fip-fixed-parts.bin 
7610a1722073748c3c3a860b75d94d5d  mt7986_redmi_ax6000-fip-fixed-parts.bin

依次输入以下命令,擦除分区并写入 uboot 文件

mtd erase FIP
mtd write /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP
mtd verify /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP

命令执行结果如下,提示 Success 表示写入成功。

root@XiaoQiang:/tmp# mtd erase FIP
Unlocking FIP ...
Erasing FIP ...
root@XiaoQiang:/tmp# mtd write /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP
Unlocking FIP ...

Writing from /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin to FIP ...     
root@XiaoQiang:/tmp# mtd verify /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP
Verifying FIP against /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin ...
72a110768c7473200b863a3c5d4dd975 - FIP
72a110768c7473200b863a3c5d4dd975 - /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin
Success

3.3 手动初始化路由器

手动设置电脑 IP 地址为:

  • IP 地址:192.168.31.2

  • 子网掩码:255.255.255.0

  • 网关地址:192.168.31.1

  • DNS:8.8.8.8

随后用网线连接电脑至路由器的 2、3、4 任意一个 LAN 口,并使用卡针插入路由器初始化 Reset 孔时同时接入电源。按住持续大概十几秒钟,松开卡针,路由器初始化成功。(路由器并不会灯光提示,心里默数15秒即可)

随后访问:http://192.168.31.1/,显示 UBoot 系统。

image-20230226165150688

四、刷入 OpenWrt 系统

进入 UBoot 系统页面后,上传 OpenWrt 系统固件 ax6000-full.bin,选择固件文件,点击 Upload。

image-20230226170818190

点击 Update

image-20230226170947083

等待更新

image-20230226171006005

更新成功,等待重启(这里等待个三四分钟即可。因为页面会一直卡在这里,是由于 OpenWrt 系统的默认 IP 是 192.168.6.1,重启成功后也并不会通知你,因为你现在还在 31 网段。。。)

image-20230226171602762

这时将自己电脑 IP 设置成 DHCP 自动获取,或者改为 192.168.6.x 网段。访问:http://192.168.6.1/ 页面。用户名密码分别是:root/password

image-20230226172123743

进入系统,查看详情

image-20230226172301156

五、开启 WIFI 功能

5.1 禁用 2.4 G 频段

进入网络 → 无线 可以看到默认配置了两个无线频段,用不到的话可以将 2.4 G 频段的 AP 禁用,点击后面的禁用。

image-20230226172820416

image-20230226173228342

5.2 修改 WIFI 名称与密码

配置 5G 频段的 WIFI,点击配置,进入无线配置页面。

  • SSID:自定义 WIFI 的名称

  • 认证模式:WPA2PSKWPA3PSK

  • 加密方式:AES

  • 密码:自定义 WIFI 密码

  • 启用节能模式(APSD):Disable

其他默认即可,保存&应用。