说明

本文面向 小米路由器 3G(R3G / MIR3G / xiaomi_mi-router-3g),目标是刷入基于 OpenWrt 的系统(本文以 ImmortalWrt 稳定版为主),并实现:

  • 模式 A(旁路由/二级路由):设备连接小米 3G(Wi‑Fi/有线)→ 走“策略网络”;设备连接光猫(Wi‑Fi/有线)→ 走“普通国内网络”。
  • 模式 B(主路由):小米 3G 尽量支持作为主路由工作;若光猫不桥接且不支持 PPPoE passthrough/多拨,则退化为“双重 NAT 的主路由体验”。
  • USB3.0 扩展:挂载 U 盘/移动硬盘,做 extroot(扩容)、插件仓库、NAS、下载机等。

合规提示:本文只提供设备刷机、网络基础配置、存储与服务的通用方法。涉及“代理/隧道/VPN 等跨境访问”用途,请务必遵守当地法律法规与运营商条款;本文不会提供绕过监管的具体操作指导。


项目目录结构(你电脑上的仓库)

  • xiaomi3G_openwrt/tools/macos/:macOS 侧可能用到的工具/下载产物
  • xiaomi3G_openwrt/shell_script/macos/:macOS 侧脚本(下载、校验)

你需要准备什么

硬件

  • 网线 ×1(强烈建议全程有线)
  • U 盘(FAT32)×1(≥1GB;用于“U 盘恢复刷机/存放镜像/备份”)
  • USB3.0 移动硬盘或大容量 U 盘 ×1(建议 ≥32GB;用于 extroot + 数据盘)
  • 手机(用于 Mi WiFi App 绑定小米账号)

账号/软件

  • 小米账号(用于下载 miwifi_ssh.bin、获取 root 密码)
  • macOS 终端(自带 sshscpcurlshasum

重要概念(先看,少踩坑)

1)为什么要“开发版 → SSH → 写入 ImmortalWrt”

小米原厂固件默认不开放 SSH。常见可行流程是:

  1. 通过 U 盘恢复刷入 开发版固件
  2. 绑定到小米账号后,从官方页面下载 miwifi_ssh.bin 并获得 root 密码
  3. 再次通过 U 盘恢复刷入 miwifi_ssh.bin,开启 SSH
  4. SSH 登录后,把 ImmortalWrt 写入 NAND 指定分区(kernel1 / rootfs0

2)为何“不改桥接”时 PPPoE 可能失败

PPPoE 通常需要二层透传(桥接)或光猫支持 PPPoE passthrough/多拨。你目前“不想/不能桥接光猫”,所以模式 B 分两种:

  • B1(理想):光猫支持 PPPoE passthrough/多拨 → 小米 WAN 可 PPPoE 成功
  • B2(常见):光猫不支持且不桥接 → 小米无法 PPPoE,只能 DHCP 上联(双重 NAT)

固件与资源下载(强烈建议先下载完并校验)

1)一键下载与校验(macOS)

在仓库根目录执行:

bash xiaomi3G_openwrt/shell_script/macos/download_firmware.sh
bash xiaomi3G_openwrt/shell_script/macos/verify_immortalwrt_sha256.sh

下载产物默认在:

  • xiaomi3G_openwrt/tools/macos/downloads/

2)本文使用的关键下载链接(可手动下载)

ImmortalWrt(用于刷机)

  • 目录(含 sha256sums):https://mirrors.ustc.edu.cn/immortalwrt/releases/24.10.4/targets/ramips/mt7621/
  • R3G 写入分区用文件:
    • immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-kernel1.bin
    • immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-rootfs0.bin
  • R3G 后续升级用文件:
    • immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-sysupgrade.bin

小米原厂固件(用于开发版/救砖回滚)

(来源索引页:https://mirom.ezbox.idv.tw/en/miwifi/R3G/

  • 重要:先分清“开发版”与“稳定版”

    • 开发版:用于开启 SSH(后续刷 ImmortalWrt 必经)
    • 稳定版:用于救砖/回滚(让路由器恢复到原厂可用状态)
  • 稳定版(救砖回滚用,最新稳定):

    • https://bigota.miwifi.com/xiaoqiang/rom/r3g/miwifi_r3g_firmware_9be74_2.28.44.bin
  • (可选)稳定版(备份你当前正在用的版本:2.28.24):

    • https://bigota.miwifi.com/xiaoqiang/rom/r3g/miwifi_r3g_firmware_26d93_2.28.24.bin
    • 用途:如果你后续想回到你现在这版(而不是 2.28.44),就用它做 U 盘恢复回滚。
  • 开发版(走 SSH 流程用,最新开发):

    • https://bigota.miwifi.com/xiaoqiang/rom/r3g/miwifi_r3g_firmware_12f97_2.25.124.bin

miwifi_ssh.bin(需要登录小米账号)

  • 获取入口:https://d.miwifi.com/rom/ssh

该页面常见问题:URL 可能被页面脚本改成 http 导致打不开,手动改回 https 即可。


模式与接线

刷机/解锁阶段建议接线(先看,少踩坑)

为了避免网段冲突、DHCP 干扰、以及误插 WAN 口导致“电脑拿不到 IP”,建议你按阶段接线:

  • 阶段 1:第 1~3 步(刷开发版 / 刷 miwifi_ssh.bin / SSH 写入 ImmortalWrt)

    • 光猫:先不连接(小米 WAN 口保持空着)
    • 电脑:网线直连小米 LAN 口(不要插 WAN)
    • U 盘:只在“U 盘恢复刷机/写入”那一刻插入;完成后就拔掉(下面各步骤会再次提醒)
  • 阶段 2:进入 ImmortalWrt 后配置模式 A/B(第 5~6 步)

    • 光猫 LAN → 小米 WAN 口
    • 设备按需连接小米(走策略网络)或光猫(走国内网络)

模式 A:旁路由/二级路由(推荐日常)

  • 光猫:保持拨号/NAT/DHCP/Wi‑Fi(国内网络)
  • 小米(ImmortalWrt):做二级路由(你把需要“策略网络”的设备连到小米)

接线:

  • 光猫 LAN → 小米 WAN 口
  • 设备 → 小米(Wi‑Fi/有线)

模式 B:主路由(按需切换)

你希望“需要的时候手动切换”,因此仍推荐接线保持一致:

  • 光猫 LAN → 小米 WAN 口

只在 ImmortalWrt 里切换 WAN 协议:

  • 尝试 PPPoE(B1)
  • 失败则改回 DHCP(B2)

第 1 步:刷入小米“开发版固件”(U 盘恢复)

1.1 制作 U 盘(FAT32 + miwifi.bin)

  1. U 盘格式化为 FAT32(你可以用 macOS“磁盘工具”图形界面完成)
  2. 把开发版固件复制到 U 盘根目录,并重命名为 miwifi.bin
    • 原文件:miwifi_r3g_firmware_12f97_2.25.124.bin
    • 不要拿稳定版(2.28.xx)来做这一步:稳定版不用于开启 SSH

1.2 进入 U 盘恢复刷机

  1. 路由器断电
  2. U 盘插入路由器 USB 口
  3. 按住 Reset 不放,上电
  4. 看到指示灯进入刷机/恢复状态(通常黄灯闪烁/呼吸)后松开 Reset
  5. 等待数分钟直到完成并重启

建议:本阶段先不要连接光猫;刷机完成、蓝灯稳定后,把 U 盘拔掉 再进行初始化。

1.3 初次初始化(网页端)

电脑接入小米路由器 LAN(或 Wi‑Fi),打开管理页完成初始化(管理员密码/Wi‑Fi 名称)。


第 2 步:绑定小米账号并安装 SSH(miwifi_ssh.bin

2.1 绑定路由器到小米账号

  1. 手机连接小米路由器 Wi‑Fi
  2. 打开 Mi WiFi App,登录小米账号
  3. 按引导把路由器绑定到账号

2.2 下载 miwifi_ssh.bin 并获取 root 密码

  1. 用浏览器打开:https://d.miwifi.com/rom/ssh
  2. 登录小米账号后按页面提示操作
  3. 下载得到 miwifi_ssh.bin
  4. 页面会给出 root 密码(或生成与序列号相关的密码)——务必保存

2.3 用 U 盘恢复刷入 miwifi_ssh.bin

  1. U 盘根目录只放 miwifi_ssh.bin(不要再放 miwifi.bin
  2. 重复“按住 Reset 上电 → 等待完成”的 U 盘恢复流程

强烈建议:执行完成、蓝灯稳定后 拔掉 U 盘 再重启一次路由器,然后再做 2.4(避免 U 盘残留触发重复流程/影响排错)。

2.4 SSH 登录验证

  1. 电脑接入小米路由器 LAN
  2. 终端执行(开发版 LAN 侧常见为 192.168.31.1):
# macOS 新版 OpenSSH 可能不兼容小米开发版的旧算法,推荐用下面这条(你已实测可用)
ssh \
  -oKexAlgorithms=diffie-hellman-group14-sha1 \
  -oHostKeyAlgorithms=ssh-rsa \
  [email protected]
  1. 输入第 2.2 步获得的 root 密码

能登录即表示 SSH 已就绪。


第 3 步:刷入 ImmortalWrt(写入 kernel1 / rootfs0

这是最关键步骤:会写 NAND。强烈建议先备份分区。

接线建议(本步骤期间):

  • 光猫:先不连接(小米 WAN 口保持空着)
  • 电脑:网线直连小米 LAN 口
  • U 盘:仅用于“备份分区/存放镜像/写入”,完成后建议拔掉

3.1 备份分区(建议必做)

  1. 插入 U 盘(FAT32)到路由器 USB 口
  2. SSH 登录后查看分区表:
cat /proc/mtd

你这台 R3G 的分区表(你已实测)里,关键分区名如下:

  • kernel1:mtd9
  • rootfs0:mtd10

后续写入 ImmortalWrt 时会用到的就是这两个“分区名”(不是 mtd 编号)。

  1. 找到 U 盘挂载点(不同固件可能不同):
mount
df -h

你当前环境里 U 盘识别为 /dev/sda1,挂载在 /extdisks/sda1(你已实测)。 下面示例就以 USB=/extdisks/sda1 为准。

  1. 备份(推荐:把所有 mtd 分区都备份一份,最省心):
USB=/extdisks/sda1
mkdir -p "$USB/backup/mtd"

# 记录分区表和关键启动变量(排查/回滚会用到)
cat /proc/mtd > "$USB/backup/proc_mtd.txt"
nvram show > "$USB/backup/nvram_show.txt" 2>/dev/null || true

# 备份所有分区(跳过 /proc/mtd 表头)
# 注意:小米开发版环境用的是 /bin/ash,可能不支持 bash 的 “done < <(…)” 进程替换写法;
# 同时某些分区(例如你这里的 mtd14 "data")正在被系统挂载使用,会出现 “Device or resource busy”,属于正常现象。
# 处理原则:
# - 先保证把关键分区(尤其是 bootloader/factory/kernel/rootfs)备份到位
# - 对于 busy 的分区:记录 WARN 并跳过即可(你已经备份了 mtd0 "ALL" 时更不影响救砖)
tail -n +2 /proc/mtd | while read -r dev size erasesize name; do
  # dev: mtd0:
  dev="${dev%:}"
  # name: "bootloader"
  name="${name%\"}"
  name="${name#\"}"
  echo "backup $dev -> ${name}.bin"
  dd if="/dev/${dev}" of="$USB/backup/mtd/${dev}_${name}.bin" || echo "[WARN] skip ${dev} (${name})"
done

sync
ls -lh "$USB/backup/mtd" | head

可选:如果你想把“data(/data)里的内容”也备份一份(不碰 raw 分区,最安全),可以打包目录:

tar -C / -czf "$USB/backup/data_dir.tgz" data
sync

说明:这里用 tail -n +2 跳过 /proc/mtd 第一行表头。若你的系统没有 tail -n +2,可改成 sed '1d' /proc/mtd

  1. 把备份拷回电脑(macOS)长期保存:
# 先确认U盘挂载点,再把备份目录拷到电脑当前目录
# 说明:macOS 新版 OpenSSH 的 scp 默认走 SFTP;而小米开发版环境可能缺少 sftp-server,
# 会报 “/usr/libexec/sftp-server: not found”。用 -O 强制走旧版 SCP 协议即可。
scp -O -r \
  -oKexAlgorithms=diffie-hellman-group14-sha1 \
  -oHostKeyAlgorithms=ssh-rsa \
  [email protected]:/extdisks/sda1/backup ./backup_r3g_$(date +%F)/

说明:小米开发版的 SSH 算法较旧,macOS 新版 OpenSSH/scp 可能报 “no matching key exchange method found”。上面命令通过 -oKexAlgorithms 做了兼容。 另外,有些环境的 scp 不支持 KexAlgorithms=+xxx 这种“追加语法”,所以这里用的是“直接指定算法列表”的写法(兼容性更好)。 等你刷入 ImmortalWrt 后通常不再需要这些参数。

备选方案(不用 scp):用 tar 走 SSH 打包传回本地(也兼容缺少 sftp-server 的环境):

ssh -oKexAlgorithms=diffie-hellman-group14-sha1 -oHostKeyAlgorithms=ssh-rsa [email protected] \
  "tar -C /extdisks/sda1 -czf - backup" > "backup_r3g_$(date +%F).tgz"
  1. 备份完成后不要只放在 U 盘:建议再拷到 NAS/云盘一份(救砖时非常值钱)。

3.2 准备 ImmortalWrt 镜像文件

把下面两个文件准备好(推荐放到 U 盘根目录;也可以用 macOS 直接 scp 上传):

  • immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-kernel1.bin
  • immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-rootfs0.bin

并确保已通过 sha256sums 校验。

方式 A(推荐):直接上传到 U 盘挂载点(你这里是 /extdisks/sda1,后面的写入命令就不用改):

cd xiaomi3G_openwrt/tools/macos/downloads

scp -O \
  -oKexAlgorithms=diffie-hellman-group14-sha1 \
  -oHostKeyAlgorithms=ssh-rsa \
  immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-kernel1.bin \
  immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-rootfs0.bin \
  [email protected]:/extdisks/sda1/

方式 B(备选):上传到路由器 /tmp(临时目录,重启会清空;后面的写入命令需要把 cd 改到 /tmp):

cd xiaomi3G_openwrt/tools/macos/downloads

# 说明:小米开发版 SSH 算法较旧,且可能缺少 sftp-server;
# -O 强制 scp 走旧协议,避免默认走 SFTP 报错
scp -O \
  -oKexAlgorithms=diffie-hellman-group14-sha1 \
  -oHostKeyAlgorithms=ssh-rsa \
  immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-kernel1.bin \
  immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-rootfs0.bin \
  [email protected]:/tmp/

3.3 写入镜像并切换启动

注意:分区名必须是 kernel1rootfs0(R3G 常见布局如此)。执行前先用 cat /proc/mtd 确认;写错分区会变砖。

这里需要登录到路由器 [email protected]

# 如果你按“方式 A”把固件放到 U 盘:就在 /extdisks/sda1 执行
# 如果你按“方式 B”把固件放到 /tmp:就把下面这行改成 cd /tmp
cd /extdisks/sda1

# 先确认文件存在、大小正常(避免写入 0 字节/下载不完整)
ls -lh immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-kernel1.bin \
      immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-rootfs0.bin

mtd write immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-kernel1.bin kernel1
mtd write immortalwrt-24.10.4-ramips-mt7621-xiaomi_mi-router-3g-squashfs-rootfs0.bin rootfs0

# 启动标记(不同小米固件变量可能略有差异)
nvram set flag_try_sys1_failed=1
nvram commit
reboot

第 4 步:首次进入 ImmortalWrt 与基础设置

首次刷入后 Wi‑Fi 可能未配置,建议按下面方式做“首次登录”,最不容易卡住:

  1. 断开光猫(先不要把小米 WAN 接到光猫,避免网段冲突/浏览器缓存跳转)。
  2. 电脑用网线连接小米 LAN 口
  3. 等待重启完成(NAND 写入后首次启动可能更慢,建议等 3~5 分钟)。
  4. 打开 http://192.168.1.1(如打不开,尝试把电脑网卡改成静态 IP:192.168.1.2/24,网关 192.168.1.1)。
  5. 设置 root 密码并进入 LuCI。

常见问题排查:

  • 进不了 192.168.1.1:先 ping 192.168.1.1 看是否通;不通就换网线/换 LAN 口/等更久;仍不通 → 进入“救砖/回滚”章节用 USB 恢复回原厂再重试。
  • 网段冲突:如果你家光猫是 192.168.1.1(常见),等你后面把小米做二级路由时,小米 LAN 一定要改成别的网段(例如 192.168.31.1,见第 5 步)。

第 5 步:模式 A(旁路由/二级路由)网络配置

5.1 IP 规划建议

  • 光猫 LAN:保持现状(例如 192.168.1.1/24192.168.0.1/24
  • 小米 LAN:改为不冲突网段,例如 192.168.31.1/24(适用于你当前“光猫 192.168.1.1”的情况)

5.2 WAN(上联光猫)

  • 协议:DHCP Client

5.3 LAN / DHCP

  • LAN IP:192.168.31.1/24
  • DHCP:开启(例如 192.168.31.100 - 192.168.31.200

5.4 Wi‑Fi

  • 2.4G/5G 都开启
  • SSID 明确区分(按你的命名):Xiaomi_zjw(2.4G) / Xiaomi_zjw_5G(5G)

5.5 LuCI 按图操作(小白版)

接线先按模式 A:

  • 光猫 LAN → 小米 WAN
  • 电脑先连小米 LAN 口进入 LuCI

在 LuCI 依次做:

  1. 网络 → 接口 → WAN
    • 协议:DHCP 客户端
    • 保存&应用
  2. 网络 → 接口 → LAN
    • IPv4 地址:192.168.31.1
    • IPv4 子网掩码:255.255.255.0
    • 保存&应用
  3. 网络 → DHCP/DNS
    • 确认 LAN 口 DHCP 服务已启用
    • 地址池建议:192.168.31.100 - 192.168.31.200
  4. 网络 → 无线
    • 启用 2.4G + 5G
    • SSID 按你的命名:
      • 2.4G:Xiaomi_zjw (看频段)
      • 5G:Xiaomi_zjw_5G(看频段)

重要:你当前光猫是 192.168.1.1,而 ImmortalWrt 首次进入默认常见是 192.168.1.1,会冲突;所以第 2 步把小米 LAN 改到 192.168.31.1(或其它不冲突网段)是关键。

5.6 验收(模式 A 是否配置成功)

用两台设备分别测试(最直观):

  • 设备 A(连光猫 Wi‑Fi)
    • IP 应该是光猫网段(例如 192.168.1.x
    • 网关应是光猫(例如 192.168.1.1
  • 设备 B(连小米 Wi‑Fi 或 LAN)
    • IP 应该是 192.168.31.x
    • 网关应是 192.168.31.1
    • 能正常上网(先测 ping 114.114.114.114,再测 DNS 解析)

5.7 常见坑(模式 A)

  • 双 DHCP:如果你把小米 LAN 口接到了光猫 LAN(而不是 WAN),容易出现网络里两个 DHCP;模式 A 固定用“光猫 LAN → 小米 WAN”。
  • 网段冲突:光猫和小米都用 192.168.1.1 会抢网关;务必把小米 LAN 改到 192.168.31.1 或其它网段。
  • SSID 混淆:建议光猫和小米 SSID 命名明显区分,避免连错导致“怎么不一样”的错觉。

第 6 步:模式 B(主路由拨号/主路由体验)

6.0 判定 PPPoE passthrough/多拨是否可用(不改桥接前提)

你当前不改光猫桥接,所以这里做一个“实测判定”:

  1. 接线:光猫 LAN → 小米 WAN
  2. LuCI:网络 → 接口 → WAN → 编辑
    • 协议:PPPoE
    • 填入:宽带账号/密码
    • 保存&应用
  3. 等待 30~60 秒,看 WAN 状态:
    • 拨号成功:WAN 显示 PPPoE 分配的地址并能上网 → 进入 B1
    • 拨号失败/超时:多半是不支持 passthrough/多拨 → 进入 B2

判定小技巧(更稳):

  • 若 WAN IPv4 是 10.x / 172.16-31.x / 192.168.x,一般就是私网(更像 B2)
  • 若 WAN 是私网且你查询到的“外网 IP”明显不同,基本就是双 NAT(B2)

6.1 B1:PPPoE 成功(理想)

  • WAN:PPPoE(保持)
  • LAN:你的内网网段(例如 192.168.31.1/24
  • DHCP/Wi‑Fi:开启

建议:

  • 尽量让设备只连接小米(避免“同一个家里两套路由并存”造成路径混乱)。
  • 若光猫 Wi‑Fi 必须开着,至少把 SSID 命名区分明显,避免连错。

6.2 B2:PPPoE 不可用(常见)

  • WAN:DHCP(从光猫拿到私网地址)
  • 小米继续提供 DHCP/Wi‑Fi(主路由体验),但本质是 双重 NAT

这种情况下,你“主路由体验”是有的(设备都连小米),但:

  • 一些需要入站端口/远程访问的场景会更麻烦(需要在光猫和小米两边都做端口映射)
  • 某些游戏/语音/点对点应用可能更挑网络

可选优化(如果你能操作光猫管理页):

  • DMZ:把光猫 DMZ 指向“小米 WAN 获取到的地址”
    • 优点:你只需要在小米上做端口转发,光猫层面基本不用再配
    • 风险:等同把小米暴露在光猫之后,务必关掉不需要的管理入口、保持系统更新、强密码

可选:DNS 加速 + 网络稳定性优化(推荐做)

本节只做“上网体验/稳定性”优化,不依赖任何代理类插件;建议在你完成模式 A/B 并能正常上网后再做。

DNS 加速(dnsmasq 缓存 + 指定上游)

LuCI:网络 → DHCP/DNS

  • DNS 转发(上游 DNS):建议填 2 个稳定的公共 DNS(示例)
    • 223.5.5.5
    • 119.29.29.29
  • DNS 缓存大小:建议 10000(家用足够)

可选(更“强制”一点,避免被上联下发 DNS 覆盖):

  1. LuCI:网络 → 接口 → WAN → 编辑 → 高级设置
  2. 勾选 忽略此接口的 DNS 服务器(Ignore DNS server advertised by peer)

验证(在路由器上执行):

nslookup www.baidu.com
nslookup www.qq.com

网络加速/稳定性(流量分载)

LuCI:网络 → 防火墙 → 常规设置

  • 软件流量分载(Software flow offloading):开启
  • 硬件流量分载(Hardware flow offloading):有的话再开启

提示:开启后大流量转发 CPU 占用会下降、吞吐更稳;但极少数插件/特殊场景可能与分载有冲突,遇到异常可先关闭验证。

Wi‑Fi 稳定性建议(家用最常见的几条)

LuCI:网络 → 无线

  • 2.4G:建议固定信道为 1/6/11 之一,带宽优先 20MHz(更稳)
  • 5G:优先选择非 DFS 常用信道(减少因雷达检测导致的断流/换信道)
  • SSID 按你的命名:Xiaomi_zjw(2.4G)/ Xiaomi_zjw_5G(5G)

验证(终端):

# 用 curl 测真实联网(比 ping 更可靠,很多网络会屏蔽 ICMP)
curl -I https://www.baidu.com

第 7 步:USB3.0 扩展(挂载 + extroot + NAS/下载机)

7.0 先选一种用法(强烈建议先看完再动手)

第 7 步不是必须的。 如果你当前目标只是:刷机成功 + 旁路由/主路由模式正常上网(含代理/分流),完全可以先跳过第 7 步。 等你以后确实需要用 USB3.0 挂硬盘(做 NAS/下载机,或觉得插件空间不够才想 extroot)时,再回来按第 7 步做就行。 小米路由器 3G(R3G)日常当路由/旁路由是够用的,但要不要长期挂外置盘,取决于你要跑多“重”的功能。 硬件大概够不够 内存(RAM):一般是 256MB 够:普通拨号/DHCP/NAT、Wi‑Fi、基础科学上网(单一代理内核+少量规则)、轻量 DNS 去广告 紧张:多插件并发(OpenClash 大规则/大订阅、复杂分流、下载机+NAS 同开、日志/监控一堆) 机身存储(Flash/NAND):一般 128MB 够:干净系统 + 少量插件 容易满:装很多 LuCI 插件、代理套件、adblock 规则很大、下载机/媒体服务等

本节分 3 种情况,你只需要选一种做(不要混着做):

  • 情况 1:只挂载数据盘(不做 extroot)(推荐大多数人)

  • 使用场景:你主要想要 NAS/下载机/存储共享;路由器本体(网络、插件、配置)不依赖硬盘。

  • 建议:最稳、最少坑。硬盘不是“系统必需品”,拔掉也不影响路由器基本工作。

  • 要做的操作

    • 做到:7.37.47.5
    • 不要做7.6(extroot)
  • 情况 2:extroot(把 /overlay 迁移到 USB)

  • 使用场景:你要装较多插件/规则,担心内部 NAND 空间不够或写入过多;愿意让 USB 盘长期连接。

  • 建议:extroot 启用后,USB 盘应当长期插着。拔掉后系统可能回退到内部 NAND 的 overlay,导致“插件/配置像没了”。

  • 要做的操作

    • 做到:7.37.47.57.6
  • 情况 3:extroot + 数据盘服务(NAS/下载机长期运行)(偏重度玩法)

  • 使用场景:你既要大量插件(extroot),又要长期跑 Samba/aria2 等服务,并把数据放在数据盘分区。

  • 建议

    • 外置硬盘务必供电稳定(尽量用带电源盒子/稳定供电的移动硬盘),避免因掉电/松动导致 extroot 异常。
    • 数据目录放数据盘(例如 /mnt/sda2/),系统/插件放 extroot 分区(/overlay)。
  • 要做的操作

    • 做到:7.37.47.57.6
    • 然后按需做:7.7(NAS)、7.8(下载机)

7.1 为什么建议 extroot

OpenWrt 系系统装插件会写入 /overlay(NAND)。用 extroot 把 /overlay 迁移到 USB 存储:

  • 空间更大
  • 减少 NAND 写入,更耐用

7.2 分区建议(推荐)

  • 分区 1:ext4(extroot,建议 4~8GB 或更大)
  • 分区 2:ext4(数据盘:NAS/下载)
  • 可选:swap(512MB~2GB,按插件规模)

重要:macOS 原生不方便直接格式化 ext4。最稳妥做法是:在路由器上分区+格式化(下面给可照抄命令)。

7.3 安装 USB/文件系统组件(路由器上执行)

SSH 登录 ImmortalWrt 后执行:

opkg update

# USB/存储/分区工具
opkg install kmod-usb-storage kmod-usb3 kmod-usb2 kmod-scsi-core \
  block-mount fdisk lsblk

# ext4 + 工具
opkg install kmod-fs-ext4 e2fsprogs

# 可选:FAT/NTFS(你若要临时读写U盘/移动硬盘)
opkg install kmod-fs-vfat dosfstools

# 可选:swap
opkg install swap-utils

插入你的 USB3.0 硬盘/U 盘后,确认识别:

lsblk
block info
dmesg | tail -n 50

下面示例默认你的盘是 /dev/sda。如果你看到的是 /dev/sdb,请把命令里的 sda 全部替换。

7.4 分区与格式化(路由器上执行,注意会清空数据)

DISK=/dev/sda

# 1) 用 fdisk 分区:创建 sda1(extroot) + sda2(data) + (可选)sda3(swap)
fdisk "$DISK"

进入 fdisk 后按顺序输入(一步一步照抄,大小你可自行调整):

  • g(新建 GPT 分区表;如果你更喜欢 MBR,可用 o,但 GPT 更通用)
  • n → 分区 1(extroot)
    • 分区号:1
    • 起始扇区:直接回车
    • 结束扇区:例如 +8G
  • n → 分区 2(数据盘)
    • 分区号:2
    • 起始扇区:回车
    • 结束扇区:回车(用掉剩余空间;如果你要 swap,则给数据盘留一点)
  • (可选)n → 分区 3(swap)
    • 分区号:3
    • 起始扇区:回车
    • 结束扇区:例如 +1G
  • w(写入并退出)

分区完成后格式化:

mkfs.ext4 -F -L extroot /dev/sda1
mkfs.ext4 -F -L data /dev/sda2

# 可选 swap
mkswap -L swap /dev/sda3 2>/dev/null || true

7.5 自动挂载(fstab)

# 生成 fstab
block detect > /etc/config/fstab

# 启用自动挂载(把前两个 mount 的 enabled 改为 1;如有多个条目,按需修改)
uci set fstab.@mount[0].enabled='1'
uci set fstab.@mount[1].enabled='1'
uci commit fstab

/etc/init.d/fstab enable
/etc/init.d/fstab restart
mount | grep -E 'sda1|sda2' || true

建议你在 LuCI:系统 → 挂载点 里再确认一次 UUID/挂载点是否正确。

7.6 配置 extroot(把 /overlay 迁移到 USB)

只在你选择了上面第 2/3 种情况时执行;如果你只想“挂载数据盘”,请跳过本节。

  1. 先把 extroot 分区临时挂载到一个目录(示例 /mnt/extroot):
mkdir -p /mnt/extroot
mount /dev/sda1 /mnt/extroot
  1. 把当前 overlay 内容拷贝过去:
tar -C /overlay -cvf - . | tar -C /mnt/extroot -xvf -
sync
  1. 配置把 /dev/sda1 挂载到 /overlay(推荐用 UUID):
blkid /dev/sda1

/etc/config/fstab(或 LuCI 挂载点)里把 sda1 对应条目改成:

  • 目标(target):/overlay
  • 启用(enabled):1
  1. 重启:
reboot

重启后验证:

df -h | grep -E 'overlay|/dev/sda'
mount | grep overlay

若看到 overlay 来自 /dev/sda1,extroot 生效。

7.7 可选:NAS(Samba4)

opkg update
opkg install luci-app-samba4 samba4-server

LuCI:服务 → 网络共享(Samba4)

  • 共享目录建议放在数据盘(例如 /mnt/sda2/share
  • 账号/权限按家庭需求配置(不建议匿名写入)

7.8 可选:下载机(aria2)

opkg update
opkg install luci-app-aria2 aria2

下载目录同样建议放在数据盘(例如 /mnt/sda2/downloads)。


第 8 步:手动切换清单(A ↔ B)

A → B

  • 接线(两种模式都保持一致,减少插线错误):光猫 LAN → 小米 WAN
  • 切换 WAN 协议(LuCI:网络 → 接口 → WAN → 编辑):
    • 先尝试 PPPoE(填账号/密码)→ 保存&应用
    • 观察 30~60 秒:
      • 成功:进入 B1
      • 失败/超时:改回 DHCP 客户端 → 进入 B2

验收(建议按顺序):

  1. LuCI:状态 → 概览 → WAN
    • B1:应显示 PPPoE 已连接,且 WAN 地址通常不是 192.168.x.x
    • B2:应显示 DHCP 获取到私网地址(常见 192.168.x.x
  2. 终端(可选,SSH 登录路由器后):
ip a show dev wan
ip route
ping -c 3 114.114.114.114
nslookup openwrt.org 114.114.114.114

常见坑(A→B):

  • PPPoE 一直失败:大概率光猫不支持 passthrough/多拨 → 直接切 B2(DHCP)
  • 浏览器进不了 LuCI:多为缓存/网段冲突,建议固定电脑 IP、换浏览器或无痕模式
  • 两边都开 DHCP:模式 B 下“光猫仍在路由模式”时,尽量不要让设备再连光猫 Wi‑Fi,避免网络混乱

B → A

  • WAN 统一切回 DHCP 客户端(LuCI:网络 → 接口 → WAN)
  • LAN 网段保持不变(你这里用 192.168.31.1/24 即可,前提是光猫不是 31 段)
  • 设备按需连接
    • 需要策略网络:连小米
    • 只要国内网络:连光猫

验收(B→A):

  • 设备连小米:拿到 192.168.31.x,网关 192.168.31.1,能上网
  • 设备连光猫:继续拿到光猫网段地址(例如 192.168.1.x),能上网

常见坑(B→A):

  • 把光猫 LAN 插到了小米 LAN:容易出现双 DHCP;模式 A 固定“光猫 LAN → 小米 WAN”
  • 网段冲突:光猫如果是 192.168.1.1,小米 LAN 必须避开 192.168.1.1(例如用 192.168.31.1

救砖/回滚(不拆机)

USB 恢复回原厂稳定版

  1. U 盘 FAT32
  2. 把原厂稳定版复制到 U 盘根目录并重命名为 miwifi.bin
    • miwifi_r3g_firmware_9be74_2.28.44.bin
  3. 按住 Reset 上电进入恢复刷回

建议的“救砖前检查”:

  • 先用网线直连路由器 LAN,看看电脑能不能拿到地址、能不能 ping 192.168.1.1(或你改过的 LAN IP)。
  • 如果完全没反应/频繁重启/管理页打不开,优先走 USB 恢复,成功率最高。

USB 恢复要点(更小白一点):

  • U 盘不要太大、不要带奇怪分区(8~32GB 的普通 U 盘最省心)
  • 根目录只放 miwifi.bin,不要放其它文件
  • 进入恢复后耐心等 5~10 分钟(不要中途断电)

分区恢复(需要你有备份)

适用场景:你还能 SSH 进设备(或至少还能进入某个可执行命令的系统),想把关键分区恢复回备份状态。

思路:

  1. 把你在第 3.1 步备份的文件拷回路由器(例如 /tmp/restore/
  2. 对照 backup/proc_mtd.txt 找到分区名
  3. 使用 mtd write 写回(分区名必须完全匹配

示例(仅示意,按你的备份文件名/分区名调整):

mkdir -p /tmp/restore
cd /tmp/restore

# 假设你拷进来了:mtd0_bootloader.bin / mtd2_factory.bin ...
# 写回示例(高风险!写错会直接变砖!)
# mtd write mtd0_bootloader.bin bootloader
# mtd write mtd2_factory.bin factory

重要警告:bootloader/u-boot 一类分区写错基本“直接硬砖”。如果你不确定,宁可只用 USB 恢复回原厂。

最后兜底(不在本文展开):TTL 串口(需要拆机/接线),仅作为你愿意折腾时的最后手段。


验收清单

  • 模式 A:小米 WAN(DHCP)可上网;小米 LAN/Wi‑Fi 正常;与光猫网络可区分使用
  • 模式 B:
    • B1:PPPoE 拨号成功(若光猫支持)
    • B2:DHCP 上联稳定(双 NAT),主路由体验满足
  • USB3.0:挂载稳定;若启用 extroot,重启后仍生效

相关阅读