原生的基於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
除了前邊我整理的,篇首的兩端對應通常問題描述,也值得閱讀。