隧道( tunnel )模式

隧道( tunnel )模式:隧道模式保护所有 IP 数据并封装新的 IP 头部,不使用原始 IP 头部进行路由。在 IPSec 头部( ESP 或 AH )前加入新的 IP 头部,源 IP 地址和目的 IP 地址为 IPSec peer 地址。并允许 RFC 1918(私有地址)规定的地址参与 VPN 穿越互联网。

AH Tunnel modeAH Tunnel modeESP Tunnel modeESP Tunnel mode

IPSec 的两种工作模式及其报文封装格式-冯金伟博客园

1.1  封装流程

在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息。
ESP trailer 包含三部分:Padding,Pad length 和 Next header。Padding 即使用块加密时,最后一个数据块长度不足时所做的填充。Pad length 指填充的长度,方便拆包时找到用来填充的数据段。Next header 标明被封装的原报文的协议类型,例如 6 = TCP。
将原 TCP 报文和第1步得到的 ESP trailer 作为一个整体进行加密封装。具体的加密算法和密钥由SA给出。
为第2步得到的密文添加 ESP 头。ESP 头由 SPI (Security Parameter Index) 和 Seq #
两部分组成。密文和 ESP头合起来称为”enchilada”,构成认证部分。
附加完整性度量结果(ICV)。对第3步生成的”enchilada”认证部分做摘要(ESP Authentication
Data),得到一个32位整数倍的 ICV,附在”enchilada”之后。ICV 生成算法和验证密钥由 SA 给出。
将原始的 IP 报文头中的协议号改为50(代表 ESP),然后将 IP 报文头加到第4步的结果之前构成 IPsec 报文。

1.2  解封装流程

接收方收到 IP 报文后,发现协议类型是50,标明这是一个 ESP 包。首先查看 ESP 头,通过安全参数索引号 SPI
决定数据报文所对应的 SA,获得对应的模式(隧道或传输模式)以及安全规范。
根据 SA 指定的摘要算法和验证密钥计算”enchilada”的摘要值,与附在 IP 报文最后的 ICV
进行对比,二者相同则数据完整性未被破坏。
检查 ESP 头中的 Seq # 里的序列号,保证数据是新的,避免重放攻击
根据 SA 所指定的加密算法和密钥,解密密文段,得到原来的 TCP 报文和 ESP trailer。
根据 ESP trailer 的填充长度信息,找出填充字段的长度,删除填充字段得到原来的 TCP 报文。 根据 TCP
报文头信息将报文交付给传输层。

传输( transport )模式:传输模式保护原始 IP 头部后面的数据,在原始 IP 头部和 payload 间插入 IPSec 头部( ESP 或 AH )。典型应用为端到端的会话,并且要求原始 IP 头部全局可路由。

AH Transport modeAH Transport modeESP Transport modeESP Transport mode

IPSec 的两种工作模式及其报文封装格式-冯金伟博客园

在隧道模式和传输模式下的数据封装形式对比如下图所示,图中 data 为原 IP 报文:

IPSec的两种工作模式及其报文封装格式IPSec 的两种工作模式及其报文封装格式

AH 和 ESP 的最大区别有两个:

一个是 AH 不提供加密服务,而 ESP 提供加密服务。
另一个是它们验证的范围不同,ESP 不验证 IP 报头,而 AH 验证 IP 报头,所以往往需要结合使用 AH 和 ESP 才能保证 IP 报头的机密性和完整性(如上图所示);AH 为 IP 报头提供尽可能多的验证保护,验证失败的包将被丢弃,不交给上层协议解密,这种操作模式可以减少拒绝服务攻击成功的机会。

隧道模式和传输模式在 IP 数据报的 ESP 负载部分上的不同:

在隧道模式中,整个 IP 数据报都在 ESP 负载中进行封装和加密。当这完成以后,真正的源 IP 地址和目的 IP 地址都可以被隐藏。这种模式的一种典型用法就是在防火墙与防火墙之间通过虚拟专用网的连接时进行的主机或拓扑隐藏。
在传输模式中,只有更高层协议帧( TCP、UDP、ICMP 等)被放到加密后的 IP 数据报的 ESP 负载部分。在这种模式中,源 IP 地址和目的 IP 地址以及所有的 IP 报头都是不加密发送的。

加密点不等于通信点的时候就是隧道模式,如果加密点等于通信点的话就是传输模式。但是要注意,默认情况下都是隧道模式,这个你在 show crypto ipsec sa 中可以看到。因为传输模式比隧道模式少了一个头部,这样提供了更大的负载空间,所以尽量使用传输模式。

传输模式是两台电脑直接通过 IPSec VPN 连接的时候用的,隧道模式是只要一端采用网关的话就需要用隧道模式。因为如果采用传输模式连接且一端是网关的时候,因为网关有 NAT 功能,会将地址变换,而传输模式是只识别原 IP 的,所以这样就会被直接丢弃掉。而隧道模式则是用 IPSec peer 地址直接建立隧道用于两端的通讯,不会出现被抛弃的情况。