配置小米 AX3000T 的 SSH 和 Clash
本文档用于在小米 AX3000T 原厂固件上开启 root SSH,配置重启后仍可登录的 SSH,并安装 ShellCrash 和 Mihomo,让局域网设备使用路由器代理。
开始前准备以下设备和信息:
- 一台小米 AX3000T;
- 一台 Windows 或 macOS 电脑;
- Windows 已安装 Git Bash,macOS 可以使用 Terminal;
- 路由器管理后台密码;
- 一条 Mihomo/Clash 配置链接,或者一份完整的
config.yaml。
本文使用的上游项目:
- SSH 解锁:XMiR-Patcher
- Clash 管理脚本:ShellCrash
- 代理核心:Mihomo
本文固定使用 ShellCrash 1.9.4。XMiR-Patcher 使用执行时的最新 main 分支,并在下载后记录具体提交号。
1. 确认路由器型号
本文适用于硬件型号为 RD03 的小米 AX3000T。RD03V2 请使用与该硬件版本对应的资料。
先登录路由器后台:
http://192.168.31.1/确认电脑已经连接这台路由器,并记下管理地址。本文后续统一使用:
192.168.31.1如果路由器使用其他地址,请替换后续命令中的 192.168.31.1。
整个流程可以通过信号稳定的主 Wi-Fi 完成。电脑方便接网线时,重启验证阶段使用网线更省事。
2. 暂停电脑上的代理软件
操作期间退出电脑上的 Clash、Mihomo、VPN、Charles 等网络工具,让电脑直接使用路由器提供的网络和 DNS。
Windows Git Bash 测试路由器:
ping.exe -n 4 192.168.31.1macOS Terminal 测试路由器:
ping -c 4 192.168.31.1能够收到回复后继续。
3. 下载 XMiR-Patcher
Windows Git Bash 和 macOS Terminal 都执行:
mkdir -p ~/ax3000t-setup
cd ~/ax3000t-setup
git clone --depth 1 https://github.com/openwrt-xiaomi/xmir-patcher.git
cd xmir-patcher
git rev-parse HEAD保存最后显示的提交号。以后排查问题时,可以准确知道使用的是哪个版本。
如果目录已经存在,更新代码:
cd ~/ax3000t-setup/xmir-patcher
git pull --ff-only
git rev-parse HEAD4. 启动 XMiR-Patcher
Windows Git Bash 执行:
cd ~/ax3000t-setup/xmir-patcher
cmd.exe /c run.batrun.bat 已附带 Windows Python 运行环境。
macOS 先检查 Python 和 OpenSSL:
python3 --version
openssl versionPython 版本应为 3.8 或更高。macOS 可以使用 Homebrew 安装所需版本:
brew install python openssl然后启动 XMiR-Patcher:
cd ~/ax3000t-setup/xmir-patcher
chmod +x run.sh
./run.sh第一次运行会创建 Python 虚拟环境并安装依赖,需要等待一会儿。
5. 使用 XMiR 开启临时 SSH
XMiR 主菜单中有以下项目:
1 - Set IP-address
2 - Connect to device (install exploit)
3 - Read full device info
4 - Create full backup
6 - Install permanent SSH
9 - Reboot device按下面的顺序操作:
- 路由器使用其他管理地址时,选择
1并输入实际地址; - 选择
2,连接路由器并安装可用的解锁方式; - 按提示输入路由器管理后台密码;
- 等待程序显示 SSH 已开启;
- 选择
3,读取设备信息,确认硬件是RD03。
路由器后台密码的输入位置限定为 XMiR 窗口;命令、截图和文档均省略这项信息。
完成 2 - Connect to device 和 3 - Read full device info 后退出 XMiR,继续第 6 节。SSH 持久化在安装 ShellCrash 时完成;独立永久 SSH 的配置见第 25 节。
6. 第一次登录路由器
另开一个 Git Bash 或 Terminal 窗口:
ssh root@192.168.31.1OpenSSH 显示 no matching host key type found 时,使用:
ssh -o HostKeyAlgorithms=+ssh-rsa root@192.168.31.1第一次连接输入 yes。XMiR 临时解锁生成的初始 root 密码通常是:
root使用 root 登录失败时,回到 XMiR,进入 8 - Other functions,再选择 2 - Change root password 设置新密码。
7. 检查型号、架构、空间和内存
以下命令在路由器 SSH 中执行:
uname -m
cat /proc/device-tree/model 2>/dev/null; echo
df -h /data
free -m
cat /proc/mtdRD03 的架构应显示为:
aarch64重点检查 /data,为 ShellCrash 预留至少 30 MB 可用空间,并在安装时选择 /data。
/tmp 是内存文件系统。它显示的可用空间来自 RAM,文件会在重启后消失,并且会和 Mihomo 争抢内存。
8. 修改 root 密码
在路由器 SSH 中执行:
passwd连续输入两次新密码。输入过程中终端保持空白,这是正常现象。
保持当前 SSH 窗口开启。另开一个终端,用新密码重新登录一次,确认密码有效。
9. 配置 SSH 公钥登录
以下命令在电脑上执行。
先创建 Ed25519 密钥。已经有 ~/.ssh/id_ed25519.pub 时跳过:
ssh-keygen -t ed25519 -a 100把公钥上传到路由器:
scp ~/.ssh/id_ed25519.pub root@192.168.31.1:/tmp/client.pub如果前面的 SSH 需要临时启用 ssh-rsa 主机密钥算法,scp 也使用同一选项:
scp -o HostKeyAlgorithms=+ssh-rsa ~/.ssh/id_ed25519.pub root@192.168.31.1:/tmp/client.pub进入路由器:
ssh root@192.168.31.1在路由器中执行:
umask 077
mkdir -p /etc/dropbear
touch /etc/dropbear/authorized_keys
grep -qxF "$(cat /tmp/client.pub)" /etc/dropbear/authorized_keys || cat /tmp/client.pub >> /etc/dropbear/authorized_keys
chmod 600 /etc/dropbear/authorized_keys
rm -f /tmp/client.pub再开一个终端测试密钥登录:
ssh root@192.168.31.1新窗口能直接登录后,再继续安装 ShellCrash。后续以公钥作为主要登录入口,路由器后台中的 SSH 端口转发保持关闭。
10. 安装 ShellCrash 1.9.4
以下命令在路由器 SSH 中执行:
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/1.9.4'
sh -c "$(curl -kfsSL "$url/install.sh")"
. /etc/profile >/dev/null 2>&1GitHub Raw 连接失败时,使用 ShellCrash README 提供的 jsDelivr 源:
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@1.9.4'
sh -c "$(curl -kfsSL "$url/install.sh")"
. /etc/profile >/dev/null 2>&1安装程序检测到小米原厂系统后,按下面选择:
安装位置:1 # /data
确认安装:1
命令别名:1 # crash最终目录是:
/data/ShellCrash检查安装结果:
ls -ld /data/ShellCrash
crash -hMihomo 核心的下载由 ShellCrash 在路由器端完成。
11. 完成第一次初始化和 SSH 软固化
在路由器 SSH 中执行:
crash第一次运行会进入新手引导,按下面选择:
使用环境:1 # 路由设备配置局域网透明代理
小闪存模式:0 # 若出现此项,输入 0
小米设备软固化 SSH:1
需要还原的 SSH 密码:直接回车
现在导入配置文件:0
立即启动服务:0在“需要还原的 SSH 密码”处直接回车。ShellCrash 会保存 Dropbear 主机密钥和 authorized_keys,公钥由此成为固定登录入口。此处输入的密码会写入 ShellCrash 配置文件;原厂系统重启后 root 密码也可能恢复,因此后续统一使用公钥登录。
ShellCrash 1.9.4 的软固化会完成以下工作:
- 将 Dropbear 主机密钥和公钥文件备份到
/data/ShellCrash/configs/; - 使用
/data/shellcrash_init.sh在开机时恢复 SSH; - 通过小米防火墙的 UCI include 启动初始化脚本;
- 在 NVRAM 中设置
ssh_en、telnet_en、uart_en和boot_wait; bdata分区保持原值。
软固化脚本负责重启 Dropbear;Telnet 服务和 WAN 侧 SSH 规则保持原有关闭状态。
SSH 软固化文件位于 /data/ShellCrash。计划卸载 ShellCrash 时,请在重启前配置独立的 SSH 持久化方式。
12. 选择低内存 Mihomo 核心
再次执行:
crash依次进入:
9 更新与支持
2 切换内核文件
5 切换版本分支及压缩方式
1 最简编译 release 版本,UPX 压缩
1 MihomoShellCrash 会自动识别 arm64 并下载对应核心。
最简 release 核心覆盖普通订阅、规则分流、Redir 和混合模式。GVisor、Tailscale、WireGuard 或 NaiveProxy 场景需要改用标准 release 核心。
13. 配置低内存运行模式
进入 ShellCrash 主菜单:
crash13.1 设置路由模式
依次选择:
2 功能设置
1 路由模式设置
1 Redir 模式Redir 模式接管 TCP,UDP 沿原网络路径传输。先用这一模式完成低内存基础验证。
13.2 设置 DNS
依次选择:
2 功能设置
2 DNS 设置
1 MIX 模式MIX 模式让国内域名返回真实地址,其他域名使用 Fake-IP 分流,适合与 ShellCrash 的国内 IP 绕过配合使用。
13.3 保持国内 IP 绕过
依次进入:
2 功能设置
3 透明路由流量过滤确认下面一项是 ON:
过滤 CN_IP 列表:ON它让国内目的地址在进入 Mihomo 前直接转发,可以减少核心连接数。显示为 ON 即已完成,直接返回上级菜单。
13.4 配置 IPv6
低内存基线采用 IPv4。在小米路由器管理后台关闭 IPv6 后,客户端统一使用 IPv4 规则,同时减少连接和 DNS 状态。
如果保留路由器 IPv6,进入:
2 功能设置
8 IPv6 设置低内存初始配置应显示:
IPv6 透明路由:OFF
IPv6-DNS 解析:OFF需要 IPv6 代理时再逐项开启,并重新观察内存。
13.5 设置开机延时
进入:
4 启动设置确认:
允许 ShellCrash 开机启动
小闪存模式:OFF
自启延时:60 秒小闪存模式保持 OFF,让核心和数据库保存在 /data,将 RAM 留给 Mihomo 运行。
首轮配置省略本地 Dashboard 和完整 GeoSite 数据库。基础测试稳定后,再按实际规则需求添加。
14. 导入订阅链接
配置服务商提供完整的 Clash/Mihomo 配置链接时,执行:
crash依次选择:
6 管理配置文件
2 在线获取配置文件粘贴配置链接,等待 ShellCrash 下载并校验。配置链接通常包含账号凭据,请仅在 ShellCrash 中保存;Git 仓库和截图使用脱敏内容。
导入结束后,遇到“是否立即启动/重启服务”先选择 0,最后统一手动启动。
15. 导入电脑上的 config.yaml
使用完整 config.yaml 时,先停止路由器服务:
ssh root@192.168.31.1 'crash -s stop'在电脑上上传配置:
scp /path/to/config.yaml root@192.168.31.1:/tmp/config.yamlWindows Git Bash 可以直接使用 Windows 路径,例如:
scp /c/Users/your_name/Downloads/config.yaml root@192.168.31.1:/tmp/config.yaml进入路由器并运行 ShellCrash:
ssh root@192.168.31.1
crashShellCrash 会发现 /tmp/config.yaml,显示:
是否加载为 Mihomo 的配置文件?(1/0)输入 1。配置会保存到:
/data/ShellCrash/yamls/config.yaml完整 YAML 中建议使用以下低开销设置。同名字段直接修改原值,每个键保留一次:
mode: rule
log-level: warning
ipv6: false
find-process-mode: off
profile:
store-selected: true
store-fake-ip: false路由器看到的是下游设备的网络流量。规则使用域名、IP 和端口等网络条件,并删除 PROCESS-NAME 等进程规则。
16. 启动代理
在路由器 SSH 中执行:
crash -s start检查核心:
pidof CrashCore有数字输出表示 Mihomo 已经运行。
查看内存:
PID="$(pidof CrashCore | awk '{print $1}')"
grep -E 'MemTotal|MemAvailable|SwapFree' /proc/meminfo
[ -n "$PID" ] && grep -E 'VmRSS|VmSize|Threads' "/proc/$PID/status"crash -s start 会立即生效。启动时 DNS 和防火墙规则会重新加载,局域网设备可能出现十几秒的网络波动。
17. 从电脑测试代理
先确认电脑本地的 Clash、VPN 和系统代理仍然关闭,再在电脑执行:
curl -4 -I --max-time 15 https://www.bing.com
curl -4 -I --max-time 15 https://www.google.com
curl -4 --max-time 15 https://api.ipify.org
echo再测试手机上的国内应用、ChatGPT、X、Telegram 和常用视频应用。
节点由 YAML 中的策略组决定:
select:使用当前选中的节点;url-test:自动选择测速结果较好的节点;fallback:当前节点失败后切换到可用节点。
18. 需要代理 UDP 时使用混合模式
Redir 模式让 UDP 沿原网络路径传输。X、Telegram、ChatGPT 或游戏需要 UDP 代理时,改用混合模式。
先停止服务:
crash -s stop进入菜单:
2 功能设置
1 路由模式设置
2 混合模式混合模式使用 Redir 转发 TCP,使用 TUN 转发 UDP。保持 过滤 CN_IP 列表:ON 后,国内目的地址会直接转发,其他 UDP 才进入 Mihomo。
重新启动:
crash -s start切换后重新记录 MemAvailable 和 VmRSS。混合模式作为 UDP 需求的初始方案;完整 TUN 模式适用于 TCP 和 UDP 都需要进入 TUN 的场景,并会增加内存和连接开销。
19. 日常启动、停止和查看状态
进入管理菜单:
crash直接启动:
crash -s start直接停止:
crash -s stop查看帮助:
crash -h停止服务会停止 Mihomo,并移除 ShellCrash 当前创建的透明代理和 DNS 防火墙规则。完成后路由器继续运行,局域网设备恢复原有网络路径。
20. 更新订阅或 YAML
更新前先停止服务,使低内存设备在配置校验期间保持单核心运行:
crash -s stop更新已经保存的订阅链接:
crash
6 管理配置文件
7 更新配置文件
1 确认更新更新电脑上的 YAML:
scp /path/to/config.yaml root@192.168.31.1:/tmp/config.yaml
ssh root@192.168.31.1
crash确认加载新配置后启动:
crash -s start/data/ShellCrash/yamls/config.yaml 或订阅生成的配置包含全部节点和规则。电脑仅负责上传新文件。
21. 监控内存和运行稳定性
启动后分别在 1 分钟、10 分钟、30 分钟和 2 小时记录:
date
PID="$(pidof CrashCore | awk '{print $1}')"
grep -E 'MemTotal|MemAvailable|SwapFree' /proc/meminfo
[ -n "$PID" ] && grep -E 'VmRSS|VmSize|Threads' "/proc/$PID/status"
[ -n "$PID" ] && printf 'FD: ' && ls "/proc/$PID/fd" | wc -l内存判断使用 MemAvailable。MemFree 表示当前完全空闲的页;Linux 文件缓存可以按需回收。
出现以下情况时先停止 ShellCrash:
MemAvailable长时间低于约20 MB;VmRSS持续增长,数小时后仍在上升;- Wi-Fi 反复消失,路由器自动重启;
- 日志出现 OOM、Killed process 或 kernel panic。
检查内核日志:
dmesg | grep -Ei 'oom|out of memory|killed process|panic'降低内存占用的顺序:
- 从混合模式切回 Redir;
- 保持小闪存模式关闭;
- 使用最简 release + UPX 的 Mihomo;
- 大型规则集和 rule-provider 仅保留实际使用项;
- 减少节点数量和自动测速组;
- 关闭域名嗅探、Dashboard 和详细日志;
- 关闭 IPv6 透明代理。
路由器内保持单个 Mihomo/CrashCore 进程。调试、更新核心或校验大型配置前,先执行:
crash -s stop22. 验证重启后的 SSH 和代理
先让 ShellCrash 连续稳定运行至少 30 分钟,再执行一次受控重启:
rebootWi-Fi 和有线设备会在路由器重启期间断网。等待路由器恢复后,在电脑测试:
ssh root@192.168.31.1进入路由器后检查:
pidof dropbear
pidof CrashCore
grep -E 'MemAvailable' /proc/meminfoShellCrash 设置了 60 秒启动延时。路由器恢复 Wi-Fi 后等待延时结束,再检查 Mihomo。
如果第一次重启后出现 SSH 主机密钥变化,并且确认当前连接的是自己的路由器,可以在电脑删除旧记录后重新连接:
ssh-keygen -R 192.168.31.1
ssh root@192.168.31.1如果每次重启主机密钥都会变化,SSH 主机密钥软固化需要修复。重新使用 XMiR 开启临时 SSH,再检查 /data/ShellCrash/configs/dropbear_rsa_host_key。
23. 关闭开机启动
暂停代理时,先停止服务:
crash -s stop再进入:
crash
4 启动设置
1 禁止 ShellCrash 开机启动该设置保留所有配置和 SSH 文件,下次开机时 Mihomo 保持停止状态。
24. 卸载 ShellCrash
保持当前 SSH 窗口开启,执行:
crash -u确认卸载时选择配置保留方式。完全删除对应选项为 0。
SSH 软固化文件属于 ShellCrash。需要在后续重启中继续使用 SSH 时,先按下一节配置独立持久化,再卸载 ShellCrash。
25. 可选:使用 XMiR 配置独立永久 SSH
需要让 SSH 与 ShellCrash 完全独立时,可以使用 XMiR 官方的 Install permanent SSH。
如果 Mihomo 正在运行,先在路由器中执行:
crash -s stop先在 XMiR 主菜单选择:
4 - Create full backup备份保存在电脑的:
~/ax3000t-setup/xmir-patcher/backups/把整个 backups 目录复制到其他安全位置,然后选择:
6 - Install permanent SSH当前 XMiR 实现会安装 SSH 定时修复脚本和防火墙启动钩子;持久标志需要启用时,它还会写入 bdata,设置 telnet_en、ssh_en、uart_en 和 boot_wait。
这一步会修改持久分区。XMiR 的卸载命令会移除定时任务和启动钩子,已经写入的 bdata 标志则保留修改后的值。操作前备份用于后续恢复。
Windows Git Bash 卸载 XMiR 的 SSH 启动钩子:
cd ~/ax3000t-setup/xmir-patcher
cmd.exe /c run.bat install_ssh.py uninstallmacOS Terminal:
cd ~/ax3000t-setup/xmir-patcher
./run.sh install_ssh.py uninstall手动改写 bdata 前,先准备原始备份和经过验证的恢复方案。
26. 常见问题
SSH 提示密码错误
回到 XMiR:
8 - Other functions
2 - Change root password重新设置密码后再登录。
SSH 提示 REMOTE HOST IDENTIFICATION HAS CHANGED
确认路由器刚刚重启或重新生成过 Dropbear 主机密钥后执行:
ssh-keygen -R 192.168.31.1随后重新连接并保存新指纹。
ShellCrash 启动后国内应用变慢
检查以下三项:
DNS 模式:MIX
过滤 CN_IP 列表:ON
小闪存模式:OFF然后停止并重新启动服务。
手机应用部分内容反复加载失败
先从 Redir 切换到混合模式,让 UDP 进入 Mihomo;同时保持 CN_IP 绕过开启。切换后观察内存,再测试国内应用和国外应用。
路由器 Wi-Fi 消失或自动重启
重新开机后先停止 ShellCrash:
crash -s stop检查 OOM 和 panic:
dmesg | grep -Ei 'oom|out of memory|killed process|panic'采用 Redir、最简核心、关闭 IPv6 和精简规则集的配置重新启动。测试期间一次运行一个核心。