Author basilguo@163.com
Date Aug. 03, 2023
Description VPP集成StrongSwan以使用IPsec。
1. 背景
根据List of Internet exchange points by size,目前IXP的最大吞吐是Brazil Internet Exchange的28030Gbps(平均为15830Gbps,于2023年3月15日更新),然后是Equinix Exchange的19600Gbps(平均9900Gbps,于2020年8月5日更新)。这样感觉1.89Tbps大概能覆盖大部分的IXP流量了。那域间ipsec应该还算可以吧。
不过这里提到目前互联网最大速率已经到了 319 Terabits per second (Tb/s),那就远远不如了。只是这个速度貌似并不是互联网域间的。Anyway,就先搞搞VPP和StrongSwan的结合吧。
本文参考Intel的FD.io VPP-SSwan and Linux-CP - Integrate StrongSwan with World’s First Open Sourced 1.89 Tb IPsec Solution。不过我目前也用不到docker,所以就打算参照它搞到物理机上来,虽然目前还没搞定。
2. 环境
2.1. 版本
$ sudo vppctl # 或者make run
DBGvpp# show version
vpp v23.06-release built by XXX on XXX at 2023-08-02T07:37:51
$ lsb_release -r
Release: 20.04
2.2. 拓扑
IKE的设置是需要至少两端的。所以我在H3和H5上装了vpp_sswan以及StrongSwan,H4用来查看数据包的。H3、H4、H5都配置了frr-bgpd,以用来接通路由。也可以指定路由,或许会更加简单一点。
+--------+ +--------+ +--------+
| H3 |---| H4 |---| H5 |
+--------+ +--------+ +--------+
# H3
sudo ip addr add 192.168.34.3/24 dev eth2
## 以下可选的,如果使用了FRR,配置好bpg就行
sudo ip route add 192.168.45.0/24 via 192.168.34.4 dev eth2
# H4
## H4->H3
sudo ip addr add 192.168.34.4/24 dev eth3
## H4->H5
sudo ip addr add 192.168.45.4/24 dev eth2
# H5
sudo ip addr add 192.168.45.5/24 dev eth2
## 以下可选的,如果使用了FRR,配置好bpg就行
sudo ip route add 192.168.34.0/24 via 192.168.45.4 dev eth2
3. 编译安装
有关VPP或FRR的配置,这里不再详述。可以参考另一篇博文。
我们选择的这个版本中已经包含了vpp_swan插件了,只是需要自己进一步的编译安装以及StrongSwan。
Intel给的那个文档,需要结合官方的安装vpp_sswan。
不过Intel给的并没有错,如果编译出问题,例如报错找不到<daemon.h>
或者找不到<plugins/plugin.h>
或者其它错误,那么就老老实实的使用make -j1
吧,多个任务之间有依赖关系,不能这样使用。所以要么修改Makefile,要么就老老实实使用make -j1
,再或者就自己手动编译。
需要先安装两个依赖,这样才能继续后续的编译安装操作。
sudo apt install -y gperf libsystemd-dev
3.1. all-in-one
alias make=/usr/bin/make -j1
VPP_HOME=/usr/local/src/vpp
cd ${VPP_HOME}/extras/strongswan/vpp_sswan
# 最简单的方式是使用,它会干三件事情:pull-swan, install-swan以及make $(TARGET)
# 这个TARGET是 libstrongswan-kernel-vpp.so
make all
# 这个安装也做两件事:拷贝TARGET到插件目录($(PREFIX)/lib/ipsec/plugins),
# 以及拷贝conf文件到PREFIX_SYS_CONF=/etc;PLUGINCONF=$(PREFIX_SYS_CONF)/strongswan.d/charon/
sudo make install
这样编译就搞定了。如果不行,那么就一步步来。
3.2. step-by-step
如果上面成功就不需要再搞这个了。成功标志就是有没有生成 libstrongswan-kernel-vpp.so。即便是这里,也推荐使用make -j1
,出现奇怪问题就回退这个。
alias make=/usr/bin/make -j1
VPP_HOME=/usr/local/src/vpp
# 下载StrongSwan
## 如果执行过make all那个,大概率已经下载好了,可以直接用。
## 使用strongswan 5.9.5或者5.9.6,这是官方推荐的。因为只有这两个版本测试过了可行。
## VPP23.06自己给下载的就是5.9.6版本
cd ${VPP_HOME}/build/external/downloads
if [ -z strongswan-5.9.6.tar.gz ]
then
wget https://github.com/strongswan/strongswan/releases/download/5.9.6/strongswan-5.9.6.tar.gz
fi
# 这里vpp_sswan官方和intel文档有些冲突,以官方为准吧,实际上就是一层目录的区别。
# 把上述下载的代码解压并拷贝。代码错没错不知道,自行检查吧。
# 大概意思是对了,因为我用的`make -j1 all`。
tar -xzvf ${VPP_HOME}/build/external/downloads/strongswan-5.9.6.tar.gz .
cp -r strongswan-5.9.6 ${VPP_HOME}/build-root/build-vpp-native/external/sswan
# 编译以及安装
./autogen.sh
# 官方也是这样给的,改不改看需求
# 如果要改,就看下`./configure -h`是怎么提示的吧
# 大概也就是为了代码的整齐,改下前两个,尤其是/etc,有些坑哦,建议更改为/etc/strongswan
# 不过我这里就这样吧,把/etc污染了[Lol]
./configure --prefix=/usr --sysconfdir=/etc --enable-libipsec --enable-systemd --enable-swanctl --disable-gmp --enable-openssl
make
sudo make install
# 还得把这里也给搞一下,不过就不要用make命令了,不然还是相当于make all。把上面手动执行的
# 通过 make pull-swan 和 make install-swan 重新执行一下。
cd ${VPP_HOME}/extras/strongswan/vpp_sswan/
sudo make install
成功的标志和上面一样,也都是如果没有报错就是成功了的。libstrongswan-kernel-vpp.so
这个是一定要有的。
StrongSwan安装完毕后已经由systemd来管理了,可以使用systemctl控制开闭。
4. 测试
有关测试我不想使用docker,所以还在摸索strongswan中。