为红米AC2100编译OpenWRT

封面
(封面图源小米商城)

TL;DR

在23年下半年的某一天,我一个室友给我安利了这台路由器,但我嫌他贵就没买。后来想象可惜,24年上半年想玩的时候发现下架了!淦,现在又想玩了,就上网上二手收了一台。这个机器是MIPS架构的,RAM和硬盘都只有128MB。对的,是MB,你没看错。确实能买更好的机器,但这个机器拿来练手还是很不错的。

思路

先给机器降级,然后利用旧版系统漏洞刷入Breed,通过Breed来刷入OpenWRT。因为Breed这个bootloader会在你无法开机或手动进入的时候,起一个192.168.1.1的webui用来让你救转/刷入新系统。

刷入Breed

我们先系统降级,下载固件包,再到路由器后台的手动升级里安装这个老版本系统就行。对的没错,小米这个路由器系统做的还算人性化,可以在系统更新里降级系统。

检查硬盘坏快情况(可选操作)

毕竟是二手收来的,成色全靠抽。我这台有三个坏快,淦。。
把电脑通过网线插到路由器的LAN口,进入路由器后台获取你的STOK,替换掉下面的CCCCCCCCCCC,然后打开这个连接,等待一会儿,你的路由器名字会变成Toshiba或者ESMT,后面有可能会接上数字,这个数字就是坏快所在盘块:

1
http://192.168.31.1/cgi-bin/luci/;stok=CCCCCCCCCCC/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=%0A%5B%20-z%20%22%24(dmesg%20%7C%20grep%20ESMT)%22%20%5D%20%26%26%20B%3D%22Toshiba%22%20%7C%7C%20B%3D%22ESMT%22%0Auci%20set%20wireless.%24(uci%20show%20wireless%20%7C%20awk%20-F%20'.'%20'%2Fwl1%2F%20%7Bprint%20%242%7D').ssid%3D%22%24B%20%24(dmesg%20%7C%20awk%20'%2FBad%2F%20%7Bprint%20%245%7D')%22%0A%2Fetc%2Finit.d%2Fnetwork%20restart%0A

刷入Breed

Breed我是在b站这个视频简介里获取到的。
这段链接是刷入Breed的:

1
http://192.168.31.1/cgi-bin/luci/;stok=CCCCCCCCCCC/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=%0Acd%20%2Ftmp%0Acurl%20-o%20B%20-O%20https%3A%2F%2Fbreed.hackpascal.net%2Fr1286%2520%255b2020-10-09%255d%2Fbreed-mt7621-xiaomi-r3g.bin%20-k%20-g%0A%5B%20-z%20%22%24(sha256sum%20B%20%7C%20grep%20242d42eb5f5aaa67ddc9c1baf1acdf58d289e3f792adfdd77b589b9dc71eff85)%22%20%5D%20%7C%7C%20mtd%20-r%20write%20B%20Bootloader%0A

这个刷入链接引用了外部URL,如果你家网络不是特别好,个人建议先下载下来然后部署一个web服务器,把固件传上去,然后获取内网链接,替换掉它刷入链接里的链接和sha256sum值就行。

如果路由器在60秒内重启则代表刷BREED成功(灯会从蓝变橘,最终变蓝进入系统)。
如果没重启,可能是stok过期了。进入后台复制新的stok即可。也有可能下载的BREED损坏,重新运行代码,或考虑本地起一个web服务器。

手动进入Breed

拔掉电源,按住reset同时接上电源等10秒即可进入breed。需要注意的是如果闪蓝灯那就是BREED。

编译OpenWRT系统

装依赖

我的环境是Arch Linux,所以只要下载一个AUR里的包openwrt-devel即可,或者也可以手动安装:

1
pacman -S --needed base-devel bash bzip2 git libelf libxslt ncurses openssl rsync swig time unzip util-linux wget which zlib

如果你是Debian系发行版,安装这些依赖:

1
sudo apt install build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev python3-setuptools rsync swig unzip zlib1g-dev file wget

准备源码并选择分支

下载官方源码:

1
2
3
4
git clone https://git.openwrt.org/openwrt/openwrt.git
# 或者用ImmortalWRT分支: https://github.com/immortalwrt/immortalwrt
cd openwrt # 如果用了上面那个分支, 就是 cd immortalwrt
git pull

查看所有分支:

1
2
git branch -a
git tag

切换到指定分支(以我现在用的24.10为例):

1
git checkout openwrt-24.10

更新feeds:

1
2
./scripts/feeds update -a
./scripts/feeds install -a

修改配置并编译

修改配置:

1
make menuconfig

把前三行分别改成这样:

1
2
3
Target System (MediaTek Ralink MIPS)  --->
Subtarget (MT7621 based boards)  --->
Target Profile (Xiaomi Redmi Router AC2100)  --->

开始编译:

1
make -j$(nproc) download world

注意⚠️:
期间会联网下载依赖和部分源码包,请保证首次编译时网络畅通。

刷入系统

编译产物会放在/project_root/bin/targets/ramips/mt7621下。
此时,我们将路由器重启到Breed,在固件更新界面里将闪存布局选为小米 R3G OpenWRT,然后上传kernel1rootfs0即可。

注意⚠️:
刷机前记得做备份,在Breed固件备份里。

后续

修改网段

Network - Interfaces - LAN里,点编辑,把IPv4 addres改掉就行,记得遵循局域网ip段的规则哦~

无线中继

启用无线中继

Network - Wireless里,radio02.4GHz的,因为是802.11b/g/nradio15GHz的,因为是802.11ac/n。根据你的需求,选择要中继网络的频段,点scan,勾选Replace wireless configurationLock to BSSID,然后在WPA passphrase里输入密码,随后一路SubmitSave即可,最后Save & Apply

停止无线中继

还是在Network - Wireless里,把添加中继的网络全部Remove掉,然后在radio_右边点Add,在Interface Configuration里选择NetworkLAN,配置好5GHz频段wifi的ESSID、密码等安全设置后,保存即可。

美化

进入菜单:System - Software ,先更新列表,然后下载并安装luci-theme-argon即可,主题就会自动变好看。
Argon主题的管理面板:下载luci-app-argon-config这个包即可,随后即可在System - Argon Config里管理主题,比如登录页面背景。
或者直接编译进系统,这样可以免去开机再下载:
主题:LuCI > 4. Themes > luci-theme-argon
主题管理面板:LuCI > 3. Applications > luci-app-argon-config

常用工具补齐(直接编译进系统)

curl: Network > File Transfer > curl
openssh-sftp-server: Network > SSH > openssh-sftp-server
iptables-nft: Network > Firewall > iptables-nft
openssl: Utilities > openssl-util
如果你要运行tun设备的话,还需要补全下面这几个模块,不过体积也大不到哪里去,就几个KB
kmod-inet-diag: Kernel modules > Network Support > kmod-inet-diag
kmod-nft-socket: Kernel modules > Netfilter Extensions > kmod-nft-socket
kmod-nft-tproxy: Kernel modules > Netfilter Extensions > kmod-nft-tproxy
kmod-tun: Kernel modules > Network Support > kmod-tun

ZRAM-SWAP

注意⚠️
需要你在编译时启用了kmod-zram内核模块,不然会安装报错。
路径:Kernel modules > Other modules > kmod-zram

也是在System - Software 里,下载zram-swap这个包并安装即可。
注意,他默认zram大小是内存的一半,对于这种小内存机器肯定不够用,我是搬的安卓上那一套,80%左右的zram,所以需要去修改配置文件。
编辑/etc/init.d/zram这个文件,找到这一段:

1
2
3
4
if [ -z "$zram_size" ]; then  
    # e.g. 6mb for 16mb-routers or 61mb for 128mb-routers
    echo $(( ram_size / 2048 ))
else

看到那个2048了吗?把它改成1280,保存后重启,这样就能启用80%大小的zram,就跟安卓机一样

内网DNS

Network - DHCP and DNS - DNS Records里,然后就跟你的域名控制台里管理一样的操作,配置各种解析就行。

TTL 128

安装iptables-nft这个包,以便方便兼容iptables语法修改防火墙规则。
创建/etc/nftables.d/12-mangle-ttl-128.nft,并写入以下规则:

1
2
3
4
5
6
7
8
9
chain mangle_postrouting_ttl128 {
type filter hook postrouting priority 300; policy accept;
counter ip ttl set 128
}

chain mangle_prerouting_ttl128 {
type filter hook prerouting priority 300; policy accept;
counter ip ttl set 128
}

再重启防火墙:

1
service firewall restart

然后就能在Status - Firewall里看到这条新增的规则:


Traffic filter chain “mangle_prerouting_ttl128”

  • Hook: prerouting (Capture incoming packets before any routing decision), Priority: 300
  • Policy: accept (Continue processing unmatched packets
Rule matches Rule actions
20.4 KB

Traffic matched by rule: 191 Packets, 20.4 KBytes

Any packet
Set header field ip.ttl to 128

刷回原厂

Breed里的固件更新,闪存布局选择小米 R3G 原厂,只把miwifi_rm2100_firmware_d6234_2.0.7_breed.bin上传到固件里,刷入后等待重启,随后在小米系统里进行一次系统更新,就能把Breed清除,彻底回到小米系统。

注意⚠️:
如果上传固件后无法进入系统,回到breed,在环境变量编辑页面里删除normal_firmware_md5

参考链接

OpenWRT官方页面

Techdata: Xiaomi Redmi Router AC2100
Xiaomi Redmi Router AC2100
Build System Setup (装依赖教程)
Build System Usage

Github页面

ImmortalWRT

其他页面

小米商城 - 红米AC2100
恩山论坛 - 小米 红米【AC2100】一键刷BREED【30秒刷完】小白帅小伙专用 检查坏块 | 无需Telnet
哔哩哔哩 - 红米AC2100路由器一键刷入BREED刷入第三方openwrt+老毛子固件+能刷回小米官方固件
校园网防止多设备检测指北


为红米AC2100编译OpenWRT
http://blog.coolenoch.ink/2025/07/02/Linux/23-为红米AC2100编译OpenWRT-250630/
作者
CoolestEnoch
发布于
2025年7月2日
许可协议