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

4.6 KiB
Raw Blame History

域名分组登记(配置即代码)

口径来源: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. 配 CDNinfra/domains/cdn/terraformzone_id/api_hostnames/origin_ipterraform 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):服务器、域名、支付、邮箱之间不得产生可被关联的身份线索;管理操作只在专用环境进行。