IPSec与NAT IPSec穿越NAT后有哪些变化?
NAT 无法更新上层校验和:TCP 和 UDP 报头包含一个校验和,它整合了源和目标 IP 地址和端口号的值。 当 NAT 改变了某个包的 IP 地址和(或)端口号时,它通常要更新 TCP 或 UDP 校验和。 当 TCP 或 UDP 校验和使用了 ESP 来加密时,它就无法更新这个校验和。 由于地址或端口已经被 NAT 更改,目的地的校验和检验就会失败。 虽然 UDP 校验和是可选的,但是 TCP 校验和却是必需的。
NAT 无法多路传输 IPSec 数据流:ESP 保护的 IPSec 流量没有包含可见的 TCP 或 UDP 报头。 ESP 报头位于 IP 报头和加密的 TCP 或 UDP 报头之间,并且使用 IP 协议号 50。 因此,TCP 或 UDP 端口号就无法将流量多路传输到不同的专用网主机。 ESP 报头包含一个名为 Security Parameters Index(安全参数索引,SPI)的字段。 SPI 与明文(plaintext)IP报头中的目标 IP 地址和 IPSec 安全协议(ESP 或 AH)结合起来用于识别 IPSec 安全关联(SA)。对于到 NAT 的传入流量,目标 IP 地址必须映射到一个专用 IP 地址。 对于 NAT 专用端的多个 IPSec 对话方,多个 IPSec ESP 数据流的传入流量的目标 IP 地址是同一个地址。 为了将一个 IPSec ESP 数据流与另一个区分开,目标 IP 地址和 SPI 必须得到跟踪并映射到某个专用目标 IP 地址和 SPI。由于 SPI 是一个 32 位的数字,多个专用网客户端使用相同 SPI 值的概率很低。 问题在于,您很难确定哪个传出 SPI 值对应于哪个传入 SPI 值。NAT 无法映射 SPI,因为ESP尾部包含一个消息验证散列码(hashed message authenticationcode,HMAC),它检验 ESP 协议数据单元(PDU)的完整性(ESP PDU 包含 ESP 报头、ESP 有效载荷和 ESP 尾部),SPI 无法在 HMAC 值失效之前改变。
法改变 IKE UDP 端口号:IPSec 的某些实现同时使用 UDP 端口 500 来作为源和目标 UDP 端口号。 然而,对于一个位于 NAT 之后的 IPSec 对话方,NAT 会改变初始 IKE 主模式包的源地址。根据具体的实现方式,来自 500 之外的其他端口的 IKE 流量可能会被丢弃。
IKE UDP 端口映射的 NAT 超时可能导致问题:NAT 中的 UDP 映射通常会很快被删除。 发起者的 IKE 流量在 NAT 中创建了一个 UDP 端口映射,它在初始主模式和快速模式 IKE 协商期间使用。 然而,如果响应者随后向发起者发送 IKE 消息却没有提供 UDP 端口映射,那么这些消息将被 NAT 丢弃。
Identification IKE 有效载荷包含嵌入的 IP 地址:对于主模式和快速模式协商,每个 IPSec 对话方发送一个 Identification IKE 有效载荷,其中包括发送对话方的嵌入 IP 地址。 由于发送节点的源地址已经被 NAT 改变,该嵌入地址和 IKE 包中的 IP 地址不匹配。 验证 Identification IKE 有效载荷的 IP 地址的 IPSec 对话方将丢弃该包,并放弃 IKE 协商。
NAT-T 对 IPSec 的做了哪些修改?
ESP 的 UDP 封装:UDP 报头置于外层 IP 报头和 ESP 报头之间,用于封装 ESP PDU。 用于 UDP 封装的 ESP 流量的端口和用于 IKE 的端口相同。
修改过的 IKE 报头格式:IPSec NAT-T IKE 报头包含一个新的 Non-ESP Marker 字段,它允许接收方区分 UDP 封装的 ESP PDU 和 IKE 消息。 在确定存在一个中间 NAT 之后,支持 IPSec NAT-T 的对话方开始使用新的 IKE 报头。
新的 NAT-Keepalive包:这是一个和 IKE 流量使用相同端口的 UDP 消息,它包含单个字节(0xFF),用于为发送到某个专用网主机的 IKE 和 UDP 封装的 ESP 流量刷新 NAT 中的 UDP 端口映射。
新的 VendorID IKE 有效载荷:这个新的有效载荷包含一个众所周知的散列值,它表明这个对话方能够执行 IPSec NAT-T。
新的NAT-Discovery (NAT-D) IKE 有效载荷:这个新的有效载荷包含一个散列值,它整合了一个地址和端口号。 在主模式协商期间,IPSec 对话方包括两个 NAT-Discovery 有效载荷——一个用于目标地址和端口,另一个用于源地址和端口。 接收方使用 NAT-Discovery 有效载荷来发现 NAT 之后是否存在一个经 NAT 转换过的地址或端口号,并基于被改变的地址和端口号来确定是否有对话方位于NAT之后。
用于UDP封装的ESP传输模式和隧道模式的新的封装模式:这两种新的封装模式是在快速模式协商期间指定的,用于通知 IPSec 对话方应该对 ESP PDU 使用 UDP 封装。
新的NAT-OriginalAddress (NAT-OA) IKE 有效载荷:这个新的有效载荷包含 IPSec 对话方的原始(未转换的)地址。 对于 UDP 封装的 ESP 传输模式,每个对话方在快速模式协商期间发送 NAT-OA IKE 有效载荷。 接收方将这个地址存储在用于 SA 的参数中。 |