2 Commits
Author SHA1 Message Date
liuzhuohua 249cc3d8c6 feat(backup/alert/quota/vpn): 新增四个模块 + 深度自查修7 个真缺陷
功能
- 配置备份与还原(backupd):分级导出/预览/还原,敏感内容默认排除
- 告警中心(alertd):WAN掉线/延迟/丢包探测,冷却期+ 免打扰
- 流量配额(quotad):按 IP/服务/小时桶聚合,费用分摊
- VPN 页前端接线 + 前端字段契约补齐

自查发现并修复的缺陷(_dev/t-107.py,119 项)
1. 默认备份静默丢失大半配置(严重)
   _bk_files 把整个 /etc/drouter 标为 sensitive,默认导出时被整目录排除,
   而 BACKUP_SCOPE 恰恰宣称备份含 dcfg.json / kern.conf / vlans.json /
   Docker 栈文件 / 自定义主题。界面全程显示「已导出」,用户换机还原才发现。
   改为逐文件判定(_bk_is_sensitive)+ 敏感子树剪枝 + excluded 收集与展示。
2. VPN status 把全部客户端私钥明文送到浏览器
   _vpn_status 返回 'raw': d(完整配置),前端 4 个渲染函数一个都没读过它。
3. Python 3.13 下保存 VPN 配置静默清空所有 peer(隐蔽)
   'str' in ip_network() 在 3.12 静默 False,3.13 抛 AttributeError,
   被紧邻的 except 吞掉 → 所有客户端无声消失。Debian 13 默认就是 3.13。
4. VPN 私钥在 _vpn_mask 里被连同其他字段一起抹掉
5. 14 处前端属性插值未转义(备份/告警/VPN/配额页)
   type="number" 只过滤输入,不阻止 HTML 属性注入。
6. wireguard 未登记到 DEPS(VPN 有 5 处调 wg,自检页看不到缺失提示)
7. build-deb.sh 声明「后端 N 个」与实际清单不符 + ULOG_ARCHIVE 重复定义

测试基建
- _dev/t-107.py:字段契约双向对照 / op 三段对齐 / 高危路径端到端
  (真跑 _bk_walk、_vpn_norm、配额聚合,不用正则假装测过)
- _dev/run-static.py + scripts/test-static.sh:统一静态回归入口
  排除列表曾写成裸名导致交互脚本没被排除、长会话被 SIGTERM
- t-packaging 改为从 build-deb.sh 抽取模块清单,并反向校验无游离模块
2026-10-03 00:49:07 +08:00
liuzhuohua 64df3cf331 feat: Drouter 1.0.0 —— Debian 13 软路由管理系统
一套跑在 Debian 13 (trixie) 上的软路由管理系统,提供 43 个功能页面的
Web 管理面板:WAN 接入、PPPoE 多拨、DHCP/DNS、IPv6、防火墙、QoS 限速、
访问控制、DDNS、文件共享、Docker 管理等。

核心设计原则:不重新实现任何协议
  PPPoE 交给 ppp,DHCP 交给 dnsmasq,IPv6 RA 交给 radvd,NAT 交给 nftables。
  Web 面板只做三件事:渲染原生配置文件 → 语法预检 → 原子写入并 reload。
  面板删掉后,系统仍是一台配置完好的 Debian 路由器。

安全默认值
  · 安装后不接管网络:不改默认路由、不开 IP 转发、不启动 DHCP 服务
  · 所有改网络的动作都需要用户在面板上亲手点「应用」
  · 避开 5900 端口,不触碰 VNC / X 会话
  · 配置写入前先做语法预检,失败则回滚

架构
  · backend/  Python 3 标准库,零第三方依赖(9 个模块)
  · web/      原生 JS/CSS,无构建步骤
  · 常驻 helper 通过 Unix socket 提供 75 个动作,socket 不可用时回退 subprocess
  · 鉴权走 X-Token 请求头

打包
  · packaging/build-deb.sh            → drouter_1.0.0_all.deb(含 6 个 systemd 单元)
  · scripts/make-offline-deps.sh      → 236 个依赖 .deb + 本地仓库索引
  · packaging/build-offline-bundle.sh → 自包含离线包,目标机零外网可装
  · packaging/build-docker.sh         → 容器镜像(体验用)

测试
  40 套单元测试 + 3 个前端检查脚本(菜单映射 / 离线渲染 / 手机适配),
  全部挂在 devtools/sync.sh 的预检链里。

许可:MIT
2026-09-30 19:26:24 +08:00