
一、引言
随着物联网、边缘计算与家庭网络的快速普及,传统“黑盒”网关已难以满足多样化、可演进的业务需求。基于 Linux 的 OpenWrt 发行版,以模块化包管理、完整内核源码与活跃的社区生态,成为定制网关的首选平台。本文结合一次真实项目,梳理从需求分析、固件剪裁、应用开发到安全加固的全流程,供嵌入式开发者与网络工程师参考。
二、需求与硬件选型
项目目标是为连锁便利店部署“云-边-端”架构中的边缘网关,需同时承担以下角色:
- 路由/NAT 与 4G 备份链路;
- Modbus/RS-485 数据采集与 MQTT 上云;
- 本地 AI 相机视频流缓存与断点续传;
- Web/SSH 运维通道及 OTA。
综合功耗、体积与成本,最终选定 MT7621+128 MB NAND+512 MB DDR3 的平台,板上集成 mini-PCIe 4G 模块、双千兆 PHY、RS-485 收发器与 TF 卡槽。
三、OpenWrt 固件定制
- 源码获取与分支策略
使用官方 22.03 LTS 分支,建立公司级 GitLab 仓库,在 feeds.conf 中加入私有 feed,便于内部软件包版本控制。 - 配置裁剪
通过make menuconfig
关闭 IPv6、PPPoE、打印服务器等无用组件;启用 LuCI-SSL、UCI、uhttpd-mod-lua、Docker-ce(容器化 AI 推理引擎)。最终固件体积 23 MB,可保留 15 MB 用户分区。 - 内核补丁
针对 RS-485 收发器方向控制引脚,给 8250 串口驱动打补丁,实现半双工自动切换;同时打开 CONFIG_NF_CONNTRACK_RTCACHE,提高并发 NAT 性能 20%。
四、业务应用开发
- 数据采集服务
采用 C+libmodbus 编写后台进程 modbus-agent,读取冷柜温度、能耗表数据,打包为 JSON 后通过 libmosquitto 推送至云端。使用 procd 脚本实现守护进程与崩溃自启。 - 本地缓存与断网续传
利用 SQLite+msgpack 在 TF 卡建立环形缓存,断网时写入本地,联网后按时间戳重传;通过 UCI 配置缓存上限 2 GB,避免卡满。 - 容器化 AI 模块
在 Docker 中运行轻量级 YOLOv5-nano,对摄像头 RTSP 流进行抽帧检测,仅上传异常图片。利用--device=/dev/video0 --privileged
映射视频节点,CPU 占用率控制在 60% 以内。 - Web 管理界面
基于 LuCI2 的 MVC 框架二次开发,新增“Modbus 点位映射”、“4G 信号诊断”、“Docker 容器状态”三大页面,前端使用 Vue3 编译后挂载到/www/luci-static/
。
五、网络与安全设计
- 三层防火墙
- Zone 级:LAN/WAN/Guest/IoT 四区域隔离;
- 端口级:仅开放 22/443/1883/TLS;
- 连接级:利用 nftables ct limit 防止 SYN Flood。
- OTA 签名
使用 usign 工具生成 ed25519 公私钥对,在 sysupgrade 镜像头部附加签名;uboot 端验证后刷写,防止恶意固件。 - 用户权限
基于 OpenWrt 的 rpcd ACL 机制,为运维人员、店长、开发者分配不同 JSON-RPC token,最小化暴露面。
六、性能测试与优化
在 100 台门店灰度测试中,连续 7×24 小时 CPU 平均占用 38%,内存 220 MB;4G 断网 30 分钟场景下,缓存 1.7 GB 数据并在 8 分钟内完成续传。通过 perf top 发现 Docker overlay2 频繁软中断,遂将 MTU 从 1500 降至 1420,降低 5% CPU 负载。
七、总结与展望
本次实践表明,OpenWrt 不仅能胜任传统路由功能,更可扩展为融合计算、存储、安全的边缘网关。未来计划:
- 引入 eBPF 流量观测,实现毫秒级故障定位;
- 基于 U-Boot 的 A/B 双分区无缝升级,将 OTA 中断时间降到 5 秒以内;
- 在主线内核 6.x 中启用 DSA 驱动,彻底替换 swconfig,为 2.5G/10G 端口预留空间。
通过持续迭代,该定制网关已在全国 1200 家门店稳定运行,为业务数字化提供了坚实底座,也验证了“开源可控 + 垂直场景”的路线可行性。