【IPSec】ESP、AH 与 NAT-T

💡 原文中文,约3000字,阅读约需7分钟。
📝

内容提要

本文介绍IPsec数据面ESP协议:现代部署多用ESP因其支持加密、完整性与NAT友好,而AH不加密且与NAT冲突。详述ESP隧道/传输模式包头结构、抗重放窗口机制、NAT-T通过UDP/4500封装穿越,以及出站入站路径中SPD选择器与SA绑定的咬合关系,并说明常见故障排查要点。

🔎

延伸解读

ESP与AH的选择:NAT环境下的关键考量

文章指出,现代部署几乎只用ESP,而AH因不加密且与NAT冲突而边缘化。AH认证部分IP头,NAT改写地址或校验和会导致认证失败;ESP将原包或载荷放入加密区域,外层IP头可被NAT改写。因此,在存在NAT的网络中,ESP是更可靠的选择,而AH更适合无NAT的纯IP环境。

NAT-T的封装机制与故障排查

NAT-T通过将ESP包封装在UDP/4500中,使NAT设备将其视为普通UDP流,从而解决ESP协议号被丢弃的问题。解封装后仍用SPI查找SA,语义不变。故障排查时,若外层ESP计数增长但内网不通,需检查SPD选择器与SA绑定是否一致,以及是否存在多条重叠SA导致SPI争用。

抗重放窗口的配置权衡

抗重放窗口大小是配置参数,过大占用内存,过小在乱序严重的路径上可能误杀合法包。故障表现为单向丢包和replay计数上升,此时策略表可能完全正确,问题出在state层面。排障时应同时查看ip xfrm state的replay字段,并检查IKE是否意外建立了多条重叠SA。

Q&A

为什么现代IPsec部署几乎只用ESP而不用AH?

因为ESP支持加密、完整性和抗重放,且对NAT友好;而AH不加密,且认证覆盖部分IP头,与NAT改写地址/校验和冲突,导致NAT不友好。

ESP隧道模式的包结构是怎样的?

隧道模式下,ESP包结构为:外层IP头(网关到网关)、ESP头(SPI和序列号)、IV(若算法需要)、加密覆盖的内层IP和上层数据及填充、Next Header,最后是ICV或AEAD标签。

IPsec的NAT-T是如何工作的?

NAT-T通过IKE_SA_INIT交换NAT检测Notify,发现地址/端口被改写后,将IKE和ESP封装在UDP/4500中传输,使NAT设备将其视为普通UDP流,并发送keepalive防止映射超时。

IPsec抗重放机制是如何工作的?

每个入站SA维护一个序列号窗口,窗口外的重复或过旧包被丢弃。窗口大小可配置,过大占内存,过小在乱序严重时误杀。故障表现为单向丢包和replay计数上升。

IPsec出站和入站路径中,SPD与SA是如何咬合的?

出站时,路由决定出口,策略引擎用内层五元组查SPD,若为PROTECT则找/建SA并封装,若SA标记UDP封装则套UDP/4500。入站时,解UDP后按SPI找SA,解密认证后检查SPD是否允许该SA保护内层选择器。

IPsec排障时,如何区分replay问题与TS配置错误?

replay问题在state上,策略表可能完全正确,表现为单向丢包和replay计数上升;TS配置错误则涉及策略表。排障时需同时查看ip xfrm state的replay字段和IKE是否建立多条重叠SA。

🏷️

标签

➡️

继续阅读