Files
pangolin/infra/domains/README.md
T
wangjia 7d89ec9d91 feat(infra/domains): 域名池 + CDN 前置 + 签名端点分发 (tsk_NU9JuUweHWMt)
- domains.md: 四组域名隔离登记 + 冷备池 ≥5 + 启用流程(不含身份信息)
- cdn/terraform: Cloudflare 配置即代码(WAF/bot/速率限制/代理DNS/回源鉴权注入)+ 30min 重放 Runbook
- server/internal/originauth: 回源鉴权中间件,非 CDN 网段或鉴权头不符一律 403,支持双值轮换
- tools/endpoint-signer: 离线 Ed25519 签名 CLI(端点 + 公告文档,单调版本防回滚,key_id 双公钥轮换)
- tools/publish-mirrors: ≥3 镜像发布 + hash 一致性校验 + 故障转移取回
- CLIENT-CONTRACT.md: schema/验签/防回滚/合并/兜底链/channel 客户端契约
- 出站独立出口要求写入部署文档;私钥/token/身份信息一律不入库

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 14:21:55 +08:00

59 lines
3.4 KiB
Markdown
Raw 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.
# infra/domains — 域名池 + CDN 前置 + 签名端点分发
配置即代码 + 离线工具 + 契约文档,落实 doc/05(CDN 前置 / 源站隐藏 / 回源鉴权 / 四组域名 + 冷备 / 被封 Runbook)与 doc/06Ed25519 签名 + 私钥离线 + 公钥内置 + 防回滚)。
> **本目录不含任何私钥 / token / 身份信息。** 私钥离线两地保存,token 由 rbw / CI Secret 注入,身份线索离线台账管理。
## 目录结构
| 路径 | 内容 |
|---|---|
| `domains.md` | 四组域名隔离登记 + 冷备池 + 启用流程(不含身份信息) |
| `cdn/terraform/` | Cloudflare 配置即代码:WAF + bot + 速率限制 + DNS + 回源鉴权;30min 重放 Runbook |
| `tools/endpoint-signer/` | 离线 Ed25519 签名 CLI:端点文档 + 公告文档 |
| `tools/publish-mirrors/` | 多镜像发布 + 一致性校验 + 故障转移取回 |
| `CLIENT-CONTRACT.md` | 客户端联动契约:schema / 验签 / 防回滚 / 合并 / 兜底链 / channel |
| `examples/` | 端点 / 公告 payload 与镜像配置示例 |
| 〔关联〕`../../server/internal/originauth/` | Go 回源鉴权中间件(非 CDN 网段或鉴权头不符一律 403) |
## 数据流
```
端点池 JSON ──(endpoint-signer, 离线)──> endpoints.v1.json (Ed25519 签名)
(publish-mirrors) 推 ≥3 镜像 + 校验 hash 一致
CF Pages / GitHub<独立账号> / 对象存储
客户端按 mirror_urls 故障转移取回 ──> 验签 + 防回滚 + schema ──> 合并进端点池
(CLIENT-CONTRACT.md 兜底链第 5 层)
```
## 回源鉴权与轮换(doc/05 §2 / doc/06 §6
- CDN`cdn/terraform/origin.tf`)在回源请求上注入 `X-Origin-Auth: <随机值>`
- 源站 `server/internal/originauth` 中间件:**源 IP 不在 CDN 回源网段** 或 **鉴权头不符** → 403。
- **季度轮换(双值过渡)**
1. 源站先把新值加为 `Config.Previous``Config.Current` 之外的受信值(即同时接受新旧两值)。
2. CDN 侧 `terraform apply``origin_auth_value` 切到新值。
3. 传播完成后源站去掉旧值。
期间新旧两值都通(验收要求)。
## 部署要求:出站请求走独立出口(写入部署文档)
源站的**出站请求不得暴露源站地址**(doc/05 §2 源站 IP 隐藏)。以下出站必须走**独立出口**(独立 NAT / 出口代理 / 独立弹性 IP),与源站入站 IP 分离:
- **支付 webhook 回调校验**(codes 模块回访发卡店 / 收款通道)。
- **广告回执校验**`/v1/ads/unlock` 等向广告平台核验回执)。
- 任何源站主动发起的第三方 API 调用。
理由:对端日志或证书透明度 / DNS 历史一旦记录源站出站 IP,等于泄露源站。出口 IP 与入站源站 IP 解耦后,换源站(IaC 重建)不牵连出口,反之亦然。部署时在 04 章网络拓扑落实该独立出口。
## 校验
- Go 工具:`cd tools && go test ./...`
- 回源中间件:`cd ../../server && go test ./internal/originauth/`
- Terraform`cd cdn/terraform && terraform fmt -check && terraform validate`(需真实账号才能 `apply`
- 仓库扫描:无私钥、无 token、无身份信息(见各文件头部约束)。