Files
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

73 lines
2.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Debian13 主路由系统 —— 底座安装脚本 v2(干净环境版)
#
# 安全约束(重要):
# 1. 安装期间禁止任何服务自动启动(policy-rc.d 返回 101)
# 2. 不触碰 NetworkManager(ens18 的网络保持原样)
# 3. 不触碰 RealVNC / LightDM / X 会话
# 4. 不加载任何 nftables 生效规则
set -e
export DEBIAN_FRONTEND=noninteractive
MARK=/etc/drouter-build-phase
echo "=== 阶段 1/6:进入构建保护模式 ==="
mkdir -p "$(dirname "$MARK")"
printf 'build' > "$MARK"
# 阻止一切服务在安装期间自动启动/重启
printf '#!/bin/sh\nexit 101\n' > /usr/sbin/policy-rc.d
chmod +x /usr/sbin/policy-rc.d
# 记录 RealVNC 状态用于事后校验
echo "--- 安装前 RealVNC 状态 ---"
systemctl is-active vncserver-x11-serviced 2>/dev/null || true
ss -lnt 2>/dev/null | grep ':5900' || echo "5900 未监听"
echo "--- 安装前网络 ---"
ip -4 -o addr show ens18 2>/dev/null || echo "(ens18 不存在,跳过)"
echo "=== 阶段 2/6:apt update ==="
apt-get update -qq 2>&1 | tail -3
echo "=== 阶段 3/6:安装软件包 ==="
# 注意:这里刻意不含 samba / nfs-kernel-server / docker.io ——
# 它们装完会自动拉起常驻服务,属于用户在界面上按需安装的组件,
# 不应在「装底座」这一步就被带起来。
PACKAGES="
ppp pppoe pppoeconf
dnsmasq radvd
nftables
miniupnpd chrony
ethtool iperf3 mtr-tiny traceroute dnsutils conntrack
bridge-utils vlan iproute2
sqlite3 logrotate rsyslog
curl wget
python3
exfatprogs ntfs-3g dosfstools xfsprogs btrfs-progs f2fs-tools
etherwake zip unzip p7zip-full iputils-ping vim-tiny
"
apt-get install -y --no-install-recommends $PACKAGES 2>&1 | tail -25
echo "=== 阶段 4/6:确保新装服务处于停止+禁用 ==="
for s in dnsmasq radvd dhcpcd miniupnpd chrony rsyslog; do
systemctl stop "$s" 2>/dev/null || true
systemctl disable "$s" 2>/dev/null || true
done
echo "=== 阶段 5/6:退出保护模式 ==="
rm -f /usr/sbin/policy-rc.d
echo "=== 阶段 6/6:校验 ==="
echo "--- RealVNC 状态 ---"
systemctl is-active vncserver-x11-serviced 2>/dev/null || true
ss -lnt 2>/dev/null | grep ':5900' || echo "5900 未监听(异常!)"
echo "--- 网络(应与安装前一致)---"
ip -4 -o addr show ens18 2>/dev/null || echo "(ens18 不存在,跳过)"
echo "--- 服务状态 ---"
for s in dnsmasq radvd miniupnpd chrony NetworkManager; do
printf "%-16s active=%-10s enabled=%s\n" "$s" \
"$(systemctl is-active $s 2>/dev/null)" "$(systemctl is-enabled $s 2>/dev/null)"
done
echo "--- 端口占用 ---"
ss -lntup 2>/dev/null | grep -E ':(53|67|546|5900)\b' || echo "(53/67/546 均未被占用,符合预期)"
echo "INSTALL_DONE"