[dev][ipsec][distributed] strongswan如何做热迁移/高可用/High Availability
问题描述:
原生的基于kernel 的 strongswan 如何做高可用,HA,High Availability
问题分析:
基于我们已知的,ipsec,strongswan的知识。问题分解如下:
1. IKE SA的同步,CHILD SA的同步。
2. ESP包是有序列号的,序列号的同步问题。
3. 隧道不能断,业务也不能断。所以还有一个隧道IP的同步问题。
解决方案:
strongswan是这样解决的。
1. 问题1)与strongswan软件进行解决,可以通过配置,配置一个高可用的组,组内彼此会进行IKE SA和CHILD SA的同步。
首先启用HA Plugin。 然后,做一个大概这样的配置,如下:
ha { # ... pools { sales = 10.0.1.0/24 finance = 10.0.2.0/24 } }
2. 问题2)和问题3)由linux iptables的 cluster IP功能解决。
cluster IP的做法是,在高可用组内,对交换机进行ARP欺骗,让交换机将tunnel IP的包组播给高可用组内的所有机器。
每一个机器会使用源IP算一个hash,命中自己的包会留下,其他包会丢弃。这样就把所有的连接均分到了不同的节点上面。
ipsec使用一个定制过的cluster IP module。它与原版cluster IP的区别是:
1,使用源IP加SPI做hash。
2. 不命中hash的包,在被丢弃前,会被用来维护standby child SA的ESP sequence number。 这样seq是实时同步,用来解决问题2)
节点之间通过HA plugin交互各种消息,包括heartbeat等。从而完成,同步,主备,failover等。
参考资料:
https://wiki.strongswan.org/projects/strongswan/wiki/HighAvailability
除了前边我整理的,篇首的两端对应一般问题描述,也值得阅读。