原文作者: Mansur

原文链接: http://nbma.info/ipsec-theory/

ipsec vpn,刚学完的时候以为自己掌握的还挺好的,各种排错无压力。去年到电信面试,连基本过程都说不清楚了,就记得是非对称加密协商对称加密的算法和密钥。说了一句跟HTTPS原理差不多……欸。趁着周末闲了赶紧再补补。

重新梳理了以前掌握的不清楚的几个概念,新学习了ikev2的原理和原理,放一起对比下
常说的ipsec第一阶段协商的6个包或者总共9个包指的是ikev1的主模式。
ikev1(即isakmp)
第一阶段: isakmp sa
主动模式:使用预共享密钥的远程拨号VPN(即思科私有的EZVPN),第一阶段只有3个包
主模式:第一阶段6个包
第二阶段: ipsec sa
快速模式:3个包

ikev1的ipsec协商总共9个包,在没有nat穿越的情况下,这9个包的源目端口都是UDP 500,使用isakmp封装。
9个包之后加密ESP封装。

ikev2
第一阶段:ike_sa_init(2个包)
第二阶段:ike_auth(2个包)

同样,这4个包的源目端口都是UDP 500,使用isakmp封装。
4个包之后加密ESP封装。

SA和SPI:安全关联,分为ike sa和ipsec sa,包含封装方式,验证算法,加密算法,预共享密钥等
IKE sa:双向的,一致,默认有效期一天
IPSec sa:单向的,A->B,B->A,默认有效期一小时
SPI: 一串hash值,32bit,唯一标识一组sa,通常写作8位16进制

PFS: 完美向前保密,思科默认情况下面没有启用,ipsec sa的一个过期之后,重新生成的新KEY是有上一个key演算得到,开启PFS后,将重新交换DH协商新的密钥

ikev1协商过程

第一阶段第1-2包

协商对ike过程的加密策略,发起方A发送自己的支持ike policy,B选择一组自己支持的policy发送给A

第一阶段第3-4包

使用1-2的DH强度,交互DH。这个阶段用于生成非对称加密算法(由1-2阶段协商)的三对密钥

第一阶段第5-6包

认证,使用3-4形成的第一把密钥,加密内容是预共享密钥,用于验证双方身份,使用第二把密钥做完整性校验,形成IKE SA

第二阶段第1-2包

交换ipsec polcy(感兴趣流,transform-set),协商对数据(感兴趣流)的加密策略,使用第一把密钥加密,第二把密钥校验完整性

第二阶段第3个包

确认,形成两个ipsec sa的SPI代表控制层结束

A出方向的SPI=B入方向的SPI,A入方向的SPI=B出方向的SPI


最终,对感兴趣流
使用第三把密钥对数据进行加密,使用第二阶段1-2协商的加密策略

ikev2协商过程

第一阶段第1-2包

相当于ikev1第一阶段的1-4

第二阶段第3-4包

相当于ikev1第一阶段的5-6和第二阶段的1-3

图中cisco FlexVPN即思科的ikev2 vpn

ikev1的esp数据包结构

esp的加密位置

1、传输模式:通讯点和加密点一致
这种模式下ESP报头在ip 头部之内,对四层以内的报头和数据进行加密
2、隧道模式:通讯点和加密点不一致
ESP直接将原来三层以内的报文全部加密,重新生成新的ip头部

这两种模式相比,transform模式数据比原数据包只多了一个esp头部,包长度有优势,传输效率高;tunnel模式在处理数据的时候不要拆开IP头部,直接加密,更快。

这部分由于ESP之后的部分全是加密的,所以只能通过数据包大小来对比.需要真机实现,等有机会了再做,模拟器只能为transport,设置tunnel无效

GRE头部的位置

我是按照这个拓扑做的测试对比,主要看包接口和后续ESP数据包的大小

从思科设备发起的ping默认大小是14+28+72=114Bytes.
GRE头部大小是24Bytes

基于感兴趣流的IPSEC

GRE over IPSec

思科的IPSec over GRE
至于为什么会有这个,我看能百度搜到的华为设备全是按照这种方式配置的,蛋疼。

思科的SVTI技术
tunnel模式设置为tunnel mode ipsec ipv4,其他配置和GRE over IPSec完全一样

思科的SVTI技术确实厉害~