拼多多特价搞了一台红米AX6000, 信号很好,比华硕的AC86U好多了,不过有几个功能没有: 没有静态路由选项,不能设置dhcp,没有自带的ddns。如果没有这几个功能,是没有办法替换掉家里用了三年的华硕AC86U的。
最近发现cloudflare是有免费的ddns的功能,静态路由和dhcp是可能通过ssh来实现的,所以就想着通过ssh来实现这两个功能。下面是开通红米AX6000的ssh功能的方法。
准备工作
- 红米AX6000
- Mac/Linux/windows(windows开启本机的telnet功能:控制面板——卸载程序——启用或关闭Windows功能——勾选telnet功能——确定)
- 固件:Redmi AX6000 1.0.60
固件降级
- 下载Redmi AX6000 1.0.60固件
- 需要利用老版本的漏洞才能开启ssh, 所以需要手动降级到1.0.60版本,如下图上传下载的固件然后点升级
在这个升级过程会报如下错误: 出于安全考虑,不允许选择低于当前版本的固件进行升级。解决方法是在地址栏的url最后一个0改成1或者1改成0,然后回车就可以直接升级了。
获取token
登陆小米路由器admin,浏览器地址栏stok=
后面部分就是token, 这个token是每次登录都会变化,后面都会用到这个token。如果重新登录后,都要重新复制这个token.
开启开发者模式
更改路由器的crash分区,使其进入到开发者模式
将下面的URL里面的stok=token的token替换成上面获取路由器的token值,然后复制到到浏览器并且按enter打开
http://192.168.31.1/cgi-bin/luci/;stok=token/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},表示成功。
通过浏览器重启路由器
在浏览器地址栏输入下面的url, 和上面的做法一样,将stok=token的token替换成上面获取路由器的token值
http://192.168.31.1/cgi-bin/luci/;stok=token/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20
设置Bdata参数
设置参数telnet_en、 ssh_en、uart_en
重启后,要重新获取token, 然后在浏览器地址栏输入下面的url, 将stok=token的token替换成上面获取路由器的token值
http://192.168.31.1/cgi-bin/luci/;stok=token/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
重启路由器
在浏览器地址栏输入下面的url, 和上面的做法一样,将stok=token的token替换成上面获取路由器的token值
http://192.168.31.1/cgi-bin/luci/;stok=token/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20
通过telnet开启ssh
在终端输入telnet 192.168.31.1
, 可以看到Are you ok的界面,就证明telnet成功了。
telnet连接上,输入指令开启ssh并修改密码为admin:
bdata set boot_wait=on
bdata commit
nvram set ssh_en=1
nvram set telnet_en=1
nvram set uart_en=1
nvram set boot_wait=on
nvram commit
sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear
/etc/init.d/dropbear restart
echo -e 'admin\nadmin' | passwd root
永久开启ssh
开启新窗口,使用ssh登录路由器,输入指令开启ssh并修改密码为admin:
ssh root@192.168.31.1
不过ssh登录的时候如果报下面的错误no matching host key type found. Their offer: ssh-rsa
, 是因为OpenSSH 7.0以后的版本不再支持ssh-rsa (RSA)算法, 解决方法是手动加上
# vi ~/.ssh/config
Host redmi
HostName 192.168.31.1
User root
Port 22
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
或者
# ssh -oHostKeyAlgorithms=+ssh-rsa root@192.168.31.1
从telnet开启的ssh,路由器重启会失效,添加一个开启自动运行的脚本,来实现自动开启ssh。如果恢复出厂设置或重新刷机后需要重新添加.
mkdir /data/auto_ssh && cd /data/auto_ssh
touch auto_ssh.sh
chmod +x auto_ssh.sh
创建auto_ssh.sh文件,使用vi输入下面的内容并保存
#!/bin/sh
host_key=/etc/dropbear/dropbear_rsa_host_key
host_key_bk=/data/auto_ssh/dropbear_rsa_host_key
if [ -f $host_key_bk ]; then
ln -sf $host_key_bk $host_key
fi
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
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
将auto_ssh写入固化
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
关闭开发者模式
ssh连接上路由器后,输入指令关闭开发者模式
mtd erase crash
reboot
修复时区异常
如果路由器时区异常,ssh连接中路由器后, 输入指令修复时区异常
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
注意事项
升级固件后,可能需要通过telnet重新开启ssh. 不过目前我还没遇到过这种情况,在开启ssh后,我是直接将1.60的固件自动升级到1.67,ssh还是开启了,密码也是admin.