openswan在NAT环境且开启DPD时双方SA生存周期不同可能存在问题
2015-01-05 19:06
411 查看
ipsec SA存在第1阶段SA
ipsec DPD是一种探测对端是否存活的机制
每一个
如果
ipsec NAT穿越是ipsec两端之间存在NAT设备时对隧道报文进行封装的机制
一般使用4500 UDP端口进行封包
如果上面描述同时使用,且ipsec两端生存周期配置不同,则可能引起问题
例如:
双端链路之间存在NAT设备
client端
server端
当server端
当server端
虽然这种情况出现机率相当小,但还是有可能出现的,所以在配置
如果两端生存周期相同,那么即使出现了上面的情况,由于两端
另,一般都把
ISAKMP SA生存周期和第2阶段
IPsec SA生存周期
ISAKMP SA生存周期以两端中配置时间最小为准
IPsec SA生存周期两端各自以本端配置时间为准
ipsec DPD是一种探测对端是否存活的机制
每一个
IPsec SA对应一个DPD,即每一条隧道对应一个DPD
如果
ISAKMP SA不存,DPD将无法工作,因为DPD发包时需使用
ISAKMP SA进行加解密
ipsec NAT穿越是ipsec两端之间存在NAT设备时对隧道报文进行封装的机制
一般使用4500 UDP端口进行封包
如果上面描述同时使用,且ipsec两端生存周期配置不同,则可能引起问题
例如:
双端链路之间存在NAT设备
client端
ISAKMP SA生存周期配置为
3600s,
IPsec SA生存周期配置为
28800s
server端
ISAKMP SA生存周期配置为
28800s,
IPsec SA生存周期配置为
3600s
当server端
ISAKMP SA到期时,server将删除自己的
ISAKMP SA和通知client端删除
ISAKMP SA,同时server端进行重协商,但由于client端在NAT内部,且server发出起的第一个协商报文端口为500,所以重协商报文无法到达client端。此时双方
ISAKMP SA都不存在,意味着
DPD已不工作了,双方
IPsec SA还存在,隧道还能互通
当server端
IPsec SA到期时,server将删除自己的
IPsec SA和通知client端删除
IPsec SA,
但正巧这个通知报文在网络中被丢弃,那么client端没有删除
IPsec SA,还认为隧道是可用的,同时DPD也不工作了,这就出现了两端状态不一致问题。此时server端隧道状态为断开,而client端隧道状态为连接,但实际上双端之间隧道已不能互通了。DPD又不能工作,只能等client端
IPsec SA生存周期到期才能重协商恢复隧道正常
虽然这种情况出现机率相当小,但还是有可能出现的,所以在配置
ISAKMP SA生存周期和
IPsec SA生存周期还是保持两端相同为好
如果两端生存周期相同,那么即使出现了上面的情况,由于两端
IPsec SA生存周期一样,当server端到期时,client端基本上也快到期了,所以即使
client端没有收到server端删除IPsec SA报文,client端
IPsec SA也很快到期再进行重协商,恢复隧道正常
另,一般都把
ISAKMP SA生存周期时间设置得比
IPsec SA生存周期大
相关文章推荐
- openswan在NAT环境且开启DPD时双方SA生存周期不同可能存在问题
- 解决spring中不同配置文件中存在name或者id相同的bean可能引起的问题
- 解决spring中不同配置文件中存在name或者id相同的bean可能引起的问题
- Android开启多进程和因为虚拟机不同存在的问题
- 【Java 单例模式】Java 单例模式在多线程环境中可能存在的问题
- 解决spring中不同配置文件中存在name或者id相同的bean可能引起的问题
- 页面在不同屏幕分辨率下存在的问题及解决办法
- (原创)处理Sql server在不同环境下排序规则不一致的问题(三)
- 开发环境不同引发的映射路径不正确的问题
- 如何解决linux下编译环境,运行环境不同的问题
- 批处理问题:SET 命令在 FOR 循环中失效 / SET 环境变量生存域/作用域
- PHP(2):搭建PHP 运行环境中可能出现的问题及处理方法 推荐
- linux不同用户环境变量问题
- 页面在不同屏幕分辨率下存在的问题及解决办法
- localtime_r在多线程环境下可能存在死锁
- 解决wdk 中不同编译环境兼容性问题解决
- realplayer 官方下载的.bin文件可能存在问题
- 初学51地图,感觉LTEvent API注释可能存在问题
- (原创)处理Sql server在不同环境下排序规则不一致的问题(二)
- 集合已修改;枚举操作可能无法执行。使用foreach 循环删除DataRow的时候的问题! 该死的AcceptChanges() Row.elete() Remove(Row)使用不同。