一套跑在 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
35 lines
1.1 KiB
Bash
35 lines
1.1 KiB
Bash
#!/bin/bash
|
||
# scp 到目标机也需要密码;复用 SSH_ASKPASS
|
||
#
|
||
# 用法(两种都可以):
|
||
# rscp.sh 本地文件 /tmp/远端路径 # 自动补 ajeef@192.168.7.3: 前缀
|
||
# rscp.sh 本地文件 ajeef@192.168.7.3:/tmp/x # 已是远端形式,原样透传
|
||
#
|
||
# 陷阱:Windows 的 scp 在目标不含 "user@host:" 时会退化成本地 cp,
|
||
# 静默返回 0 却什么都没传出去。所以这里强制补前缀。
|
||
HERE="C:/Users/lyrz-pve-win10/WorkBuddy/2026-09-27-19-57-00"
|
||
TARGET="ajeef@192.168.7.3"
|
||
|
||
args=()
|
||
for a in "$@"; do
|
||
case "$a" in
|
||
-*|*@*:*) args+=("$a");; # scp 选项 / 已是远端形式
|
||
*) args+=("$a");;
|
||
esac
|
||
done
|
||
|
||
# 最后一个参数视为远端目标;若不是远端形式则补前缀
|
||
n=${#args[@]}
|
||
if [ "$n" -ge 1 ]; then
|
||
last="${args[$((n-1))]}"
|
||
case "$last" in
|
||
-*|*@*:*) ;; # 选项 / 已是远端,不动
|
||
*) args[$((n-1))]="$TARGET:$last";;
|
||
esac
|
||
fi
|
||
|
||
SSH_ASKPASS="$HERE/router-build/devtools/askpass.sh" \
|
||
SSH_ASKPASS_REQUIRE=force \
|
||
DISPLAY=:0 \
|
||
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=15 "${args[@]}"
|