Skip to content

配置小米 AX3000T 的 SSH 和 Clash

本文档用于在小米 AX3000T 原厂固件上开启 root SSH,配置重启后仍可登录的 SSH,并安装 ShellCrash 和 Mihomo,让局域网设备使用路由器代理。

开始前准备以下设备和信息:

  • 一台小米 AX3000T;
  • 一台 Windows 或 macOS 电脑;
  • Windows 已安装 Git Bash,macOS 可以使用 Terminal;
  • 路由器管理后台密码;
  • 一条 Mihomo/Clash 配置链接,或者一份完整的 config.yaml

本文使用的上游项目:

本文固定使用 ShellCrash 1.9.4。XMiR-Patcher 使用执行时的最新 main 分支,并在下载后记录具体提交号。

1. 确认路由器型号

本文适用于硬件型号为 RD03 的小米 AX3000T。RD03V2 请使用与该硬件版本对应的资料。

先登录路由器后台:

text
http://192.168.31.1/

确认电脑已经连接这台路由器,并记下管理地址。本文后续统一使用:

text
192.168.31.1

如果路由器使用其他地址,请替换后续命令中的 192.168.31.1

整个流程可以通过信号稳定的主 Wi-Fi 完成。电脑方便接网线时,重启验证阶段使用网线更省事。

2. 暂停电脑上的代理软件

操作期间退出电脑上的 Clash、Mihomo、VPN、Charles 等网络工具,让电脑直接使用路由器提供的网络和 DNS。

Windows Git Bash 测试路由器:

bash
ping.exe -n 4 192.168.31.1

macOS Terminal 测试路由器:

bash
ping -c 4 192.168.31.1

能够收到回复后继续。

3. 下载 XMiR-Patcher

Windows Git Bash 和 macOS Terminal 都执行:

bash
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

保存最后显示的提交号。以后排查问题时,可以准确知道使用的是哪个版本。

如果目录已经存在,更新代码:

bash
cd ~/ax3000t-setup/xmir-patcher
git pull --ff-only
git rev-parse HEAD

4. 启动 XMiR-Patcher

Windows Git Bash 执行:

bash
cd ~/ax3000t-setup/xmir-patcher
cmd.exe /c run.bat

run.bat 已附带 Windows Python 运行环境。

macOS 先检查 Python 和 OpenSSL:

bash
python3 --version
openssl version

Python 版本应为 3.8 或更高。macOS 可以使用 Homebrew 安装所需版本:

bash
brew install python openssl

然后启动 XMiR-Patcher:

bash
cd ~/ax3000t-setup/xmir-patcher
chmod +x run.sh
./run.sh

第一次运行会创建 Python 虚拟环境并安装依赖,需要等待一会儿。

5. 使用 XMiR 开启临时 SSH

XMiR 主菜单中有以下项目:

text
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. 路由器使用其他管理地址时,选择 1 并输入实际地址;
  2. 选择 2,连接路由器并安装可用的解锁方式;
  3. 按提示输入路由器管理后台密码;
  4. 等待程序显示 SSH 已开启;
  5. 选择 3,读取设备信息,确认硬件是 RD03

路由器后台密码的输入位置限定为 XMiR 窗口;命令、截图和文档均省略这项信息。

完成 2 - Connect to device3 - Read full device info 后退出 XMiR,继续第 6 节。SSH 持久化在安装 ShellCrash 时完成;独立永久 SSH 的配置见第 25 节。

6. 第一次登录路由器

另开一个 Git Bash 或 Terminal 窗口:

bash
ssh root@192.168.31.1

OpenSSH 显示 no matching host key type found 时,使用:

bash
ssh -o HostKeyAlgorithms=+ssh-rsa root@192.168.31.1

第一次连接输入 yes。XMiR 临时解锁生成的初始 root 密码通常是:

text
root

使用 root 登录失败时,回到 XMiR,进入 8 - Other functions,再选择 2 - Change root password 设置新密码。

7. 检查型号、架构、空间和内存

以下命令在路由器 SSH 中执行:

sh
uname -m
cat /proc/device-tree/model 2>/dev/null; echo
df -h /data
free -m
cat /proc/mtd

RD03 的架构应显示为:

text
aarch64

重点检查 /data,为 ShellCrash 预留至少 30 MB 可用空间,并在安装时选择 /data

/tmp 是内存文件系统。它显示的可用空间来自 RAM,文件会在重启后消失,并且会和 Mihomo 争抢内存。

8. 修改 root 密码

在路由器 SSH 中执行:

sh
passwd

连续输入两次新密码。输入过程中终端保持空白,这是正常现象。

保持当前 SSH 窗口开启。另开一个终端,用新密码重新登录一次,确认密码有效。

9. 配置 SSH 公钥登录

以下命令在电脑上执行。

先创建 Ed25519 密钥。已经有 ~/.ssh/id_ed25519.pub 时跳过:

bash
ssh-keygen -t ed25519 -a 100

把公钥上传到路由器:

bash
scp ~/.ssh/id_ed25519.pub root@192.168.31.1:/tmp/client.pub

如果前面的 SSH 需要临时启用 ssh-rsa 主机密钥算法,scp 也使用同一选项:

bash
scp -o HostKeyAlgorithms=+ssh-rsa ~/.ssh/id_ed25519.pub root@192.168.31.1:/tmp/client.pub

进入路由器:

bash
ssh root@192.168.31.1

在路由器中执行:

sh
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

再开一个终端测试密钥登录:

bash
ssh root@192.168.31.1

新窗口能直接登录后,再继续安装 ShellCrash。后续以公钥作为主要登录入口,路由器后台中的 SSH 端口转发保持关闭。

10. 安装 ShellCrash 1.9.4

以下命令在路由器 SSH 中执行:

sh
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/1.9.4'
sh -c "$(curl -kfsSL "$url/install.sh")"
. /etc/profile >/dev/null 2>&1

GitHub Raw 连接失败时,使用 ShellCrash README 提供的 jsDelivr 源:

sh
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

安装程序检测到小米原厂系统后,按下面选择:

text
安装位置:1    # /data
确认安装:1
命令别名:1    # crash

最终目录是:

text
/data/ShellCrash

检查安装结果:

sh
ls -ld /data/ShellCrash
crash -h

Mihomo 核心的下载由 ShellCrash 在路由器端完成。

11. 完成第一次初始化和 SSH 软固化

在路由器 SSH 中执行:

sh
crash

第一次运行会进入新手引导,按下面选择:

text
使用环境: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_entelnet_enuart_enboot_wait
  • bdata 分区保持原值。

软固化脚本负责重启 Dropbear;Telnet 服务和 WAN 侧 SSH 规则保持原有关闭状态。

SSH 软固化文件位于 /data/ShellCrash。计划卸载 ShellCrash 时,请在重启前配置独立的 SSH 持久化方式。

12. 选择低内存 Mihomo 核心

再次执行:

sh
crash

依次进入:

text
9  更新与支持
2  切换内核文件
5  切换版本分支及压缩方式
1  最简编译 release 版本,UPX 压缩
1  Mihomo

ShellCrash 会自动识别 arm64 并下载对应核心。

最简 release 核心覆盖普通订阅、规则分流、Redir 和混合模式。GVisor、Tailscale、WireGuard 或 NaiveProxy 场景需要改用标准 release 核心。

13. 配置低内存运行模式

进入 ShellCrash 主菜单:

sh
crash

13.1 设置路由模式

依次选择:

text
2  功能设置
1  路由模式设置
1  Redir 模式

Redir 模式接管 TCP,UDP 沿原网络路径传输。先用这一模式完成低内存基础验证。

13.2 设置 DNS

依次选择:

text
2  功能设置
2  DNS 设置
1  MIX 模式

MIX 模式让国内域名返回真实地址,其他域名使用 Fake-IP 分流,适合与 ShellCrash 的国内 IP 绕过配合使用。

13.3 保持国内 IP 绕过

依次进入:

text
2  功能设置
3  透明路由流量过滤

确认下面一项是 ON

text
过滤 CN_IP 列表:ON

它让国内目的地址在进入 Mihomo 前直接转发,可以减少核心连接数。显示为 ON 即已完成,直接返回上级菜单。

13.4 配置 IPv6

低内存基线采用 IPv4。在小米路由器管理后台关闭 IPv6 后,客户端统一使用 IPv4 规则,同时减少连接和 DNS 状态。

如果保留路由器 IPv6,进入:

text
2  功能设置
8  IPv6 设置

低内存初始配置应显示:

text
IPv6 透明路由:OFF
IPv6-DNS 解析:OFF

需要 IPv6 代理时再逐项开启,并重新观察内存。

13.5 设置开机延时

进入:

text
4  启动设置

确认:

text
允许 ShellCrash 开机启动
小闪存模式:OFF
自启延时:60 秒

小闪存模式保持 OFF,让核心和数据库保存在 /data,将 RAM 留给 Mihomo 运行。

首轮配置省略本地 Dashboard 和完整 GeoSite 数据库。基础测试稳定后,再按实际规则需求添加。

14. 导入订阅链接

配置服务商提供完整的 Clash/Mihomo 配置链接时,执行:

sh
crash

依次选择:

text
6  管理配置文件
2  在线获取配置文件

粘贴配置链接,等待 ShellCrash 下载并校验。配置链接通常包含账号凭据,请仅在 ShellCrash 中保存;Git 仓库和截图使用脱敏内容。

导入结束后,遇到“是否立即启动/重启服务”先选择 0,最后统一手动启动。

15. 导入电脑上的 config.yaml

使用完整 config.yaml 时,先停止路由器服务:

bash
ssh root@192.168.31.1 'crash -s stop'

在电脑上上传配置:

bash
scp /path/to/config.yaml root@192.168.31.1:/tmp/config.yaml

Windows Git Bash 可以直接使用 Windows 路径,例如:

bash
scp /c/Users/your_name/Downloads/config.yaml root@192.168.31.1:/tmp/config.yaml

进入路由器并运行 ShellCrash:

bash
ssh root@192.168.31.1
crash

ShellCrash 会发现 /tmp/config.yaml,显示:

text
是否加载为 Mihomo 的配置文件?(1/0)

输入 1。配置会保存到:

text
/data/ShellCrash/yamls/config.yaml

完整 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 中执行:

sh
crash -s start

检查核心:

sh
pidof CrashCore

有数字输出表示 Mihomo 已经运行。

查看内存:

sh
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 和系统代理仍然关闭,再在电脑执行:

bash
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 代理时,改用混合模式。

先停止服务:

sh
crash -s stop

进入菜单:

text
2  功能设置
1  路由模式设置
2  混合模式

混合模式使用 Redir 转发 TCP,使用 TUN 转发 UDP。保持 过滤 CN_IP 列表:ON 后,国内目的地址会直接转发,其他 UDP 才进入 Mihomo。

重新启动:

sh
crash -s start

切换后重新记录 MemAvailableVmRSS。混合模式作为 UDP 需求的初始方案;完整 TUN 模式适用于 TCP 和 UDP 都需要进入 TUN 的场景,并会增加内存和连接开销。

19. 日常启动、停止和查看状态

进入管理菜单:

sh
crash

直接启动:

sh
crash -s start

直接停止:

sh
crash -s stop

查看帮助:

sh
crash -h

停止服务会停止 Mihomo,并移除 ShellCrash 当前创建的透明代理和 DNS 防火墙规则。完成后路由器继续运行,局域网设备恢复原有网络路径。

20. 更新订阅或 YAML

更新前先停止服务,使低内存设备在配置校验期间保持单核心运行:

sh
crash -s stop

更新已经保存的订阅链接:

text
crash
6  管理配置文件
7  更新配置文件
1  确认更新

更新电脑上的 YAML:

bash
scp /path/to/config.yaml root@192.168.31.1:/tmp/config.yaml
ssh root@192.168.31.1
crash

确认加载新配置后启动:

sh
crash -s start

/data/ShellCrash/yamls/config.yaml 或订阅生成的配置包含全部节点和规则。电脑仅负责上传新文件。

21. 监控内存和运行稳定性

启动后分别在 1 分钟、10 分钟、30 分钟和 2 小时记录:

sh
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

内存判断使用 MemAvailableMemFree 表示当前完全空闲的页;Linux 文件缓存可以按需回收。

出现以下情况时先停止 ShellCrash:

  • MemAvailable 长时间低于约 20 MB
  • VmRSS 持续增长,数小时后仍在上升;
  • Wi-Fi 反复消失,路由器自动重启;
  • 日志出现 OOM、Killed process 或 kernel panic。

检查内核日志:

sh
dmesg | grep -Ei 'oom|out of memory|killed process|panic'

降低内存占用的顺序:

  1. 从混合模式切回 Redir;
  2. 保持小闪存模式关闭;
  3. 使用最简 release + UPX 的 Mihomo;
  4. 大型规则集和 rule-provider 仅保留实际使用项;
  5. 减少节点数量和自动测速组;
  6. 关闭域名嗅探、Dashboard 和详细日志;
  7. 关闭 IPv6 透明代理。

路由器内保持单个 Mihomo/CrashCore 进程。调试、更新核心或校验大型配置前,先执行:

sh
crash -s stop

22. 验证重启后的 SSH 和代理

先让 ShellCrash 连续稳定运行至少 30 分钟,再执行一次受控重启:

sh
reboot

Wi-Fi 和有线设备会在路由器重启期间断网。等待路由器恢复后,在电脑测试:

bash
ssh root@192.168.31.1

进入路由器后检查:

sh
pidof dropbear
pidof CrashCore
grep -E 'MemAvailable' /proc/meminfo

ShellCrash 设置了 60 秒启动延时。路由器恢复 Wi-Fi 后等待延时结束,再检查 Mihomo。

如果第一次重启后出现 SSH 主机密钥变化,并且确认当前连接的是自己的路由器,可以在电脑删除旧记录后重新连接:

bash
ssh-keygen -R 192.168.31.1
ssh root@192.168.31.1

如果每次重启主机密钥都会变化,SSH 主机密钥软固化需要修复。重新使用 XMiR 开启临时 SSH,再检查 /data/ShellCrash/configs/dropbear_rsa_host_key

23. 关闭开机启动

暂停代理时,先停止服务:

sh
crash -s stop

再进入:

text
crash
4  启动设置
1  禁止 ShellCrash 开机启动

该设置保留所有配置和 SSH 文件,下次开机时 Mihomo 保持停止状态。

24. 卸载 ShellCrash

保持当前 SSH 窗口开启,执行:

sh
crash -u

确认卸载时选择配置保留方式。完全删除对应选项为 0

SSH 软固化文件属于 ShellCrash。需要在后续重启中继续使用 SSH 时,先按下一节配置独立持久化,再卸载 ShellCrash。

25. 可选:使用 XMiR 配置独立永久 SSH

需要让 SSH 与 ShellCrash 完全独立时,可以使用 XMiR 官方的 Install permanent SSH

如果 Mihomo 正在运行,先在路由器中执行:

sh
crash -s stop

先在 XMiR 主菜单选择:

text
4 - Create full backup

备份保存在电脑的:

text
~/ax3000t-setup/xmir-patcher/backups/

把整个 backups 目录复制到其他安全位置,然后选择:

text
6 - Install permanent SSH

当前 XMiR 实现会安装 SSH 定时修复脚本和防火墙启动钩子;持久标志需要启用时,它还会写入 bdata,设置 telnet_enssh_enuart_enboot_wait

这一步会修改持久分区。XMiR 的卸载命令会移除定时任务和启动钩子,已经写入的 bdata 标志则保留修改后的值。操作前备份用于后续恢复。

Windows Git Bash 卸载 XMiR 的 SSH 启动钩子:

bash
cd ~/ax3000t-setup/xmir-patcher
cmd.exe /c run.bat install_ssh.py uninstall

macOS Terminal:

bash
cd ~/ax3000t-setup/xmir-patcher
./run.sh install_ssh.py uninstall

手动改写 bdata 前,先准备原始备份和经过验证的恢复方案。

26. 常见问题

SSH 提示密码错误

回到 XMiR:

text
8 - Other functions
2 - Change root password

重新设置密码后再登录。

SSH 提示 REMOTE HOST IDENTIFICATION HAS CHANGED

确认路由器刚刚重启或重新生成过 Dropbear 主机密钥后执行:

bash
ssh-keygen -R 192.168.31.1

随后重新连接并保存新指纹。

ShellCrash 启动后国内应用变慢

检查以下三项:

text
DNS 模式:MIX
过滤 CN_IP 列表:ON
小闪存模式:OFF

然后停止并重新启动服务。

手机应用部分内容反复加载失败

先从 Redir 切换到混合模式,让 UDP 进入 Mihomo;同时保持 CN_IP 绕过开启。切换后观察内存,再测试国内应用和国外应用。

路由器 Wi-Fi 消失或自动重启

重新开机后先停止 ShellCrash:

sh
crash -s stop

检查 OOM 和 panic:

sh
dmesg | grep -Ei 'oom|out of memory|killed process|panic'

采用 Redir、最简核心、关闭 IPv6 和精简规则集的配置重新启动。测试期间一次运行一个核心。

27. 上游资料

基于 MIT 许可发布

加载中...