管理
架构与协议
烽燧分成几层:上面几层不分品牌,最下面按品牌和你的路由器通信。每一层做什么,一次会话、一次写入怎样走,各品牌的路由器用什么接口。
烽燧分成几层。上面几层不管你用的是哪个品牌的路由器,做的事都一样;只有最下面的品牌驱动和协议部件按品牌去和路由器通信。所以一项功能只写一次,换一个品牌只是换掉最下面那一层。
每一层做什么
| 层 | 做什么 |
|---|---|
| 入口 | 你和烽燧打交道的地方:网页控制台、REST API、给 AI 智能体用的 MCP、Telegram 机器人,以及默认关闭的自愈。 |
| 共用规则 | 每个入口都要经过的检查:参数对不对(比如频段号、PCI 的范围);这台路由器能不能做这项写入、你有没有在「设置 → 设备」里把它关掉(写闸门);记一条审计日志。 |
| 服务 | 功能本身,不分品牌:定时读信号和流量、保存历史曲线、锁频锁站和各项控制、同步和发送短信、蜂窝设置、告警。 |
| 后端 | 把每一项读写变成一个固定的动作(读信号、锁小区、发短信……)送去排队,并记下这台路由器有没有这一项、写完回读是否一致。 |
| 调度器 | 唯一的队列。所有入口的请求都在这里排队,写入排在读取前面;你在路由器管理页登录时,烽燧让开;密码不对,烽燧就停下。 |
| 会话 | 和路由器之间的一次登录:一次只开一个,只交一次密码,用完马上退出。 |
| 品牌驱动 | 每个品牌一个,知道这个品牌怎样登录、一次会话里发哪些请求、哪些功能有接口记录。 |
| 协议部件 | 几个品牌共用、本身不属于哪个品牌的部分,比如 OpenWrt 和中兴 zWRT 都用的 ubus,移远、广和通模组的 AT 指令。 |
一次会话
路由器同一时间只允许一个管理员登录。烽燧每次只用一小会儿,用完就退出:
- 先问有没有人在用。 登录之前先问路由器(这一步不需要密码)。你正在路由器的管理页上,烽燧就让开,下次再来。登录时路由器回答「已经有人登录」,也一样让开。
- 只交一次密码。 路由器说密码不对,烽燧马上停下,不再重试,直到你在「设置 → 路由器」里改正。很多路由器连续输错三次就会锁住登录,所以烽燧一次也不多试。
- 用完就退出。 读写结束、出错、超时,或者守护进程停止,烽燧都会退出登录,把管理员的位置让出来。一次会话最长 90 秒,通常不到一秒。
品牌留在「自动识别」时,烽燧先只发不需要登录的请求认出品牌,认出之后才发送密码。
一次写入怎样走
以锁小区为例:
- 检查参数。 频点要在频段的范围内,PCI 在 0–503(4G)或 0–1007(5G)之间。不对就直接告诉你,不发任何请求。
- 写闸门。 这台路由器有这项写入吗?你有没有把它关掉?不能写的,在排队之前就拒绝,不打开会话。
- 排队。 写入排在读取前面,但不会打断正在进行的会话。
- 在会话里再确认一次。 本次运行还没见过这台路由器的型号,就先在同一个会话里读一次型号,再按型号决定能不能写。
- 只发一次。 写入请求只发一次,出了什么事都不重发。
- 回读。 在同一个会话里读回设置,和刚写的不一致就告警。
- 记录。 控制台、审计日志和设备报告里记下发了哪些请求(只有名字,不含数值)和回读的结果。
- 断网保护。 在没有验证过的路由器上锁频或锁小区,或者在任何路由器上切 SIM 卡槽、改网络制式、手动选网、改 APN,之后 3 分钟网络还没恢复,烽燧就把设置改回原来的样子。你有意断网的写入(关闭移动数据、打开飞行模式)不会自动改回。
各品牌怎样通信
| 品牌 | 路由器的接口 | 用到的协议部件 |
|---|---|---|
| 华为 | HiLink:XML 接口,SCRAM 或旧式的密码登录,每个写请求带一次性令牌 | HiLink |
| 中兴 | goform 网页接口(包括 ZXIC 固件的 /reqproc/ 写法),或较新型号的 zWRT | ubus(zWRT) |
| 品速 | 网页的 JSON 接口 | — |
| 通则康威(ZLT) | 网页的 cmd 指令接口 | — |
| 烽火 | 网页的 JSON 接口(Pro 系列是另一种加密写法) | — |
| 鲲鹏无限 | LuCI 网页接口,加上一部分和 HiLink 写法相近的接口 | — |
| OpenWrt | ubus;蜂窝部分是模组的 AT 指令,经路由器上的模组服务发出 | ubus、AT 指令(移远、广和通) |
哪些型号支持哪些功能,见支持的设备;在没有验证过的路由器上,写入怎样默认开启、怎样关闭,见其他型号与品牌。
数据存在哪里
- 烽燧的数据都在
data/目录里:运行状态、控制台设置、短信镜像与通讯录、审计日志,都用你的DATA_ENCRYPTION_KEY加密,只有运行烽燧的用户能读。备份和换密钥见备份与恢复。 - 烽燧不连接任何云服务。只有你自己配置的 Telegram 和 Webhook 会收到通知。
- 运行时只用 Node.js 自带的模块,没有任何第三方依赖。
想参与开发
- 加一个品牌: 写它的驱动(不需要登录的识别、登录前的检查、一次登录、退出,以及会话里的读写),记下这个品牌有哪些功能,把它加进驱动表。后端、调度器和服务都不用改。
- 加一项功能: 给后端和会话各加一个动作,在有接口记录的品牌里实现。没有记录的品牌,读取显示「此型号不提供」,写入由写闸门拒绝。
- 已经验证过的 H168-383: 发给它的请求一个字节都不能变。每次改动都在模拟路由器上逐字节比对请求来证明。
- 完整的设计记录在 GitHub 上的开发者文档(第 19 节)。参与的规则见 CONTRIBUTING.md。