feat(network): use Tailnet identities and guarded host firewall

This commit is contained in:
kaka
2026-11-04 12:13:09 +08:00
parent 7d7a69e686
commit 62ef4b458c
4 changed files with 280 additions and 7 deletions

View File

@@ -35,7 +35,15 @@ Docker、Headscale、公钥注入和安全配置后续由 Komodo 任务处理。
`tailscale.sh` 使用显式版本、已准备的本地 DEB、SHA-256、HTTPS 控制端和节点名称。首次接入还需 root 所有、0600 权限的短期单次授权 key 文件;执行后清除临时 key 文件。既有 Running 节点直接复核身份,不需要新 key。
Headscale 0.29.6 从预授权 key 授予节点标签,拒绝预授权注册请求同时携带客户端 `--advertise-tags`。在控制端创建 key 时指定授权标签,`tailscale.sh --tags tag:NAME,...` 核对接入后实际获得的完整标签集合。控制端、名称或标签不一致时停止,不重置节点身份。服务 /32 地址、精确路由批准和业务访问另外验证。
Headscale 0.29.6 从预授权 key 授予节点标签,拒绝预授权注册请求同时携带客户端 `--advertise-tags`。在控制端创建 key 时指定授权标签,`tailscale.sh --tags tag:ENV-ROLE,...` 必须核对接入后实际获得的完整标签集合。控制端、名称或标签不一致时停止,不重置节点身份。
跨主机服务直接使用 Headscale 分配的 `100.64.0.0/10`。脚本禁用接收子网路由及 Tailscale SSH;发现已有路由发布或出口节点选择时停止,不隐式撤销。公开网络回执保存到 `/var/lib/platform-bootstrap/tailnet.json`,包含节点 ID、公开 node key、IPv4、MagicDNS 与标签,先由控制端和 Headscale 核对,再填写集群端点并签发 TLS。重跑允许 node key 原生轮换,地址/ID/名称漂移要求单独维护。
## host 网络与防火墙
所有运行服务的 Docker 模板使用 host 网络,业务服务监听 `0.0.0.0`,由 Debian nftables 控制输入端口。`host-init.sh` 安装 nftables,不自动开放端口或替换现有防火墙。通过固定 release 的 `firewall.sh --check|--apply --policy /run/platform-secrets/firewall.json` 应用已登记的主机策略;文件必须为 root 0600,策略包含准确主机名、恢复 SSH 来源、公网端口和 Tailnet 来源/端口。
规则仅管理 `inet platform_host`,INPUT 默认拒绝、同时校验 `tailscale0` 与精确源 IPv4;不清空全局规则。`--apply` 安排 180 秒自动回退,从新的 SSH transport 验证后执行 `--confirm --sha256 <apply输出摘要>` 才持久化,并建立 Docker/Tailscale 的防火墙启动依赖。通过 sudo 确认时保留 `SSH_CONNECTION` 环境变量。详细 JSON 格式、端口矩阵、Headscale 标签关系与现有集群迁移约束在 platform 的 `docs/network.md`。
## 独立手工升级
@@ -56,7 +64,7 @@ resume/verify 可使用同一固定版本 URL 再次下载执行,或保存该
## 发布
Caddy 同时提供 /install.sh 稳定入口与 /releases/<40位小写Git提交>/install.sh 固定版本入口;生产接入命令固定使用后者。
发布脚本只提取 `install.sh`、`upgrade-debian12-13.sh`、`host-init.sh`、`tailscale.sh`、README、artifacts.lock 及清单列出的 vendor 文件,生成 VERSION、SHA256SUMS;不暴露 .git 或工作区其他文件。
发布脚本只提取 `install.sh`、`upgrade-debian12-13.sh`、`host-init.sh`、`tailscale.sh`、`firewall.sh`、README、artifacts.lock 及清单列出的 vendor 文件,生成 VERSION、SHA256SUMS;不暴露 .git 或工作区其他文件。
源代码与修复就在此仓库维护,无生成器、内嵌 Python 或第二份安装源码。
## 固定资源