Files
pangolin/infra/domains/domains.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

85 lines
4.6 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.
# 域名分组登记(配置即代码)
> 口径来源:doc/05 §3「域名体系与解析兜底」、doc/06 §2「身份隔离红线」。
>
> **本文件只登记分组、状态、启用流程,绝不记录任何注册身份信息**(注册商账号、邮箱、付款方式、WHOIS 联系人等身份线索一律离线管理,见末尾「身份线索」一节)。所有占位域名均为 `example-*`,启用真实域名时只替换占位、不写身份。
## 1. 四组隔离原则
四组域名**互不关联**:不同注册商、独立 WHOIS 隐私、不共享 NS 特征化配置、加密货币付款(doc/05 §3 / doc/06 §2 红线)。任意一组被墙或被关联,不牵连其余组。
| 组 | 用途 | 隔离策略 | 客户端是否内置 |
|---|---|---|---|
| **主域名** | 官网 + 用户中心 | 品牌入口,被墙概率最高,**做好牺牲准备**;常备 ≥2 活跃镜像 | 否 |
| **API 域名池(N≥3** | 客户端 API | 不同注册商、不同 WHOIS、互不关联;客户端内置全部 | 是(全部) |
| **订阅 / 分发域名** | 端点更新、公告 JSON | **单独隔离**——「取订阅」最易被关联封锁 | 是(端点池来源之一) |
| **冷备池(≥5** | 已注册未启用 | 启用即配 CDN,随签名端点更新下发 | 否(启用后进池) |
## 2. 登记表(占位示例,按组维护)
状态取值:`active`(在用)/ `standby`(冷备待启用)/ `burned`(已被墙,保留记录)/ `retired`(主动下线)。
### 2.1 主域名
| 域名 | 状态 | 用途 | CDN | 备注 |
|---|---|---|---|---|
| `example-brand.com` | active | 官网+用户中心 | CF | 主品牌入口 |
| `example-brand-mirror.com` | active | 官网镜像 | CF | 牺牲后顶替 |
### 2.2 API 域名池(N≥3
| 域名 | 状态 | 注册商分组* | CDN | 备注 |
|---|---|---|---|---|
| `api-a.example-alpha.com` | active | A | CF | |
| `api-b.example-bravo.net` | active | B | CF | |
| `api-c.example-charlie.org` | active | C | CF | |
\* 注册商分组只记**代号**(A/B/C),代号到真实注册商的映射在离线身份台账,不入库。
### 2.3 订阅 / 分发域名(独立隔离)
| 域名 | 状态 | 用途 | CDN | 备注 |
|---|---|---|---|---|
| `dist-1.example-dist.com` | active | 端点更新 + 公告 JSON | CF | 与上两组零关联 |
> 分发内容本身走 ≥3 镜像(CF Pages / GitHub<独立账号> / 对象存储,见 `tools/publish-mirrors`),分发**域名**只是其中之一的入口。
### 2.4 冷备池(≥5
| 域名 | 状态 | 预留用途 | 备注 |
|---|---|---|---|
| `example-cold-1.com` | standby | API 补池 | 已注册未配 CDN |
| `example-cold-2.net` | standby | API 补池 | |
| `example-cold-3.org` | standby | 分发补位 | |
| `example-cold-4.io` | standby | 主域镜像 | |
| `example-cold-5.app` | standby | 机动 | |
## 3. 启用流程(standby → active
对应 doc/05 §5 RunbookAPI 域名被墙 / 主域被墙):
1. **选域**:从冷备池挑一个与被墙域不同注册商分组的域名。
2. **配 CDN**`infra/domains/cdn/terraform``zone_id/api_hostnames/origin_ip``terraform apply`(含 WAF/bot/速率限制/回源鉴权,目标 ≤30min)。
3. **下发**:用 `tools/endpoint-signer` 把新域名并入 `api_domains[]``version` +1,签名;`tools/publish-mirrors` 推 ≥3 镜像并校验 hash 一致。
4. **登记**:本文件把该域名状态改 `active`,被墙的改 `burned`,并补一个新 standby 维持冷备池 ≥5。
5. **验证**:域名级探针(复用 #15 探针体系)确认境内可达;回源鉴权 200、直连源站 403。
## 4. 被墙检测(接口需求,不在本任务实现)
域名级 DNS 污染 / TCP 阻断探测复用 **#15 探针体系**(doc/05 §3:境内拨测 + 境外对照)。本任务只登记契约需求:
- 输入:本文件 `active` 组的域名清单。
- 输出:每域名 `{reachable, dns_pollution, tcp_blocked, checked_at}`,污染 / 阻断即触发上面的启用流程。
- 探测器本身由 #15 实现,本任务不实现探针。
## 5. 身份线索(离线管理,禁止入库)
以下信息**只存在离线身份台账**,本仓库任何文件都不得出现:
- 注册商账号 / 登录邮箱 / 付款凭据(加密货币钱包)。
- WHOIS 联系人(一律隐私注册)。
- 注册商分组代号(A/B/C)到真实注册商的映射。
- CDN / 对象存储 / GitHub 独立账号的身份。
> 红线(doc/06 §2):服务器、域名、支付、邮箱之间不得产生可被关联的身份线索;管理操作只在专用环境进行。