返回板块

X02 公众号出口IP固定化与白名单治理技术标准

V1.0.02026-09-14行政法规 · 范式
源文件:C:/Users/xub/.workbuddy/spec/3.行政法规/范式/X02_公众号出口IP固定化与白名单治理技术标准_V1.0.0_2026-09-14_1120.md

历史条款出处:本文上位依据原属已废止的宪法体系(正文条款出处锚点原样保留、未改写);二次引用前须核对 产出\旧新条款映射表.json。

标准编号:LHB/TS-2026-009 | 版本:V1.0.0 | 发布日期:2026-09-14 | 实施日期:2026-09-14 | 归口:利衡辨 · 全域治理

标准性质:规则性标准(首版,A 类新建)· 执行层落地件 | 上位依据:《全域任务脑手架构宪法》V1.2.0 第 24 条「外部出口 IP 固定化与白名单治理铁律」

权威关系:本文件为「调用外部平台接口需登记来源 IP」这一类通行场景的执行层标准,首个落地域为微信公众号。效力层级为:宪法 > MEMORY > 台账 > 国家标准 > 本文件 > 其他规范。与宪法冲突时以宪法为准;与《全域文件工作流规则技术标准》就区域路由与双盘同步冲突时,以该标准为准(本文件复用,不替代);与《本文档治理架构》及 wx_health.py 内嵌旧口径冲突时,以本文件为准(本文件把「出口 IP」从只读报错字段收敛为可预测、可留痕的判定项)。

第一篇 目的与底层逻辑

前言

本标准由一次明确的生产故障触发。2026-09-14 用户提出:公众号后台 设置与开发 → 基本配置 → IP 白名单 处的来源 IP 频繁变化,导致接口调用反复被拒,问原因与固定方案。当日排查确认,此前对「出口 IP 从哪里来」的认识存在两处口径真空:

第一,把责任对象认反了。白名单登记的是调用方自己的公网出口 IPv4,不是微信任何地址。既有报错处置只写「把报错里的 IP 加进白名单」,属于事后补救:IP 变了要等到接口调用失败才暴露,而该失败会中断整条发布链路。

第二,没有区分「谁决定了这个 IP」。同一台机器在不同通道下出口 IP 的可控程度完全不同:直连家宽是运营商动态池,经本地代理是代理上游决定,经固定 IP 中转则完全独立于本机。既有口径把它们一律当作「本机 IP」,因此既无法预测漂移,也无法判定该改哪里。

本标准把「出口 IP」从只有报错时才知道的只读字段,收敛为四要素可实测判定 + 台账自动学习 + 双模式分流 + 漂移前置告警四重确定项,并配两个一键执行件:探针侧 _tools/wx_health.py(新增出口 IP 自检与台账)、中转侧 _tools/wechat_proxy/(Nginx 反向代理 + 双路验收器)。

本标准的设计受三条既有裁定约束:其一,宪法 M0.7 第 4 条「1进1出管道」——本环节为单一输入(一次探针调用)、单一输出(一份判定结论 + 一次台账追加),不得引入回环;其二,宪法 M0.7 第 10 / 13 条「技术经济性 / 载体收敛」——自检不得成为新增冗余载体的理由,故探测与比对全部下沉为纯脚本,净增常驻载荷 0(仅新增一个按 appid 分账的台账文件);其三,宪法第 16 / 17 条「外部依赖前置闸与凭证实体唯一化」——自检必须在成文之前完成,且不得新建第二处凭证读取逻辑。

规范性要求等级(RFC 2119)

:表题: 表 0-1 规范性要求等级(RFC 2119)

等级 含义 本文用法
必须(MUST) 绝对要求,违反即判不合格、禁止发布 用于红线与闸门条款
不得(MUST NOT) 绝对禁止 用于禁止性条款
应(SHOULD) 推荐执行;不执行须书面说明理由并登记 用于强推荐项
不应(SHOULD NOT) 不推荐;执行须说明理由 用于弱禁止项
可(MAY) 可选 用于允许性条款
宜(RECOMMENDED) 较「应」更弱的推荐 用于经验性建议

引言

三项核心原则(强制贯穿)

:表题: 表 0-2 三项核心原则与本文落地方式

原则 内涵 本文落地方式
场景定义需求 先定场景,再由场景推导需求 场景=调用方出口 IP 不可控且平台强制校验来源;由此推导需求「出口可预测、可留痕、失败可归因」;不先定组网方案
技术经济性 以最小代价取得确定收益 探测与台账比对为纯本地脚本、0 LLM 调用;漂移判定在成文之前完成,避免白烧一次成文与配图成本
1进1出 单一事实源,单一当前态 输入恒为一次探针调用;输出恒为一份判定结论 + 一次台账追加;同一账号同一时点只保留一份「已放行 IP 台账」

认知入口(逻辑思维简图)

:逻辑思维简图: 出口 IP 治理认知框架
L0 目标 = 出口可预测 | 漂移可前置告警 | 失败可归因到具体链路层
L1 四要素 = 模式判定(direct/relay) | 多源交叉探测 | 分账台账 | 强约束期望值
L2 硬约束 = 禁单源自证 | 禁跨账号混记 | 禁把探针当自愈 | 禁静默通过 | 禁明文泄漏凭证
L3 校验项 = 探测源一致率 ≥ 1 有效源 | 台账命中判定 100% | 探针退出码语义正确 | 报告留痕 100% | 自检阶段 LLM 调用数 = 0
L4 例外 = 首次运行无台账时仅记录不阻断 | 探测多源全失败时降级为「不影响凭证判定」 | 中转模式下调漂移为仅记录

全生命周期模型(生命周期结构图)

:生命周期结构图: 出口 IP 固定化全生命周期
载入 = 成文之前 | 编排层 | 读 env 与工作区 config | 解析 API 基址与期望值
探测 = 载入完成 | 纯脚本 | 多源交叉取出口 IPv4 | 逐源失败不误判
分账 = 探测完成 | 纯脚本 | 按 appid 取台账 | 取「已放行」集合
判定 = 分账完成 | 纯脚本 | 命中→正常 | 未命中→漂移告警 | 期望值不符→强阻断
实调 = 判定完成 | 网络 | 调 token(直连或经中转) | 成功即回写台账
留痕 = 实调完成 | 纯脚本 | 落 JSON 报告 | 脱敏后入库

范围

本标准规定「调用外部平台接口、且平台强制校验调用方来源 IP」这一场景下,出口 IP 的观测口径、成因分层、固定化方案、判定规程与校验闸门。

本标准适用于本域全部需要登记来源 IP 的外部接口调用,首个落地域为微信公众号(api.weixin.qq.com)。

本标准不规定:平台侧白名单的审批流程(属对方平台内政);不替代《全域文件工作流规则技术标准》的区域路由与双盘同步条款;不构成对任何第三方中转服务的推荐。

规范性引用文件

:表题: 表 2-1 规范性引用文件

编号 文件 引用内容
1 《全域任务脑手架构宪法》V1.2.0 第 10、13、16、17、24 条
2 《全域文件工作流规则技术标准》 区域路由、双盘同步、任务夹规范
3 《全域文件命名规则技术标准》V1.2.0 版本化命名与时间戳后缀
4 《技术标准成文规范》V1.1.0 STD-A/B/C/D/E/F/G/H/Z 组条款
5 LHB/TS-2026-008 「前置闸」与「纯脚本判定、超标才调 LLM」的同源口径
6 _tools/wx_health.py 探针载体(本文第 6 章执行接口)
7 _tools/wechat_proxy/ 中转载体(wx-proxy.conf / verify_proxy.py)

术语和定义

出口 IP egress IP

调用方发起外部请求时,平台侧观测到的公网来源 IPv4。不得与内网地址、回环地址或平台自身地址混同。

链路层 egress layer

决定出口 IP 的四个可分离环节:接入层、云与网关层、通道层、协议层。

分账台账 egress ledger

按账号(appid)分别记录「哪些出口 IP 曾被平台接纳」的本地留痕文件。不得跨账号混记——测试号与正式号的白名单互相独立。

漂移 drift

本次探测到的出口 IP 未出现在该账号台账的「已放行」集合中。漂移是预测,不等价于失败。

直连模式 direct / 中转模式 relay

未配置中转基址时,请求由本机出网(direct);配置后请求经固定公网 IP 的中转机出网(relay),平台只认中转机 IP。

平台写接口缺口 platform write gap

平台未提供白名单的读取/写入接口,因此本地工具只能告警、不能自愈。本缺口不得以任何形式的「自动改白名单」承诺掩盖。

第二篇 技术要求

成因分层

:表题: 表 5-1 出口 IP 漂移的四层成因

层 触发点 典型场景 可控性
接入层 拨号会话重连、双网切换、运营商地址池重分配 家宽重拨 低(须运营商固定 IP)
接入层 运营商级 NAT(CGNAT)共享池、基站切换 4G/5G 上网卡、个人热点 极低(共享池,不可固定)
云与网关层 弹性公网 IP 未绑定、按量实例释放、NAT 网关多出口轮询 云主机未绑 EIP、多台出口 高(绑 EIP 即固定)
通道层 代理/VPN 节点自动选优轮换 本机设 HTTP(S)_PROXY 中(出口由代理上游决定,非本机)
协议层 双栈网络优选 IPv6 出站,平台只校验 IPv4 双栈云主机、双栈终端 高(强制 IPv4)

必须在判定前确认本次出网是否经代理:若设了 HTTP(S)_PROXY,则「本机 IP」与「平台看到的 IP」不是同一个对象,判定对象必须以后者为准。

固定化方案

:表题: 表 6-1 固定化路径与适用性

方案 做法 结论
① 云主机绑定固定 EIP 弹性公网 IP 与实例绑定,计费方式选固定带宽 已有云资源时首选;不得选「关机释放公网 IP」的计费形态
② 固定 IP 中转(推荐) 中转机以 Nginx 反代平台接口,业务侧仅改基址 调用方 IP 怎么变都不影响;白名单加一次长期不动
③ 云函数 / Serverless 使用平台固定出口 出口为固定 IP 段而非单 IP,占用白名单配额
④ 平台自托管 业务部署在平台托管环境 同环境自动通过校验,受平台约束
⑤ 运营商固定 IP / 专线 向运营商申请 从根解决,成本最高
⑥ 动态域名 + 自检告警 探测 + 比对 + 告警 只能治标:受「平台写接口缺口」约束,无法自动同步

中转方案必须同时满足以下四项,缺一不得上线:

  1. 鉴权:中转端必须校验调用方共享密钥;未鉴权的中转等同于对外代持调用能力。
  2. 最小权限:中转端应以路径白名单收敛可代理的接口集合。
  3. 流式转发:涉及素材上传时,必须关闭请求体缓冲(proxy_request_buffering off),否则大文件上传失败。
  4. 上游域名重解析:平台域名解析到多个地址且会变,必须使用运行时 resolver + 变量式转发,不得用启动期静态解析。

判定规程

判定必须按下列顺序执行,任一步失败即按其语义退出,不得跳步:

  1. 解析基址:优先级 env > 工作区 config > 官方域名;非官方域名即判为 relay 模式。
  2. 探测出口:应取两个以上独立回显源交叉验证;不得以单一源的结果自证。多源不一致时必须在报告中标记。
  3. 取分账台账:按 appid 读取「已放行」集合;台账为空即视为首次运行,本次结果将作为首个样本。
  4. 判定:
    - 命中台账 → 正常;
    - 未命中且有台账 → 判漂移,置告警并在报告中写明「若随后调用返回来源不合规错误,即为白名单未收录该 IP」;
    - 配置了期望值集合且不匹配 → 判强约束不符(常用于固定 IP 中转失效的自检)。
  5. 实调回写:以当前基址实调一次凭证接口;成功即把本次出口 IP 追加进「已放行」集合;失败为来源不合规错误时追加一条「被拒」记录。

必须遵守的五条禁止性条款:

  • 不得把探针报告表述为「已自动修复」——受平台写接口缺口约束,探针只能告警。
  • 不得跨账号写入同一台账条目。
  • 不得在网络异常文本中保留凭证明文;脱敏必须覆盖 appid / secret / access_token 三类字段。
  • 不得因探测失败而阻断凭证判定;探测失败必须降级为「不影响后续判定」。
  • 不得在 relay 模式下因本机 IP 漂移而告警;该模式下漂移降级为仅记录。

第三篇 执行与校验

执行接口

:表题: 表 8-1 执行接口一览

接口 载体 语义
出口自检 wx_health.py --egress-only 只探测与判定,不调用凭证接口;退出码 0 正常 / 2 漂移 / 3 探测失败
完整探针 wx_health.py 自检 + 凭证实调 + 台账回写;退出码 0/2/3/4(沿用既有语义)
跳过自检 wx_health.py --no-egress 省一次探测开销,用于已知网络稳定的场合
临时基址 wx_health.py --base <URL> 验证中转用,不落盘、不改配置
台账重建 wx_health.py --reset-egress 换网络环境后重建,防历史 IP 造成误判
中转验收 wechat_proxy/verify_proxy.py --base <URL> --key <KEY> 双路对比(直连 vs 经中转)并给出判定矩阵
中转端 wechat_proxy/wx-proxy.conf Nginx 反代配置成品

配置键(均为可选、非敏感项,缺失即维持旧行为):WECHAT_API_BASE(中转基址)、WECHAT_PROXY_KEY(中转鉴权)、WECHAT_EGRESS_IP_EXPECT(期望出口 IP,强约束)。

硬闸与校验

:表题: 表 9-1 硬闸与校验项

编号 校验项 判据 级别
G-01 自检早于成文 探针在成文链路启动前执行 P1
G-02 多源交叉 探测源 ≥ 2 且失败不误判 P1
G-03 凭证脱敏 报告中不含 secret= 明文 P1
G-04 分账正确 台账按 appid 分账,无跨账号混记 P1
G-05 模式一致 relay 模式下不以本机 IP 漂移告警 P1
G-06 退出码语义 与第 8 章表 8-1 一致 P1
G-07 留痕完整 报告可被第三方仅凭留档复算 P2
G-08 中转四项齐备 鉴权 / 最小权限 / 流式转发 / 重解析 P1(启用中转时)

自检阶段 LLM 调用数必须为 0;台账文件必须可人工直读(纯文本 JSON)。

技术经济性核算

:表题: 表 10-1 技术经济性核算

项 计入 说明
新增常驻载荷 1 个台账文件 + 7 个报告字段 无新增进程、无新增依赖
单次自检开销 1~2 次轻量回显请求 远小于一次成文(百秒级)与配图成本
避免的损失 成文前的链路级阻断 原为「发完才发现」,损失一整个成文周期
LLM 调用 0 判定全程纯脚本
结论 净收益为正 以可忽略常驻代价,换取失败可前置归因

第四篇 治理与实施

职责与监督

探针维护者负责保持退出码语义与配置键向后兼容;中转启用者负责保活、密钥轮换与出口自检;台账由探针自动维护,人工不得手工编辑(除 --reset-egress 重建)。

文档管理

本文件与其 docx 发布态同置于权威库 spec/3.行政法规/范式/,同主题只留最新版;历史版本经双盘同步机制留档。修订须递增版本号并同步登记表。

审批记录

:表题: 表 13-1 审批记录

日期 事由 结论
2026-09-14 首版立项(生产故障触发) 通过(用户授权)

修订记录

:表题: 表 14-1 修订记录

版本 日期 修订内容 依据
V1.0.0 2026-09-14 首版发布:口径澄清、四层成因、六方案与中转四项、五步判定与五条禁止、执行接口、八项硬闸、经济性核算 宪法 V2.28.0 M0.7 第 24 条

附录 A 速查卡(规范性)

A.1 一页判定链

解析基址 → 多源探测出口 IPv4 → 取分账台账 → 命中/漂移/强约束不符 → 实调回写。

A.2 三句话归因

平台看到的 IP 变了 → 先问「是否经代理」;经代理 → 出口由代理上游决定;不经代理 → 按表 5-1 逐层定位。

A.3 四条最容易犯的错

把报错 IP 当成「本机 IP」;跨账号共用一份台账;把探针告警当成自动修复;探测单源失败即判定漂移。

附录 B 失效模式速查(规范性)

:表题: 表 B-1 失效模式与处置

现象 最可能成因 处置
来源不合规错误且本机刚重拨 接入层漂移 重新登记当前出口 IP,或改走固定 IP 中转
本机 IP 未变但仍报错 通道层(代理上游换节点) 查代理上游出口,或改走固定 IP 中转
报错 IP 为内网/回环地址 配置填错对象 改为公网出口 IPv4
经中转仍报错 中转机 EIP 未绑 / 未登记 核对 EIP 绑定与白名单登记
上传大素材失败 中转未关请求体缓冲 按第 6 章第 3 项修正

附录 C 工具链清单

载体 用途
_tools/wx_health.py 凭证闸 + 出口 IP 自检 + 分账台账
_tools/wechat_proxy/wx-proxy.conf 中转端 Nginx 反代配置
_tools/wechat_proxy/verify_proxy.py 中转双路验收器
_tools/wechat_proxy/README.md 部署 / 验证 / 运维 / 回滚 SOP

附录 D 明细字段清单

D.1 报告字段

egress_ip(出口 IPv4)、egress_agree(多源是否一致)、egress_mode(direct/relay)、proxy_in_use / proxy_env(代理旁证,值已脱敏)、egress_known_ok(台账已放行集合)、egress_drift(漂移判定)、egress_match_expected(强约束判定)。

D.2 CLI 参数

--egress-only / --no-egress / --base / --reset-egress / --json / --quiet。

附录 E 与上位条款及其他标准的映射

:表题: 表 E-1 条款映射

本文条款 上位/相关依据
第 3 章 范围、第 9 章 硬闸 宪法 M0.7 第 24 条
第 4 章 术语、第 7 章 判定规程 宪法 M0.7 第 16、17 条(前置闸与凭证实体唯一化)
第 6 章 固定化方案 宪法 M0.7 第 10、13 条(技术经济性 / 载体收敛)
第 8 章 执行接口 LHB/TS-2026-008(纯脚本判定 + 前置闸同源口径)

定稿校核结论

本文件按《技术标准成文规范》V1.1.0 成文,经 doc_style_check.py 判定 P1 项清零后发布;国标对齐度检测表随件留档。

利衡辨 · 全域资料站 | 全域七链元路由 · 一进一出
宪法 > 基本法 > 行政法规 > 地方法规 > 地方规章