坑边闲话:笔者使用 OpenWrt 自 2016 年双十二开始,至今已有七年了。OpenWrt 提供了便捷的网络配置手段,但是也存在一些不便的地方。

本文尽力从 OpenWrt 的缺陷开始入手,讨论改进或者环节的方案,希望能对刚开始学习 OpenWrt 的用户和已经具有一定使用经验的用户有所帮助。

1. 缺乏 systemd 系统管理方案·

尽管很多人诟病 systemd,但是毫无疑问它使得系统的配置、管理变得更加简单且现代化,Debian 等系统默认启用 systemd 就是最好的证明。

注意,大家诟病它,并不是因为它管得太多,而是它最开始的代码不太完善,经常做 API 的大改动。如今 systemd 已经非常稳定。

OpenWrt 作为嵌入式系统,并没有提供 systemd 作为 init 进程,许多任务的启动、管理也是依赖 /etc/init.d/xxx.conf 配置文件进行管理。因此,许多没有写清楚标准错误、标准输出的任务,就没办法轻松地判断失败的原因,给 debug 造成了很大的麻烦。

2. 无线驱动匮乏·

因为无线芯片的驱动涉及到巨量的知识产权问题,故以高通为代表的厂家基本不愿公开驱动源码,这造成 OpenWrt 难以在硬路由上部署。目前能完美支持 OpenWrt 的硬路由不多,所以 OpenWrt 的生态主要集中在有线路由器领域。

生态问题的原因是多样的,因此把问题根源全归于 OpenWrt 不合适。不过这也说明,开源并不能解决所有问题。NVIDIA 驱动如此,OpenWrt 无线亦是如此。

3. 流控功能相对薄弱·

此前有诸如石像鬼 QoS 等插件风靡,但是目前来看,OpenWrt 并没有提供开箱即用的流控软件。在企业级领域,缺乏流控是个要命的缺陷。

4. 技术门槛高·

对于开发者或者 Linux 用户而言,这或许不是难点。但是 OpenWrt 本身确实需要很多网络领域知识才能玩转。

不过退一步说,哪怕是对 RedHat 或者 Debian 非常熟悉的用户,初次上手 OpenWrt 也会感到无所适从,因为它提供的管理方式比较简单,没有 Debian/RedHat 那种高级方案可供使用。总体上看也不难,但是容易让用户产生陌生感。这并不是一个坏事,但是也绝非什么好事。

5. 更新和维护·

OpenWrt 在集成了特殊插件之后,更新变得非常困难。没有办法通过 Web 简单地实现系统升级。一般需要如下操作:

  • 使用系统备份功能,将文件导出
  • 安装全新的系统,并设置可访问的 IP 地址
  • 上传之前备份的配置文件

这个过程虽然不经常做,但是比较费时费力。

6. 功能较弱的 opkg 包管理器·

OpenWrt 本身支持 opkg 包管理器,类似 apt 等工具,但是其功能很弱。

此外,OpenWrt 上游并没有维护 backport 源,导致用户在内核较老的情况下,无法安装新的软件,极易造成组件冲突。这就使得反复编译固件变成常态化操作,令人难以接受。

7. 落后的内核版本·

OpenWrt 在 2023 年 9 月的 23.05-rc3 版本里,竟然还是用了 linux 5.15 内核,这不能说有什么不好,但是 Debian 12 都全面换装 Linux 6.1 了,对内核这么依赖的路由器不更应该追求最新版内核吗?

8. 充满危机的国内开发环境·

众所周知,中国开发者特别是换竭泽而渔,同时缺乏一些国际精神。比如,不喜欢把自研核心技术开源,但是喜欢拿国际上知名的代码做自己的工程。再比如,当一个新技术还没有经过广泛验证的时候缺乏兴趣,只有当技术已经足够成熟才跟进。

以上卑劣的表现,在 OpenWrt 社区里体现得淋漓尽致。以 Lean 为代表的许多人,从 OpenWrt 社区吸血,但是不开放自己的源代码(虽然有一个 OpenWrt 代码仓库,但是不代表所有与硬件相关的模块都是开源的)。这种割裂社区的行为,当下还没有表现,但是长此以往,形势危噫!

只有真正融入社区,才能获得真正的力量。虚与委蛇,藏着掖着,实在没有气量,更有悖契约精神。

总结·

OpenWrt 并不是最好的固件,但是它的开放性是最好的,对国内用户来说,它能良好地支持 OpenClash 等科学上网插件,这是非常重要的。