# HN 邮件与订阅网关 2026-10-27初始化,2026-10-28按用户要求将c2订阅域名迁至t34;所有凭据、数据库与运行实例独立,未向DPL发布。主站与后台见 [HN_PRODUCTION](HN_PRODUCTION.md)。本文是实现、验收和恢复的唯一正文。 ## 域名与渠道 - `hardnerd.net` / `admin.hardnerd.net`:HN主站/后台,sitejp02。 - `hardnerd.dev`:系统邮件域名,保留Namecheap BasicDNS和Private Email MX/SPF、privateemail DKIM。用户实际建立的是 `mail@hardnerd.dev`,保留其名称。 - Resend:独立账号ACC-RESEND-HN,Tokyo,domain ID `db1cf9ac-3d57-41b5-9fd0-f567ab40b520`。`resend._domainkey` TXT、`rsend` CNAME到`rsend-apne1.forge.rmta.net`、`send` CNAME到`send.forge.rmta.net`均verified。Resend receiving关闭;企业收件走IMAP。 - 邮箱:Namecheap Private Email Launch,订阅4476265,1/1邮箱、5GB;后台已显示服务有效至2027-10-27、自动续费开启,不代表将来扣款成功。 - `hardnerd-nodes.com`:独立Cloudflare Free zone `1043df03492d50f87d92300a6729362e`,NS `bradley.ns.cloudflare.com` / `jewel.ns.cloudflare.com`,权威/公共解析及active状态已核实。root A与t34 A指向gateway-01,www CNAME根域,均橙云;原Namecheap转发MX/SPF保留,不作为HN业务邮箱。 - 正式订阅基址 `https://t34.hardnerd-nodes.com` 已写入仅HN的 `subscribe_url`,生成链接主机已回读。root/www跳到hardnerd.net;t34只开放 `/s/` 和 `/api/v1/client/subscribe`,其他路径404,不提供公开管理端。 - Cloudflare完整(严格)在源站证书验证通过后保存;Cache Rule `d765537a713747faa2a6e9cd1009c8a9` 对所有请求绕过缓存。Bot Fight/Under Attack未开启,未关闭BIC或改账号安全设置。 ## 2026-10-28 t34 域名迁移 用户明确将c2.hardnerd-nodes.com改为t34.hardnerd-nodes.com。新t34 A记录到相同gateway-01、橙云及自动TTL,旧c2记录已移除;不保留旧地址为正式订阅别名。HN subscribe_url已修改,生成链接主机回读t34。原全区缓存绕过和严格TLS保持,不改日志设置、认证、邮箱、DPL/FUC配置。 运维提交 `360c155fae5bbf86654fdcba1d0de33b80fb7de4` 先推送后部署;`scripts/hn/gateway/migrate-t34.py`分prepare/certificate/activate执行。新证书独立lineage t34,SAN=t34/root/www,有效至2027-01-26;宿主/容器证书路径、SNI、环回管理端模板和hn-gateway-cert.service已同步。仅重建HN两个容器以刷新只读挂载模板,保留原卷和管理员凭据;DPL/FUC四个原容器及Nginx哈希基线通过。旧c2证书只保留回退,不由现行专用timer续期。 经白色机实际测试:t34有效限时账号得到sing-box JSON和Clash YAML,invalid token403,非订阅/管理路径404,CF DYNAMIC、private/no-store及过滤头存在;源站证书校验、新lineage续期dry-run及专用HN reload hook均通过。QA用户ID4已禁用、额度清零、到期、令牌轮换、会话0。当前回读套餐0、节点1;节点来自既有/并行业务,本任务没有新增/改动节点,不把订阅格式验收写成节点联网验收。未做线上页面验收。 网关备份 `/root/codex-backups/hn-gateway/20261028-t34/` 保存本次保护基线、旧host/proxy/cert service、旧证书symlink和deployment metadata;HN应用设置备份 `/root/codex-backups/hn/20261028-t34/subscribe-before.json`。本次本地证据 `codex/output/hn-t34-20261028/`。回退先恢复旧c2橙云A记录及旧网关Git模板/备份vhost、proxy、证书symlink、专用service,nginx -t后仅重建HN容器并平滑reload,再恢复HN subscribe_url;保留新旧证书/卷和凭据,不用全局docker/Certbot操作,不重启DPL/FUC。 ## HN 邮件运行配置 `/www/wwwroot/hardnerd.net/.env`、HN库的 `mail_flow` 设置;SMTP465 SSL与IMAP993 TLS均校验证书。旧Laravel读取 `MAIL_DRIVER`,已明确设smtp,不能只设MAIL_MAILER。发件名称hardnerd、地址及Reply-To均为自有邮箱,页脚主站hardnerd.net,空MAIL_LOGO_PATH避免沿用DPL图片。 验证码/登录链接/工单回复优先Resend,其他走企业SMTP;额度100/3000且使用官方用量与本地预占,规则沿 [BUSINESS_RULES](BUSINESS_RULES.md)。Resend密钥、IMAP密码与回调签名秘密在HN库加密;SMTP密码只在私有环境,未复制进普通后台可读设置。ACC-HN-MAIL与ACC-RESEND-HN私有字段按GemDocs读取,本文不存值。 Webhook `https://hardnerd.net/api/v1/guest/resend/webhook`,ID `dafe1822-894f-4aff-97c9-0dc669d416b8`,enabled;订阅sent/delivered/delivery_delayed/bounced/failed/complained/suppressed。未签名401,签名诊断200;真实测试sent和delivered均回调200,投递事件和时间已入库。 IMAP来信加密保存;来信自动回复启用,普通SMTP发送,按北京时间每天每发件人最多一次,既有过滤避免自身/退信/自动邮件循环。管理员运行汇报保持关闭,没有借用DPL master或Telegram目的地;HN尚无独立汇报路由,不能宣称已接入日报。外部普通来信自动回复未做额外真实发送验收。 只重启过HN的hn-fpm、hn-horizon;DPL邮件配置和工作进程未改。 ## 独立网关 Git分支 `codex/hn-production`。首个网关安装器d8a5091,首启等待/安全续跑修复 `ad9a4fe5877f3f9741e79f8250257d707e768189`;后续文档提交以服务器HEAD为准。发布先推送后部署;原Git获取较慢最终成功,修复提交经已推送Git bundle导入,不使用源码打包覆盖。 - gateway-01 / VPS-006 -> `/opt/hn-gateway/provision`,实现 `scripts/hn/gateway/`,只经白色机SSH。 - 本地代码:HN独立工作树相同目录下的scripts;本地Web域名不适用(运维容器);线上订阅域名见上;白色机网站反代未建立。 - 容器 `hn-subscribe-gateway` / `hn-subscribe-admin`;宿主端口仅 `127.0.0.1:28080/28443/26444`。管理端只环回26444,无公网vhost。默认管理员按ACC-005建立,未改旧管理员。 - 网络hn_sgw_net,172.28.32.0/24;卷hn_sgw_config / hn_sgw_logs;状态 `/var/lib/hn-sgw`,admin.env600。管理后端只指向hardnerd.net。白色机IP104.168.30.40为运维验收白名单,其他继承独立过滤库与管理规则。 - gateway内存160MB/0.5CPU,admin128MB/0.5CPU;启动前可用内存538MB,端口/子网/磁盘/固定镜像均检查。既有DPL/FUC资源不停止、不复用HN卷。 - 宿主 `/etc/nginx/conf.d/hn-subscribe.conf`、独立Cloudflare可信IP include与proxy include。宿主验证容器证书,容器验证HN上游证书,均不跳过TLS;已知域名SNI固定。 - 初启镜像下载公开云IP列表再启动Nginx;安装器等待其初始化,失败后只允许相同凭据安全续跑,不重建身份或覆盖变更。 - 独立证书SAN含t34/root/www,到2027-01-26;目录 `/etc/hn-gateway-letsencrypt`,ACME账户从同宿主既有已接受条款的账户复制到独立目录,未创建新账户或运行全局hooks。 - hn-gateway-cert.timer专属续期,renew-gateway.sh仅重载两个HN容器和宿主Nginx;hn-gateway-cloudflare-ips.timer维护HN可信代理段。独立续期dry-run通过,未改DPL/FUC续期。 ## 验收证据与边界 证据本地忽略目录 `codex/output/hn-mail-20261027/`;远端私有备份下保存配置/SQL/回调与测试收据,不能输出其中秘密。 - 两封SendEmailJob测试只发用户新建邮箱:Resend verification一封、conventional other一封;没有跨渠道重复发送。IMAP实收2封、SPF和DKIM均pass、HN正文/页脚正确、无DPL品牌;IMAP入库2封。Resend已投递且有时间;SMTP仅记submitted,真实收件另证,未伪造SMTP回执。 - 白色机实际HTTPS请求:HN主站和DPL主站200,订阅root404;源站TLS校验通过。正式入口有效受限用户输出sing-box JSON与Clash YAML结构,invalid token403,管理路径404,no-store与过滤响应头存在。 - 为保留审计同时避免令牌进入URL日志,真实有效令牌测试放GET JSON body,未持久改变原HN主站日志配置;非秘密invalid token验证了常规查询路径和短路径。没有对外展示或记录有效订阅URL。 - 限时非管理员QA用户ID2,example.invalid、1MB/30分钟、无权限组/无节点;结束已禁用、额度清零、到期、令牌轮换且会话0,未删除审计证据。套餐/节点为空,未声称实际代理联网通过。 - 四个原DPL/FUC容器ID、启动时间、重启次数与既有Nginx配置hash基线一致。HN主站外其他站点配置未改。未发布DPL功能代码。 - sitejp02整机启动时间为2026-10-27 19:50:52,五个原服务在19:50:59至19:51:07随系统启动;与18:39首发保护基线的启动时间不同,不能写成未重启。重启原因本任务未核实,未执行重启命令;DPL HEAD/既有Nginx配置hash未变,原服务当前均active,DPL公网200。此项与gateway-01四个旧容器基线保持一致是两台服务器的不同结论。 - 已完成服务器侧验收,未做线上页面验收。支付、真实节点联网及外部自动回复额外发送未验收。 ## 备份与回退 邮件备份 `/root/codex-backups/hn/20261027-mail-setup/`:hn.sql、hn.env.before、applied.json、subscribe-url-before.json、邮件测试收据;resend-webhook.json含秘密只限root。恢复前先备份当前业务数据,不能用初次SQL覆盖后续运营数据。紧急停用HN mail_flow或恢复旧HN邮件环境/设置,仅重启HN FPM/Horizon;不要重置DPL或邮箱密码。回调可在HN Resend账号禁用,保留记录。 网关备份 `/root/codex-backups/hn-gateway/20261027-first-install/`:原容器/配置保护基线、HTTP-only vhost及证书日志。回退顺序:先恢复HN subscribe_url为原值,再只停HN两个timer及HN compose容器,将HN vhost恢复HTTP-only或退出,nginx -t后平滑reload;保留卷、证书、admin.env及备份。不得执行全局docker prune/down,不停旧容器、不撤销旧证书或重启共享服务。