dpl/docs/maintenance/GATEWAY_ADMIN_PROXY.md

57 lines
6.8 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.

# 网关管理域名与白色机反代
用户指定日期:2026-10-13。范围为两套既有网关管理容器的新域名,以及白色机的新版/旧版域名区域映射和两机场主站入口。源码与配置生成工具在 `scripts/gateway-admin-proxy/`;跨项目域名映射的唯一登记正文在 CoDocs `20-基础设施/访问与反代.md`。
## 当前阶段:配置准备,未完成上线验收
- 两条新管理 A 记录已在 Namecheap 保存:getway-fuc.gemcook.net、getway-dpl.gemcook.net 指向 gateway-01;原记录和 NS 保留。
- 新 CF 账户可访问。tomshell.online、tomtojapan.online 的根 A 与泛域 CNAME 均指向白色机、橙云,本轮已读取页面确认。
- 两个新区域的 Cloudflare Origin CA 证书均已签发,覆盖各自根域和一级泛域,有效至 2041-10-09。私钥在白色机独立目录生成,没有发送到 CF 或写入 Git。证书安装与 Full (strict) 复验尚未完成。
- 映射/请求头逻辑通过 81 项真实 Nginx 的回环集成检查,没有访问线上源站。服务器部署、后台登录和旧入口回归尚未完成。
- 旧 tomshell.com.de 的根证书已过期,旧泛域匹配用的是仅覆盖 umami 的证书。Hostinger 已可访问;用户批准的 `_acme-challenge` CNAME 已保存并经权威 DNS 确认,指向 `old-com-de.acme.tomshell.online`。限定一个区域、白色机 IPv4 的 CF DNS 编辑令牌尚未成功创建;不关闭证书校验替代。
后续每一阶段按实际结果替换本节,不把配置生成、DNS 保存或证书签发当成业务上线完成。
## 用户指定的边界
| 用途 | 源站标识 | 白色机入口标识 |
| --- | --- | --- |
| fuc 网关管理 | getway-fuc.gemcook.net | getway-fuc.tomshell.online |
| dpl 网关管理 | getway-dpl.gemcook.net | getway-dpl.tomshell.online |
| 新版域名区域 | gemcook.net;同前缀一级子域 | tomshell.online;同前缀一级子域 |
| 旧版域名区域 | diaodu.us;同前缀一级子域 | tomshell.com.de;同前缀一级子域 |
| dpl 主站 | dp-link.net | dpl.tomtojapan.online |
| fuc 主站 | 福云.com(ASCII:xn--9kqy16h.com) | fuc.tomtojapan.online |
主域名映射不会自行完成子域 DNS、证书或 Nginx 匹配。本次泛映射按同一前缀对应源站,拒绝不属于指定区域和多级子域的转发;多级主机需额外证书和登记。现有专用匹配优先保留作为兼容入口,不能把已有 TTC、Git、日语服务或旧网关入口送往错误上游。
gemcook.net 根域本次 DNS 查询没有 A/AAAA,根反代配置不能据此声称有可访问的根站点。泛映射也不证明任意源站子域已经部署;逐实际入口验收。
本地访问只经登记的白色机入口,包含资源、重定向、API 和 WebSocket。没有通过源站 IP、Host 覆盖、hosts 或另一机器代抓取补本地验证。
## 网关与共享资源
两个现有管理容器保持独立,不改账号、密码、订阅上游、卷或原业务监听端口。gateway-01 新增精确管理 vhost,后端仍为旧 64444 和新回环 16444。内部 HTTPS 分别按 fu101.gembox-sub.com、c2.deeplink-subscribe.com 的既有有效证书校验,不使用 proxy_ssl_verify off。
旧管理入口的私有路径在服务器运行时从既有容器配置提取,并与旧 vhost 比对,不写入 Git、CoDocs 或本文。源站只信任白色机传来的清洗后 X-Forwarded-For;直接请求的伪造标头不受信任。新增源域名证书使用独立 Certbot 目录和续期钩子,仅检查并重载宿主 Nginx,不运行原订阅网关的全局证书钩子。
白色机新橙云 vhost 单独引入官方 CF IP 信任文件,再向上游发送清洗后的真实 IP。新代理保留严格上游证书校验、路径、查询参数、WebSocket;Origin/Referer 只在与当前请求主机一致时转换,跨站值保留,避免放宽 CSRF 判断。Cookie、重定向和正文资源域名按实际入口复核;不盲目移除 CSP、CORS 或其他安全标头。
Cloudflare Origin CA 只适用于两个保持橙云的代理区域。用户浏览器使用 CF 边缘的公开可信证书;关闭橙云后直连白色机会不受浏览器信任。旧 com.de 不依赖此证书,须用公开可信证书。源站 CA 到期日须登记,不能假称它由 Certbot 自动续期。
## 隔离证书与运维入口
- gateway-01:`issue-gateway-admin.sh` 使用既有已接受协议的 LE 账户的同机副本,仅以 webroot 签发两个新增域名;`gateway-admin-cert.timer` 每日检查,隔离目录 `/etc/gateway-admin-letsencrypt`。不读取或运行原全局续期钩子。
- 白色机:`install-origin-cert.py` 校验公开证书 SAN、有效期和服务器本地私钥公钥匹配,再安装两个 CF 源站证书;`white-proxy-cloudflare-ips.timer` 只更新新橙云站点引用的官方 IP 信任文件。
- 旧 com.de:`issue-white-legacy.sh` 使用隔离目录 `/etc/white-proxy-letsencrypt`;`legacy-dns-hook.py` 只接受旧根域/一级泛域的 ACME 挑战,仅写委托目标 TXT,确认权威 DNS 传播后再继续,清理只删除自身创建且内容未改变的 ID。`white-proxy-cert.timer` 每日检查。
- DNS 私有配置仅在白色机:`/etc/white-proxy-dns/config.json` 保存 zone_id/target,`cf-token` 保存令牌,均 root 所有、0600;Git 和普通文档不得保存令牌。CF 权限本身是整个 tomshell.online 区域 DNS 编辑,并非单 TXT 权限,另有白色机 IPv4 限制。用户于本轮明确批准创建与保存这一凭据。
- 旧 com.de 证书续期依赖该 CNAME、CF 令牌和白色机出口 IP。变更这些资源先更新私有配置,再验证续期;不能删除其他 TXT、改变 NS 或创建无限制账户令牌。正式上线后必须执行隔离 `certbot renew --dry-run --no-directory-hooks` 验证自动续期。
## Git 发布与回退
发布源码先按项目正常 Git 流程提交/推送,只包含本次脚本和维护正文,保留工作区原有 AGENTS/DEPLOYMENT/README 修改。服务器检出明确运维提交;凭据、私钥、CSR 临时产物和备份不进入 Git。必要时使用已推送提交的 Git bundle fetch,不打包覆盖项目。
deploy.py 只管理列出的独立 Nginx 文件;原文件有精确备份与前后哈希,手工修改的管理文件或未被接管的同名文件会阻止覆盖。旧泛域配置只有在公开可信泛域证书到位并提供当前文件精确哈希时才撤回;保留原精确 master 匹配和其他专用配置。Nginx 检查/重载失败自动恢复本次文件并重新校验,不能操作原 Compose 的 down/update 或重启原容器。
回退时先核对当前哈希仍为本轮结果,按服务器私有备份仅恢复本轮文件。新证书账户、目录、定时器与旧实例隔离;撤销新域名入口不能撤销原订阅域名。回退或尚未完成的项目同任务同步 CoDocs、本文和 STATUS。