摘要

  • RFC 5207 分开讨论 HIP 控制报文和 ESP 数据报文;基础交换成功,不能替代对受保护数据面的观测。
  • SPI 只有单向意义,一个边界设备看见出向值,并不会自动知道入向值;多宿主和路由变化还可能让数据经过另一台设备。
  • 可信的健康结论必须同时绑定交换报文、每台中间设备的实际规则、双向 ESP、端点验真与解密,以及应用事务结果。

绿色状态属于四个控制报文

设想一个分支网络。内部主机发起 HIP,控制报文通过 UDP 穿过出口防火墙,I1、R1、I2、R2 都完成。监控平台据此把会话标成“安全且可达”。

真正的数据开始后,返回方向因为多宿主策略换了 locator,进入另一台防火墙。那台设备没有观察过基础交换,也没有收到 SPI 状态信号。它按默认拒绝丢弃 ESP。端点认证是真的,应用成功却是假的。

这是为说明机制而构造的情境,不是已报道事故。RFC 5207 也没有给出当代部署率或厂商故障统计。它提供的是一条清晰的权力边界:控制交换可以证明自己完成了什么,不能替后来路径上的设备和业务结果说话。

该文在 2008 年以 IRTF 信息类 RFC 发布,主要是问题描述,不是 Internet Standard。它从一开始就把中间设备对 HIP 控制流量的干扰,与对 ESP 数据流量的干扰分开。这种分法比一个笼统的 session up 更接近运行现实。

NAPT 所依赖的端口在原始 HIP 报文里不存在

原始 IPv4 HIP 基础交换使用独立的 IP 载荷类型。只改写地址的基本 NAT 可以在不理解载荷的情况下转发。常见 NAPT 还要用传输层端口区分内网多台主机,而这种 HIP 报文没有它熟悉的端口或等价复用字段。

如果连接从外部发起,问题更明显:内部主机尚未发包,NAT 表里没有可用于选择目标的映射。这里失败的不是 Host Identity,也不是端点密码学,而是中间设备缺少自己要求的分流坐标。

IPv6 的形态不同,HIP 信息放在扩展头里。对未知扩展头或非熟知载荷采取默认拒绝的防火墙,同样可以在两个端点都支持 HIP 时阻断交换。把结果写成“端点不支持 HIP”,就把路径策略冒充成主机能力。

把控制报文封装进 UDP 能提供端口和由内向外建立的状态,因此可能修复第一阶段。但它只回答“握手能否回来”,不回答“后续 ESP 是否拥有双向映射与许可”。

ESP 恰好隐藏了中间设备惯用的判断材料

基础交换完成后,HIP 用 ESP 保护应用数据。ESP 使上层端口和载荷对 NAT、防火墙不可见。HIP 通过 HIT 参与校验和计算,避开了一类地址改写问题,但这不等于解决了所有 NAT 复用和返回流识别问题。

SPI 仍在 ESP 头中可见,所以看上去像端口的替代物。RFC 5207 强调其限制:SPI 只有单向意义。A 到 B 的值不能推导 B 到 A 的值。看见一个出向 SPI,不是得到一组双向状态。

共享 NAT 后面的不同主机还可能选择相同 SPI。设备可以像改写端口那样改写 SPI,但这会新增一层映射:原值、新值、方向、关联、设备、规则版本和有效期都必须保存。若只留下改写后的数字,取证时就无法还原谁作了决定。

一个 32 位字段看起来很精确,但精确不等于权威。SPI 在具体 Security Association 语境中有意义;它不全球唯一,不命名用户或应用,也不证明对端收到、通过 anti-replay、验证完整性或完成解密。

从握手学习状态仍然只是本地行为

RFC 5207 讨论了可观察 HIP 基础交换并学习双方 SPI 的 architectured NAT,也称 SPINAT。这个方法比仅凭首个 ESP 包猜测更强,因为协商过程可以暴露两个方向的值。

然而,learned 不是 installed everywhere。解析器要理解当前版本和扩展;策略要批准开口;规则要进入真正处理数据的表;寿命要覆盖业务;ESP 还必须继续经过这台设备。多宿主网络最容易打破最后一个条件。

因此收据要落到设备级:哪台设备看了哪组报文,提出了什么状态,哪条策略批准,精确 match 是什么,何时过期,后来有多少包命中。控制器响应只能证明控制器处理了请求,数据面前后观测才证明规则产生了效果。

若平台只有一个聚合的“已学习”字段,路径切换之后它仍然会保持绿色。正确状态存在于错误设备上,而系统无法表达这件事。

信令能找到一项政策,却未必找到实际边界

另一种方案让端点通过通用 NAT/防火墙信令显式提交双方 SPI。RFC 5207 提到 MIDCOM 与 NATFW NSLP。这样中间设备不必完整解析 HIP,但端点或代理必须知道该通知谁。

文档明确指出多宿主下的拓扑困难:有多个边界时,主机要识别哪些 NAT 或防火墙控制数据路径。发给出口 A 的请求完全可以通过认证、授权并返回成功,却对从出口 B 进入的 ESP 毫无作用。

路径耦合信令试图沿真实路径触达设备,降低选错边界的风险。但路由可以在信令之后改变。代理模式也引入新的权限主体。收据必须绑定路径时期,并在数据到来时重新核对相关性。

创建 NAT binding 或开放 pinhole 是安全敏感动作。验证请求者身份,只说明谁发起;还需要说明他是否有权要求这个 match、范围多大、持续多久、如何撤销,以及到期后是否真正删除。HIP 报文格式正确不自动授予网络边界权限。

UDP 可以救回握手,也能暴露第二阶段的缺口

遗留 NAT 与防火墙通常认识 UDP。由内向外的 UDP 可以创建映射,因此 HIP 基础交换可能成功。RFC 5207 随即给出关键限制:即使 UDP 封装使基础交换通过,ESP 仍会出问题。

一些设备提供 VPN pass-through,观察 IPsec 流并尝试关联 SPI。在少量主机后面可能工作,但共享规模上升时,SPI 碰撞和单向语义会削弱推断。它是本地启发式,不是端到端合同。

把 ESP 也封装进 UDP 能提供端口,后来的 RFC 5770、RFC 9028 与 RFC 9063 展示了协议演进。但 RFC 编号不是运行证明。软件可能只实现部分模式,配置可能关闭,策略可能拒绝,某条路径也可能没有升级。

资产清单不能只写“支持 HIP NAT traversal”。它应写清版本、模式、封装、端口、候选 locator、keepalive、binding 时期,以及双向数据在哪些点被观察到。

错名的成功会诱导过宽修复

当平台把基础交换与应用会话压成一个布尔值,故障归因会偏移。安全团队指出 pinhole 已开;网络团队指出出向 SPI 可见;协议团队指出对端已认证;应用团队只看到超时。每个局部陈述都可能为真,合起来却仍缺少返回数据。

压力之下,组织往往扩大许可:允许更广的 ESP 来源、延长规则寿命、固定单一出口,或关闭检查。业务可能恢复,但新的例外超出了原始主体和会话,真正缺失的路径证据仍没有补齐。

更安全的时间线在第一项缺失收据处停止:四个交换报文在何处出现;两个 SPI 各指哪一方向;哪台设备安装哪条规则;ESP 在边界前后是否一致;端点是否通过完整性、anti-replay 和解密;应用事务是否完成。

未知 不是失败的监控值,而是防止伪造结论的必要状态。它告诉操作员下一次观测应放在哪里,而不是让最近的一盏绿灯替全链路背书。

旧规范与新规范都不能替代运行状态

RFC 5207 描述的是 2008 年的问题空间,信息类身份也限制了它的规范权威。后续文档提出了新的 traversal 方法。两端都不能被误用:旧 RFC 不是所有现网的快照,新 RFC 的发布也不会自动更新设备。

规范说明语义和应观察的字段;实现证明代码具备能力;配置证明功能被选择;政策证明它被允许;抓包证明某个时间点的某个位置出现报文;端点日志证明密码学结果;应用回执证明实际用途。

“运行代码优先”不是忽略规范,而是拒绝用规范替代这些现实层。RFC 5207 的价值正是告诉我们应把哪几层拆开。

最小收据要沿两个阶段、两个方向走一遍

记录至少包含:HIP 版本和 traversal 模式,双方 HIT 与 locator,I1/R1/I2/R2 指纹和时间,NAT 映射或防火墙状态,出向和入向 SPI,信令主体、请求与设备响应,规则 owner、match、批准和过期,基础交换路径与 ESP 往返路径,边界两侧包计数,端点完整性、anti-replay、解密结果,以及应用事务标识与结果。

不要求一个系统独知全局,只要求每个系统诚实限定自己的陈述。NAT 说明映射,防火墙说明规则,端点说明关联,应用说明成果。把这些收据在时间和方向上连接起来,才是会话证据。

来源