共计 1472 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
最近在折腾 CMCC RAX3000M 算力版(20230626 固件),发现原厂固件存在几个硬伤:

- QoS 功能简陋,无法实现精细流量控制
- IPv6 支持不完整,DDNS 等服务兼容性差
- 防火墙规则限制多,端口转发经常失效
但刷机风险也不小,特别是分区表差异问题。我手上的这台设备,原厂分区布局和社区版 OpenWRT 默认配置有出入,直接刷可能导致 UBoot 被覆盖,变砖风险极高。
技术方案选择
对比了几种开源固件在 MT7981B 平台的表现:
- DD-WRT:
- 优点:WEB 界面友好
-
缺点:驱动支持滞后,HNAT 加速不可用
-
OpenWRT 23.05:
- 优点:原生支持 DSA 架构,WireGuard offload 性能好
- 缺点:需要手动适配分区表
最终选择 OpenWRT 23.05,因为:
- 官方已合并 MT7981B 基础支持
- 社区维护活跃,安全更新及时
- 可以完整利用 HNAT 硬件加速
核心实现
分区表适配
关键修改位于设备树 (dts) 文件:
// 适用于 RAX3000M 算力版的 FIP 分区定义
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "BL2";
reg = <0x0 0x40000>;
read-only;
};
// 注意:保留原厂 UBoot 分区
partition@40000 {
label = "u-boot-env";
reg = <0x40000 0x20000>;
};
// 重要!FIP 分区起始位置与社区版不同
factory: partition@60000 {
label = "factory";
reg = <0x60000 0x20000>;
};
};
无线校准数据移植
通过 TTL 连接备份原厂 EEPROM:
# 在原厂固件下执行
dd if=/dev/mtd5 of=/tmp/eeprom.bin
scp /tmp/eeprom.bin user@pc:/backup/
刷入 OpenWRT 后恢复:
mtd write eeprom.bin factory
性能调优配置
启用 HNAT 加速(/etc/config/network):
config device
option name 'eth1'
option hwmode 'hnat'
option mtu '1500'
config interface 'wan'
option device 'eth1'
option hw_offload '1' # 启用硬件加速
避坑指南
恢复原厂分区
如果刷机出错,通过 UBoot 恢复:
# 中断启动过程进入 UBoot 命令行
mtkupgrade fip # 刷回原厂 FIP
mtkupgrade firmware # 恢复原厂固件
reset
5GHz 频段优化
DFS 信道避让配置(/etc/config/wireless):
config wifi-device 'radio1'
option band '5g'
option dfs '1' # 启用 DFS 检测
option dfs_detect_mode '2' # 激进模式
内存泄漏监控
定期检查内核日志:
logread | grep "kmalloc"
echo scan > /sys/kernel/debug/kmemleak
性能验证
使用 iperf3 测试(同一台 PC 有线连接):
| 测试项 | 原厂固件 | OpenWRT 优化后 |
|---|---|---|
| NAT 吞吐量 | 680Mbps | 920Mbps |
| 延迟(ping) | 3.2ms | 1.8ms |
| 并发连接数 | 12,000 | 28,000 |
开放问题
目前采用的刷机方式还是手动操作,如何实现安全的 OTA 升级?特别是保证:
- 升级失败自动回滚
- 配置文件迁移兼容
- 签名验证机制
欢迎在评论区分享你的方案!
正文完
发表至: 未分类
近一天内
