dpl/docs/maintenance/GATEWAY_ADMIN_PROXY.md

88 lines
13 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`。
## 2026-10-16 节点中转后台入口
按用户确认,新增 `weiwei.tomtojapan.online` 精确入口,跨项目映射唯一登记在 CoDocs `PRX-020`。复用既有橙云泛域 DNS、Origin CA 和当前 Full (strict),没有新增 DNS、证书或放宽安全规则。白色机检出已推送运维版本 `f8aeb48d9ab8ee97cb89cd7e7f8a3b617aec7532` 后执行已有部署工具,Nginx 检查和重载成功;共享主机 map 新增一项,新建 `/etc/nginx/conf.d/white-weiwei-proxy.conf`,其他受管配置保持原内容。gateway-01 没有更新,本页旧两机相同版本记录仅适用于原验收时点。
`/dashboard` 经入口返回 HTTP 200、NEXV HTML;6个明确引用的 JS/CSS 均200且无源站主机残留。浏览器最终留在代理根路径,显示“海外转发”用户名/密码登录表单;可见截图已核对。响应含 private/no-store、CF DYNAMIC;仅 DYNAMIC 不作为缓存验证依据。96项真实Nginx回环检查通过,覆盖新增正文域名重写;原有跨站Origin/Referer隔离检查继续通过。上游保持HTTPS证书验证和Host/SNI,保留路径/参数、WebSocket配置及Cookie/重定向转换;没有执行真实WebSocket握手或登录后业务操作。一次Python urllib资源请求403,随后curl同资源全为200,未为此调整WAF。
回滚点:白色机 `/root/codex-backups/gateway-admin-proxy/20261016-083022-959962-white`,恢复前先核对manifest当前哈希,只撤回本轮map变化和新weiwei文件,再执行Nginx检查/重载、恢复state登记并同步PRX。未改后台账号、节点转发规则、流量端口、SSH或防火墙。登录与业务验收留待有效账号操作,不将登录页验收当作登录成功。
## 当前状态:已部署并完成指定入口验收
2026-10-13 完成 DNS、HTTPS、独立续期和浏览器验收;2026-10-14 完成日志隐私收尾及 SSH 核验。两机运维目录均为 `/opt/gateway-admin-proxy/provision`,已推送并检出运维提交 `8ed9e195b84019f39c3ee9d9999bfd03efed5062`(根仓库实现提交 `4ad89b196cc5f03486ad9feea39a40c988a5608a`)。最终文档另随根仓库提交,不改变此运维版本。
- Namecheap 两条管理 A 指向 gateway-01,权威 DNS 与页面已确认;原邮件记录和 NS 保留。
- 两个新 CF 区域的根域/泛域解析到白色机且橙云,Full (strict) 已保存复核。各自 CF Origin CA 证书已安装,根域和一级泛域有效至 2041-10-09;私钥只在白色机生成、保存。
- gateway-01 两个管理源域使用隔离的公开 LE 证书;旧 tomshell.com.de 使用根域加一级泛域的公开 LE 证书,两者有效至 2027-01-11。旧 `fu.tomshell.com.de` 的过期入站证书指针已更新,上游与专用入口保留。
- 已批准的 Hostinger ACME CNAME 与仅 tomshell.online DNS 编辑、仅白色机 IPv4 可用的 CF 令牌已配置。两套隔离续期 dry-run 通过;两个证书定时器和白色机官方 CF IP 同步定时器 active,信任列表含官方 22 段。
- 两个新管理入口均使用原有效账号完成登录、设置页切换和退出,没有保存业务配置。临时凭据复制获得具体批准,服务器和本机临时副本均已删除。
- dpl 主站浏览器确认 DP-LINK.NET 品牌及 API/静态资源;fuc 登录页确认“登录—福云”及资源。只重写 URL 域名,保留品牌文案。两个新区域均无 Cache Rule/缓存响应覆盖,管理响应 private/no-store、CF DYNAMIC;未新增 BIC/WAF 例外。
- 真实 Nginx 回环检查 93 个断言通过;最终重载后管理登录页、两主站入口复验成功,两机 `nginx -t`、受管文件哈希通过。四个原网关容器的启动时间和重启计数与本轮开始前相同。
- 白色机实际 SSH 登录成功,IPv4/IPv6 TCP 22 监听,SSH active;UFW inactive、INPUT ACCEPT。本轮没有修改 SSH、防火墙或安全组。
验收范围不含业务用户登录、购买/支付、全站操作、多地区或所有泛域子站;未重新执行订阅/节点全链路测试。截图与忽略的执行产物在 `codex/output/gateway-admin-domain-20261013/`。
## 用户指定的边界
2026-10-13 用户追加确认:gemcook.net 同时承担邮件业务,属于保护资源。此次仅新增两个 getway 子域 A;原 NS、MX、SPF、DKIM、DMARC 和邮件子域记录不变,不迁移 DNS 托管,不以网站根站配置覆盖邮件用途。用户已明确将 gemcook.net 根站延后,本轮完成指定的子域区域即可。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,根站按用户确认延期。diaodu.us 根域和 nasa.diaodu.us 在 source Nginx 中没有对应 HTTPS vhost/证书,返回默认 Gitea 单主机证书,严格代理因名称不匹配返回 502;用户明确本轮不新建这两个源站。不能关闭 TLS 校验、猜 IP 或指向 master/Gitea 代替。泛映射不证明任意源站子域已经部署;逐实际入口验收。
旧专用入口的有限回归:fu、dpl、Gitea、TTC 返回 200;master 根路径返回既有 Laravel 404,未验收其管理路由。这些专用入口优先于新通用泛映射;原证书和其他配置不一并替换。
本地访问只经登记的白色机入口,包含资源、重定向、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,不运行原订阅网关的全局证书钩子。
注意旧 SubSieve 管理账号:持久化 JSON 中的有效配置优先于 Docker ADMIN_USER/ADMIN_PASS 环境变量。本轮首次按环境变量登录被拒,随后只读核对有效配置并以现有账号验收成功;没有重置账号。以后取配置沿实际加载顺序核对,不把环境变量当作唯一事实。fuc 的既有私有管理路径仍须保留在 URL 上,dpl 从根路径进入。
白色机新橙云 vhost 单独引入官方 CF IP 信任文件,再向上游发送清洗后的真实 IP。新代理保留严格上游证书校验、路径、查询参数、WebSocket;Origin/Referer 只在与当前请求主机一致时转换,跨站值保留,避免放宽 CSRF 判断。Cookie、重定向和正文资源域名按实际入口复核;不盲目移除 CSP、CORS 或其他安全标头。
新生成 vhost 的访问日志只记失败状态、主机、上游状态和耗时,路径、查询参数、客户端 IP 不进入 `/var/log/nginx/gateway-admin-proxy.health.log`;错误日志为独立文件、crit 级别。原订阅过滤/安全日志和保留的旧专用 vhost 未批量调整,不能据此宣称全部历史日志都无敏感信息。
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 --no-random-sleep-on-renew` 验证,部署钩子只检查/重载 Nginx;挑战 TXT 已清理。证书服务超时分别 15/30 分钟,timer 自带错峰,Certbot 不再额外随机长等待。
## Git 发布与回退
发布源码先按项目正常 Git 流程提交/推送,只包含本次脚本和维护正文,保留工作区原有 AGENTS/DEPLOYMENT/README 修改。服务器检出明确运维提交;凭据、私钥、CSR 临时产物和备份不进入 Git。必要时使用已推送提交的 Git bundle fetch,不打包覆盖项目。
deploy.py 只管理列出的独立 Nginx 文件;原文件有精确备份与前后哈希,手工修改的管理文件或未被接管的同名文件会阻止覆盖。旧泛域配置只有在公开可信泛域证书到位并提供当前文件精确哈希时才撤回;保留原精确 master 匹配和其他专用配置。Nginx 检查/重载失败自动恢复本次文件并重新校验,不能操作原 Compose 的 down/update 或重启原容器。
回退时先核对当前哈希仍为本轮结果,按服务器私有备份仅恢复本轮文件。新证书账户、目录、定时器与旧实例隔离;撤销新域名入口不能撤销原订阅域名。回退或尚未完成的项目同任务同步 CoDocs、本文和 STATUS。
本次关键恢复点在两机 `/root/codex-backups/gateway-admin-proxy/`:
- gateway HTTPS 初装:`20261013-121013-829807-gateway`;最终日志调整:`20261014-021439-027004-gateway`。
- 白色机旧泛域撤回/旧 fu 证书更换前:`20261013-125258-241302-white`;最终日志调整:`20261014-021430-957452-white`。
- `preflight-20261013/` 保留变更前配置哈希和容器启动记录。每个部署备份有 manifest.json、原文件/模式;目录 root 私有。最后恢复点只是前一阶段,完整撤销须选择对应初装/旧泛域阶段,不能盲目回退所有共享配置。
后续受管脚本更新:只提交本任务 → `git subtree split -q --prefix=scripts/gateway-admin-proxy --branch ops/gateway-admin-proxy` → 推送 main 与 ops 分支 → 使用已推送提交的 Git bundle fetch → 两机在干净运维目录检出明确 SHA → 执行 `python3 deploy.py gateway --stage https` / `python3 deploy.py white --stage https`。旧文件已接管后仍按 state.json 哈希阻止覆盖并行修改;首次接管须提供当前旧 master/fu 的精确哈希。不要修改 SSH/防火墙以解决 Web 反代问题。
域名前缀更换须同步 DNS、SAN 覆盖、Host/SNI、白色机登记及实际登录/资源验收。此处新主站/后台区域没有全区绕过缓存,不能把此前独立订阅区域的调优直接照搬;管理会话和 API 的 private/no-store 应继续验收。