IPSec 100问
此文的目的是汇集学习IPSec的过程中遇到的问题,会持续不断的更新。100问是虚指,随着时间的推移,问题肯定不只100个。
1. IPsec SA的硬生存周期和软生成周期
IPSec SA的生存周期分为软生存周期和硬生存周期。
-
硬生存周期:是IPSec SA的生命周期截止时间。
两端设备协商时,实际生效的硬生存周期为两端设备上配置的硬生存周期中较小的一个。
-
软生存周期:是从旧IPSec SA建立到生命周期截止前启动协商新IPSec SA的时间。
目前没有发现华为、H3C的软生存周期可配置。
华为的软生存周期有默认值,如下表。
软生存周期方式 | 描述 |
---|---|
基于时间的软生存周期(软超时时间) |
实际生效的硬生存周期(硬超时时间)的7/10 |
基于流量的软生存周期(软超时流量) |
实际生效的硬生存周期(硬超时流量)的7/10 |
IPSec SA快要失效前,IKE将为对等体协商新的IPSec SA。在新的IPSec SA协商好之后,对等体立即采用新的IPSec SA保护IPSec通信。如果有业务流,则旧IPSec SA立即被清除;如果无业务流量,则旧IPSec SA在10秒或硬生存周期到期后被清除。
当同时配置了基于时间和流量的生存周期时,无论哪一种方式的生存周期先到期,IPSec SA都会失效。
软生存周期的设计目的是为了减少IPSec SA重协商时业务流中断。
2. IKE 报文的解密和IPSec业务报文的解密
关于wireshark解密IKE报文和ESP、AH报文,可参考以下两篇文档:
https://wiki.wireshark.org/ESP_Preferences
https://www.cnblogs.com/TBONTBER/p/3490733.html
上述两篇文档对IKEv2进行解密。
对于IKEv1协议报文的解密,需要用到pluto log file。未实际操作过。
3. IKE安全提议中的认证算法和完整性验证算法的问题
认证算法是针对IKEv1进行配置的,而完整性验证算法是针对IKEv2进行配置的。
另外,伪随机数生成函数的算法也是针对IKEv2的。
至于原因,有待进一步求证。
4. IPSec SA和SP是如何关联起来的?
5. ESP封装格式的报文,是先加密再认证还是先认证再加密?
6. IPSec NAT-T(NAT穿越)
ah(transport、tunnel封装)不支持NAT穿越。ah认证的内容包括IP地址,而NAT会修改IP,故ah封装模式下无法建立IPSec连接。
esp(transport封装)不支持NAT穿越。
7. 证书验证和预共享密钥验证的主要区别
两者的主要区别在于SKEYID的计算和交换的身份信息。
8. 关于AH-ESP封装
在libreswan的网站上看到如下一段描述:(https://libreswan.org/man/ipsec.conf.5.html)
大意是AH+ESP双重封装是个巨大的负担,在RFC8221的第4部分已经明确表示不建议使用(见下图)。如果只想认证而不加密业务,建议使用ESP封装,加密算法采用null。
9. IPSec硬件卸载功能(IPsec hardware offloading)
Linux内核提供了一个补丁,该补丁添加了为IPsec状态和ESP数据包执行IPsec硬件卸载所需的所有位。 xfrmdev_ops被添加到net_device。 xfrmdev_ops具有管理硬件中的xfrm状态以及执行每个数据包卸载决策所需的函数指针。
具体来讲,什么是IPSec的硬件卸载功能呢?
所谓IPSec硬件卸载,即利用硬件(主要指支持该功能的网卡或加密卡)功能,对IPSec的处理任务实现卸载。可以降低CPU因处理IPSec加密和解密造成的负担。
IPSec的软件加、解密操作及其耗费CPU。硬件可以更高效地执行数据包的加密与解密工作。硬件通过对符合策略的数据包的加解密运算,可降低CPU 占用率,提升网络吞吐。