[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

除了前边我整理的,篇首的两端对应一般问题描述,也值得阅读。

原文地址:https://www.cnblogs.com/hugetong/p/10894758.html