hyperpolymath/network-outpost
GitHub: hyperpolymath/network-outpost
一个可复现、可靠性优先的自托管家庭网络环境,支持从树莓派旁路由扩展到 x86 N100 网关,将关键服务与暴露服务物理隔离。
Stars: 1 | Forks: 0
# network-outpost — 一个可复现、可靠性优先的家庭网络环境
一个自托管的网络环境,其规模可以从 **Raspberry Pi 2B 上的单网卡旁路由** 一直扩展到
**x86 N100 上的网关** —— 根据 *关键性 + 暴露面* 被拆分为 **两个专一的盒子**,
因此它绝不会变成一台永远宕机的庞然大物,也不会成为所有攻击的焦点。
## Core —— 隐秘、始终保持在线的盒子(秉承其专一的理念)
三项实打实的任务(算上时间服务就是四项),并且它拒绝承担第五项:
| 角色 | 它是什么 |
|------|-----------|
| 🕳️ **DNS sinkhole** | AdGuard Home,容器化 |
| 🧱 **Firewall** | `nftables`,默认拒绝 |
| ⏱️ **时间** | chrony — NTS 认证、多源、局域网提供服务 |
| 🖨️ **打印服务器** | CUPS + Avahi(宿主机) |
| 🏷️ **稳定名称** | 动态 DNS(dyndns2;以 Dynu 为例) |
仅当该盒子*本身就是*网关时(N100,而不是 2B),才添加内联的 **CAVE 整形** —— 采用 **fail-open + 看门狗** 机制,因此当整形器发生故障时,会降级为透传模式,绝不会演变成“断网”。参见 `docs/ARCHITECTURE.md`。
## Frontier —— 暴露的、可选的、非关键的盒子
设置(**TUI/CLI,无 Web 界面**)、邮件认证 + DMARC、开发者堡垒机、ODoH 池节点、
Prometheus/Loki/Phoenix 仪表板,以及一个在**盒子外**发布的 **Ddraig** 静态站点
(Cloudflare Pages + DNS)。根据设计,它的 **故障或被攻破都不会波及 Core**。
专项开发扩展项目
| 软件定义边界 (SDP) | 隐藏在 SDP 斗篷之后的“隐形” |
| ssh 跳板机 | ...与软件定义边界和基于 QUIC/HTTPS/TLS 的 DNS (DoQ/DoH - 而不是 DoT - 那样就暴露了!) 配合使用,为开发者工作提供更好的保护 |
| Oblivious DNS (oDNS) 存根解析器 | 需要一个由维护分布式网络的用户组成的社区,并且需要少数人拥有专用服务器来运行权威的 oDNS 服务器(显然,不能只有一个!)。而我只是其中一个孤单可怜的人。但是,如果你有兴趣与我一起开发这个项目,并且能够招募到人,我很乐意去做 - 我已经在这里开始了进一步构建的过程 |
## 为什么选择这套技术栈
- **基础操作系统:2B 上为 Alpine (armv7);aarch64/x86 上为 Chainguard Wolfi。** Wolfi 没有 32 位 ARM
架构目标,因此旧版层级继续使用 Alpine;64 位盒子则使用经过强化的、最小化的 Wolfi 基础镜像。
- **选择 AdGuard Home,而不是 Pi-hole。** 采用 GPLv3 协议,没有强制的联网反馈行为,所有状态都保存在一个提交到仓库的 YAML 文件中 → 这带来了最纯粹的“在 Git 中可复现”体验。
- **使用 Podman 进行容器化**,通过摘要锁定(`.env` / `images.lock`)来提供一个可复现的、
稳定的环境。
- **CUPS 运行在宿主机上** —— 这样处理 mDNS/AirPrint + USB 直通会省心得多。
## 快速开始(Core,在 2B 上 —— 无需额外硬件)
```
cp .env.example .env # edit TZ, LAN_SUBNET, SSH_PORT (NOT the image digest — see below)
sudo sh host/setup.sh # Alpine: installs podman, cups, avahi, nftables; runs bin/up.sh
# 打开 http://:3000 → AdGuard 首次运行向导,然后提交 config
```
容器基础镜像在 `images.lock` 中被 **摘要锁定**(已提交,支持多架构,包含 `linux/arm/v7`),
因此可以直接在 2B 上运行。启动过程始终通过 `bin/up.sh` 进行,它会拒绝任何未锁定的标签。
完整的操作指南与注意事项:**`docs/INSTALL.md`**。
## 更新基础镜像(由维护者把控)
升级永远不会在后台静默进行 —— 检测与应用是分开的两个步骤:
```
sh bin/bump.sh --check # report only: is a newer release out? (exit 10 = yes)
sh bin/bump.sh --verify # assert the current pin still matches source (drift check)
sh bin/bump.sh --apply # re-resolve digest from source + repin AFTER you confirm
git commit -am 'outpost: bump AdGuard Home' # review the images.lock diff, then commit
```
一个每周执行的 **仅报告巡检脚本**(`bin/canary.sh`,通过 crond 运行 —— 未使用 GitHub Actions)会执行
`--check`/`--verify`,并在有需要决策的内容时发出通知。它绝不会自动应用任何更改。
策略:**`.github/GOVERNANCE.md`** § “Policy 1”。
## 项目文档
**手把手的帮助指南位于 [wiki](https://github.com/hyperpolymath/core-network-outpost/wiki)**,
按受众(用户 · IndieWebbers · 维护者)分类。本仓库包含了参考资料:
- **[`docs/EXPLAINME.adoc`](./docs/EXPLAINME.adoc)** — 通俗地解释了这是什么。从这里开始看。
- **[`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md)** — 组件映射图、双盒子拓扑结构,以及客观的脆弱性分析。
- **[`docs/HARDWARE.md`](./docs/HARDWARE.md)** — 根据你的宽带线路选择合适的硬件(设备兼容性列表)。
- **[`docs/LEGACY-DEVICES.adoc`](./docs/LEGACY-DEVICES.adoc)** — 客观说明 Pi 2B / 旧主板的局限性。
- **[`docs/PROFILES.md`](./docs/PROFILES.md)** — `legacy-sbc` 与 `modern` 的对比、发布渠道、功能范围。
- **[`docs/HARDENING.md`](./docs/HARDENING.md)** — 安全性与可观测性架构(第 0–10 节)。
- **[`docs/DESIGN-LOG.adoc`](./docs/DESIGN-LOG.adoc)** — 每一项决策及其 *原因*,以及我们总结的经验教训。
- **[`docs/MAIL-AUTH.md`](./docs/MAIL-AUTH.md)** — 可选的邮件 DNS 模块(它不是 MTA)。
- **[`docs/INSTALL.md`](./docs/INSTALL.md)** — 安装步骤与注意事项。 **[`docs/DOCS-MAP.adoc`](./docs/DOCS-MAP.adoc)** — 所有内容的索引位置。
- **`roadmap/`** — 未来的构想草图(尚未构建)。
- **`.github/GOVERNANCE.md`**, **`.github/MAINTAINERS.md`**, **`.github/CODEOWNERS`** — 决策者是谁,审核者是谁。
## 许可协议
代码/配置:**MPL-2.0**。文档(`.md`/`.adoc`):**CC-BY-SA-4.0**。(本环境的通用惯例。)
标签:DNS, 网络工程, 自定义请求头, 自托管, 软路由, 防火墙