原生的基于kernel 的 strongswan 如何作高可用,HA,High Availabilitylinux
基于咱们已知的,ipsec,strongswan的知识。问题分解以下:spa
1. IKE SA的同步,CHILD SA的同步。code
2. ESP包是有序列号的,序列号的同步问题。blog
3. 隧道不能断,业务也不能断。因此还有一个隧道IP的同步问题。ip
strongswan是这样解决的。get
1. 问题1)与strongswan软件进行解决,能够经过配置,配置一个高可用的组,组内彼此会进行IKE SA和CHILD SA的同步。同步
首先启用HA Plugin。 而后,作一个大概这样的配置,以下:hash
ha { # ... pools { sales = 10.0.1.0/24 finance = 10.0.2.0/24 } }
2. 问题2)和问题3)由linux iptables的 cluster IP功能解决。it
cluster IP的作法是,在高可用组内,对交换机进行ARP欺骗,让交换机将tunnel IP的包组播给高可用组内的全部机器。table
每个机器会使用源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
除了前边我整理的,篇首的两端对应通常问题描述,也值得阅读。