摘要
- 修订 07 允许 IKEv2 控制交换使用 TCP、ESP 使用原生 IP 或 UDP 封装;完成 IKE 认证并创建 Child SA,只能证明协商与密码学状态,不能证明 ESP 的实际道路畅通。
- 运营记录必须拆成控制通道、ESP 路径、独立 NAT 状态、加密探测、业务流量与回退决策;认证可以成立,可用性却仍然为零。
想象一个很容易误判的夜班现场:网关通过 TCP 4500 完成了一次体量很大的 IKE 交换,双方身份验证正常,密钥派生完成,Child SA 已写入状态表。值班人员看见所有控制面指标都为绿色,于是宣布隧道已恢复。
几秒后,业务仍然没有流量。
原因并不神秘。允许 TCP 会话通过的中间设备,未必允许原生 ESP;维持 TCP 状态的 NAT,也不会顺手替 UDP 4500 建立并续租映射。密码学对象已经存在,但承载业务的路径还没有得到任何事实证明。
IETF IPsecME 工作组的活跃草案 Separate Transports for IKE and ESP 正在处理的就是这个缝隙。修订 07 属于 IETF stream,目标为 Standards Track,Datatracker 冻结状态为“WG Consensus: Waiting for Write-Up”。它仍是工作中的 Internet-Draft,不是 RFC,也不是部署或互通报告。
背景是两个不同的工程压力。第一,IKEv2 原本使用 UDP,RFC 9329 又为 UDP 受阻的网络定义了 IKE 与 ESP 一起封装进 TCP 的方式。第二,后量子密钥交换会显著放大 IKE 消息,可靠字节流更适合承载大块控制数据。然而,让 ESP 也长期套在 TCP 中会引入额外的性能与拥塞耦合问题。
修订 07 提议把两者拆开。双方通过空载荷状态通知 SEPARATE_TRANSPORTS 表明能力:IKE 后续交换继续走 TCP;ESP 则尽可能走原生 IP,发现 NAT 时走 UDP 4500 封装。如果响应方不返回该通知,就回到 RFC 9329 的耦合方式,让 IKE 与 ESP 都走 TCP。
这里最容易犯的错误,是把“双方同意分离”读成“分离路径已经可用”。通知只说明能力和偏好。它不是 ESP 的送达回执。
草案对两种起步方式作了关键区分。若 IKE_SA_INIT 从 UDP 开始,请求和响应本身已经提供了 UDP 可达证据。若它从 TCP 开始,控制交换再完整也不包含 ESP 可达证据。因此,Child SA 建立后,发起方应验证 ESP,除非已经收到受保护流量等价证明。
这也说明“安全”不能只用一个布尔值表达。草案明确指出,ESP 可达性无法确认,并不自动削弱 IKEv2 身份验证,也不自动破坏已协商 Child SA 的密码学保护。身份可能是真的,密钥可能是对的,道路却可能不存在。把这种故障称为认证失败,会把维修人员引向错误位置;把它称为已上线,又会把愿望伪装成事实。
NAT 进一步迫使我们承认两条路径。中间设备按传输协议维护状态。IKE 的 TCP 连接保持活跃,不会替 ESP 的 UDP 映射续命。ESP 必须发送自己的 NAT keepalive。来自新地址或端口、且完整性验证通过的 ESP 包,可以更新相关 ESP SA 的对端信息,却不能因此改写 IKE SA 的端点;反过来,受保护 IKE 消息更新控制端点,也不能当作 ESP 端点证据。
同一个对端身份,并不意味着同一份路径状态。
当 IKE 从 TCP 起步,修订 07 给出了有限但清楚的验证程序。检测到 NAT,就探测 UDP 4500 上的 ESP。未检测到 NAT,则先尝试原生 ESP;短暂等待仍无响应时,再尝试 UDP 封装,因为有些中间设备只接受带 UDP 或 TCP 头的流量。哪个有效响应先到,就使用哪条路径。这与 Happy Eyeballs 的精神相近:保留偏好,但不让偏好制造漫长不可用。
加密 ESP Echo 是草案列出的一个工具。它能够回答一个明确问题:在这组 SA、这个方向和这条候选路径上,受保护请求是否得到受保护响应。但它不是全部业务结果。Echo 成功不证明所有 Traffic Selector 正确,不证明大包一定通过,不证明隧道后的服务健康,也不证明真实应用完成交易。
因此,证据链至少包含四级:控制交换完成、ESP 探测响应、代表性受保护业务通过、最终服务结果成立。任何一级都不能替下一级签字。
若 ESP 无法确认可达,草案没有让系统保留一个含糊的 Child SA 等待奇迹。发起方必须用 DELETE payload 删除当前 IKE SA,再次通过 TCP 建立,并且不再提出 ESP 分离传输,也就是回退到 RFC 9329 的耦合承载。部署方还需要预先决定:ESP-over-TCP 的性能代价是否可以接受,还是应直接终止建立。
这是一项业务政策,而不仅是网络参数。穿越严格网络的连续性服务可能接受 TCP 回退;高吞吐或低时延业务可能拒绝;受监管环境可能要求在放行业务前保存路径证明。协议提供选择,风险所有者必须为选择负责。
移动会让旧结论失效。MOBIKE 可以把 IKE SA 及其 Child SA 移到新地址,但旧路径上的 ESP 证据不会随状态对象自动搬家。新地址可能拥有不同的过滤规则和 NAT 映射。草案要求在相应条件下重新验证,而不是因为 IKE 仍在 TCP 上就沿用过去的绿色状态。
会话恢复也一样。修订 07 禁止把分离传输选择写进 resumption ticket,理由很现实:客户端离线期间,网络条件可能已改变。票据可以加速安全关系恢复,却不能冻结物理网络。传输选择必须重新协商。
这与 Heng Lu 的三个设计判断相合。最小初始规范只共享互操作所需的能力,不替未来环境作过度决定;后续路径选择留给掌握当下事实的端点。Reality Layers 要求把状态对象与物理运行分开;“IKE established”是控制事实,不是数据事实。Running-Code Primacy 则要求最终相信实际穿越路径的受保护交换,而不是配置页面里的绿色标签。
运营系统不应只写“VPN up”,而应保存以下独立回执:
IKE_SA_INIT与后续 IKE 分别使用什么传输;SEPARATE_TRANSPORTS是否提出并被接受;- NAT 检测结果与候选 ESP 方式;
- ESP 自己的映射和 keepalive 是否存在;
- 哪个受保护探测从哪个端点首先返回;
- 代表性应用流量是否真正通过;
- 谁批准回退、终止或继续;
- MOBIKE 或恢复之后是否重新判定。
把八条记录压成一个绿色灯,正是下一次争议的起点。
资料来源
- Separate Transports for IKE and ESP,修订 07
- Datatracker 记录与历史
- Datatracker 结构化文档记录
- RFC 7296:IKEv2
- RFC 9329:IKE 与 IPsec 的 TCP 封装
- RFC 3948:ESP 的 UDP 封装
- RFC 4555:MOBIKE
- RFC 5723:IKEv2 会话恢复
- RFC 7383:IKEv2 消息分片
- RFC 9370:IKEv2 多重密钥交换
- RFC 8305:Happy Eyeballs v2
- Encrypted ESP Echo Protocol
- A Larger IKEv2 Payload
- 最小初始规范、本地化未来决策与自愿采用
- 论现实层级、象征权力与清晰为何令人不适
- Running-Code Primacy
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance

