作者:chen-true@qq.com
仅供学习交流,如有错误恳请指出!
===========================================
先说结论:
·AH协议不支持NAT穿越,无论是传输模式还是隧道模式,无论有无开启NAT-T功能;
·在未开启NAT-T功能前提下,ESP隧道模式和传输模式均支持穿越NAT设备,但是会有很多限制,导致使用起来不方便或产生问题;
·在开启NAT-T功能前提下,ESP隧道模式和传输模式均可以正常稳定的穿越NAT。
===========================================
IPSec(IP Security)是一组在IP网络层提供安全通信能力的协议族,主要依靠两种数据保护子协议(AH与ESP),对IP报文实施完整性校验、身份认证、加密以及抗重放等安全保护。
·认证头(Authentication Header,AH):IP协议号51。提供数据源认证与消息完整性保护,并支持抗重放;但是不提供加密,因此不具备保密性。
·封装安全载荷(Encapsulating Security Payload,ESP):IP协议号50。提供数据加密以实现保密性,并且可选提供数据源认证与消息完整性保护,同时支持抗重放。在实际工程中,ESP通常同时启用加密与完整性保护,应用也最为广泛。
AH与ESP均支持两种工作模式(Mode),用于决定对IP报文的保护范围:
·传输模式(Transport Mode):保留原始IP头,仅对上层负载(如 TCP/UDP/ICMP等数据)进行保护,常用于主机到主机的端到端安全通信。
·隧道模式(Tunnel Mode):将整个原始IP包封装为“内层报文”,再添加新的外层IP头并对内层整包进行保护,常用于网关到网关的站点互联以及远程接入VPN场景。
一、AH协议的保护范围
① AH传输模式的保护范围(即认证数据ICV的覆盖范围):
·上层数据:即TCP/UDP/ICMP头 + 数据;
·AH头(除ICV字段外):计算ICV时,将ICV字段本身置零参与计算;
·原始IP头中“不可变/端到端应保持一致”的字段:典型包括源/目 IP、协议号等这类不应在中途改动的字段。
而对于TTL、IP头校验和、DSCP、以及其它一些可能被中间设备改写的字段,计算ICV时,将它们置零(忽略)参与计算。
② AH隧道模式的保护范围(即认证数据ICV的覆盖范围):
·内层原始IP包整体:包括内层IP头部 + 上层数据(TCP/UDP/ICMP头 + 数据);
·AH头(除ICV字段外):计算ICV时,将ICV字段本身置零参与计算;
·外层IP头中“不可变/端到端应保持一致”的字段:典型包括源/目 IP、协议号等这类不应在中途改动的字段。
而对于TTL、IP头校验和、以及其它一些可能被中间设备改写的字段,计算ICV时,将它们置零(忽略)参与计算。
图 AH协议保护范围
二、ESP协议的保护范围
① ESP传输模式的保护范围(加密和认证范围):
1、加密范围
·上层数据:即TCP/UDP/ICMP头 + 数据;
·ESP尾(ESP Trailer):Padding + PadLen + NextHeader。
2、认证范围(若启用)
·ESP头(SPI + Sequence Number);
·全部加密区的密文;
② ESP隧道模式的保护范围(加密和认证范围):
1、加密范围
·内层原始IP包整体:包括内层IP头部 + 上层数据(TCP/UDP/ICMP头 + 数据);
·ESP尾(ESP Trailer):Padding + PadLen + NextHeader。
2、认证范围(若启用)
·ESP头(SPI + Sequence Number);
·全部加密区的密文;
图 ESP协议保护范围
三、AH协议不支持NAT穿越
如下图所示,主机A与主机B之间建立了基于IPSec AH的安全通信(可为传输模式或隧道模式),且路径中经过NAT网关。
图 AH传输模式穿越NAT失败举例
AH提供了消息完整性保护,其核心机制是:发送端在计算AH头部中的认证数据时,会把报文中需要被保护的内容纳入哈希计算,其中包括IP头部中那些按规范应保持端到端一致的字段(典型如源/目的IP等),并将计算得到的认证数据随AH报文一起发送给接收端。接收端收到AH报文后,会按同样规则对报文重新计算认证数据,并与报文携带的认证数据进行比对;若不一致,则认为报文被篡改或伪造,进而丢弃报文。
当AH报文经过NAT网关时,NAT会对报文进行地址转换(SNAT/DNAT),从而修改IP头部中的源/目IP等字段。由于这些字段属于AH认证计算所覆盖的范围,NAT的改写会导致接收端基于“被改写后的IP头”重新计算出的认证数据与报文中携带的认证数据不一致,最终触发AH完整性校验失败并造成丢包。因此,AH与NAT天生不兼容。
这一结论对两种模式均成立:
·AH传输模式下,AH直接保护原始IP头中的相关字段,NAT改地址必然破坏校验;
·AH隧道模式下,AH同样会认证外层IP头中应保持不变的字段,而NAT改写外层地址同样会导致校验失败。
综上,AH协议不支持穿越NAT,无论是传输模式还是隧道模式,只要路径中存在会修改IP头地址信息的NAT设备,都将导致AH认证失败。
四、ESP协议有限度的支持NAT穿越
以前示拓扑为例,若主机A与主机B之间建立IPSec ESP安全通信(可为传输模式或隧道模式),且路径中经过NAT网关。与AH不同,ESP的完整性校验(若启用)不覆盖外层IP头,而是覆盖ESP头 + ESP负载 + ESP尾(ESP Trailer),因此NAT对外层IP地址的改写不会直接导致ESP的认证数据校验失败。
1)ESP传输模式穿越NAT:认证不一定失败,但业务层面容易掉坑
在传输模式下,ESP会把上层协议头(TCP/UDP/ICMP等)也一起加密/认证。因此即便ESP本身不会因为NAT改外层IP头而导致认证数据校验失败,但仍然可能在以下方面出现问题:
·TCP/UDP校验和问题:NAT改写源/目的IP 后,按协议规则,TCP/UDP的校验和应随之更新;但传输模式下TCP/UDP头在ESP加密区内,NAT看不到也改不了,导致接收端解密后可能出现校验和不匹配,进而引发丢包、连接异常等现象。
注意:对于一些不依赖TCP/UDP校验和的IP流量(比如ICMP Ping),理论上ESP传输模式是可以穿越NAT的;但在真实网络里是否“真的能过”,强烈依赖NAT是否支持/放行ESP,以及是否存在多主机并发(PAT)等情况。
·ESP没有端口导致NAT/PAT复用困难:ESP是三层协议(IP协议号50),不像TCP/UDP有端口可用于NAT/PAT做多路复用。若多个内网主机共享一个公网地址并发建立ESP流量,许多NAT设备难以稳定区分和回送,常见现象包括“只能通一个”“并发冲突”“会话不稳定”等。
因此,ESP传输模式在密码学机制上不怕NAT改外层地址,但在承载TCP/UDP以及多对一PAT的场景下,经常因为校验和与复用问题而不够可靠。
2)ESP隧道模式穿越NAT:天然、稳定,但仍可能被“无端口复用”所限制
隧道模式的优势在于:
·内外层解耦,避免传输模式的TCP/UDP校验和问题:隧道模式把“原始内层IP包”整体加密/认证,内层TCP/UDP校验和依赖的是内层IP地址。NAT改写的是外层IP头,不会影响内层地址与内层校验和。
·ESP认证仍不覆盖外层IP头:NAT对外层地址的改写不会直接破坏ESP认证数据的校验(这一点与ESP传输模式一样)。
但隧道模式仍存在一个现实问题:
·纯ESP依旧没有端口,PAT多路复用依旧困难:当公网侧只有一个公网IP、且需要多台内网主机并发建立/维持ESP会话时,NAT设备仍可能因为“无端口”而复用能力受限,导致连接不稳定。
因此,ESP隧道模式更适合NAT环境,但如果不做额外处理,仍可能被NAT/PAT的会话复用能力卡住。
为解决“ESP无端口导致NAT/PAT难以复用”和“传输模式下TCP/UDP校验和难以更新”等问题,工程实践中通常启用NAT-T(NAT Traversal)功能。NAT-T的核心思想就是把ESP变成“看起来像普通UDP”的流量。并且,NAT-T功能只对ESP有效,对AH无效。
有关NAT-T功能原理,我会在后面单独详细描述。