我想在小米 BE7200 Pro 上运行 ShellCrash,又暂时不准备刷第三方固件,于是用 xmir-patcher 打开永久 SSH,再把 ShellCrash 安装到持久化分区。本文记录的设备型号标识为 RP09,其他型号和固件版本不一定适用。
解锁会利用固件漏洞并修改启动配置,可能导致设备失去保修、配置损坏或无法启动。操作期间使用网线连接,保持稳定供电,并在安装永久 SSH 前创建完整备份。
解锁 SSH
准备 xmir-patcher
xmir-patcher 在 Windows 上可以直接运行 run.bat。Linux 和 macOS 需要 Python 3.8 以上版本与 OpenSSL:
git clone https://github.com/openwrt-xiaomi/xmir-patcher.git
cd xmir-patcher
./run.sh
我在 Apple Silicon Mac 上使用 Python 3.14 时,ssh2-python 因为没有可用 wheel 转为源码编译,随后报 cmake: command not found。换成 Python 3.12 后可以正常运行:
cd xmir-patcher
python3.12 -m venv venv
source venv/bin/activate
./run.sh
这只是本次 macOS 环境的依赖问题。遇到类似报错,可以先用 ./venv/bin/python3 --version 检查虚拟环境版本,再决定是否重建 venv。
按顺序完成解锁
电脑与路由器需要位于同一局域网。路由器使用默认管理地址 192.168.31.1 时无需修改;如果 LAN 地址已经变化,先在菜单中选择 1 - Set IP-address 填入实际地址。
本次操作顺序是 2 → 3 → 4 → 6 → 9:
2 - Connect to device (install exploit):连接路由器并建立临时入口。3 - Read full device info:确认设备型号和固件信息。4 - Create full backup:创建完整备份,并保存到电脑。6 - Install permanent SSH:安装永久 SSH。9 - Reboot device:重启路由器。
设备信息与预期不符,或者备份没有成功生成时,应当停止操作。本次设备重启后的首次 SSH 登录账号和密码都是 root,登录后立即运行 passwd 修改密码。不要把路由器的 SSH 端口开放到 WAN。
处理 ssh-rsa 兼容问题
本次原厂系统中的 Dropbear 只提供 ssh-rsa 主机密钥,新版 OpenSSH 直接连接会报错:
Unable to negotiate with 192.168.31.1 port 22:
no matching host key type found. Their offer: ssh-rsa
在 ~/.ssh/config 中只为这台路由器放开旧算法:
Host mi
HostName 192.168.31.1
Port 22
User root
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
PubkeyAuthentication yes
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa
之后可以用 ssh mi 登录。遇到 REMOTE HOST IDENTIFICATION HAS CHANGED 时,先确认主机密钥变化确实来自刚才的初始化,再运行 ssh-keygen -R 192.168.31.1 删除旧记录。
配置公钥登录
旧版 Dropbear 使用 RSA 密钥的兼容性较好。本机没有 RSA 密钥时先生成一把,再上传公钥:
ssh-keygen -t rsa -b 3072 -f ~/.ssh/id_rsa
scp -O ~/.ssh/id_rsa.pub mi:/tmp/id_rsa.pub
ssh mi '
umask 077
mkdir -p /etc/dropbear
touch /etc/dropbear/authorized_keys
grep -qxF -f /tmp/id_rsa.pub /etc/dropbear/authorized_keys || \
cat /tmp/id_rsa.pub >> /etc/dropbear/authorized_keys
chmod 600 /etc/dropbear/authorized_keys
rm -f /tmp/id_rsa.pub
'
这里要使用 scp -O。新版 scp 默认使用 SFTP,而本次原厂系统没有 SFTP server。最后确认公钥登录已经生效:
ssh -o BatchMode=yes -o PasswordAuthentication=no mi id
命令能够直接输出 uid=0(root),SSH 部分就完成了。
安装 ShellCrash
检查环境和存储
本次 BE7200 Pro 是 aarch64 架构,内存约 895 MB,带有 ShellCrash 需要的常用命令和 TUN 设备。/data 与 /userdisk 共用的空间只剩十几 MB,/data/other_vol 是持久化 UBIFS 分区,实测约有 194 MB 可用,因此选择后者安装 ShellCrash。
自己的设备应当重新检查:
uname -m
free -m
df -h
ls -l /dev/net/tun
command -v curl wget iptables ipset crond
安装前备份防火墙、网络、DHCP 和 crontab:
backup_dir="/data/other_vol/pre-shellcrash-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$backup_dir"
uci export firewall > "$backup_dir/firewall.uci"
cp /etc/config/network /etc/config/dhcp /etc/crontabs/root "$backup_dir"/
运行安装脚本
使用 ShellCrash 官方仓库提供的路由设备安装源:
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/dev'
sh -c "$(curl -kfsSl $url/install.sh)"
. /etc/profile >/dev/null 2>&1
安装位置选择 3,将文件放到 /data/other_vol,命令别名使用默认的 crash。首次运行 crash 时选择简体中文、路由设备推荐模式和 Mihomo 内核。
本次固件没有找到 TPROXY target 或相应内核模块,因此使用引导推荐的 Mix 模式。局域网 UDP 或 DNS 出现异常时,可以先退回 REDIRECT/TCP 模式排查。
导入 YAML 配置
将 Mihomo 配置上传到 /tmp/config.yaml,再进入 crash 菜单选择立即加载:
scp -O ./config.yaml mi:/tmp/config.yaml
ssh mi
crash
加载后,配置会被移到 /data/other_vol/ShellCrash/yamls/config.yaml。配置引用本地规则集时,还要保持目录关系一并上传:
scp -O -r ./ruleset mi:/data/other_vol/ShellCrash/yamls/
上传前检查订阅链接、节点地址、密码和 API secret,避免将它们提交到公开仓库。使用本地规则文件时,也要把对应 provider 改为 type: file;仍指向远程 URL 的 provider 不会自动读取刚上传的文件。
启动和检查
第一次启动时保留当前 SSH 会话,再开一个终端测试新连接:
crash -s start
crash -s stop
启动后检查 SSH、路由器管理页面、DNS 解析和实际分流。确认这些都正常,再设置开机启动并重启路由器,随后重复检查一次。出现断网时先执行 crash -s stop 恢复网络,再排查 DNS、转发模式和 YAML 配置。
评论
由 GitHub Discussions 承载,需要 GitHub 账号登录。