前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >learning:vpp-sswan环境搭建

learning:vpp-sswan环境搭建

作者头像
dpdk-vpp源码解读
发布2023-11-27 18:27:06
6860
发布2023-11-27 18:27:06
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析

本文主要参考intel发布的vpp-sswan白皮书的内容搭建环境验证strongswan和vpp集成环境。

白皮书地址:https://networkbuilders.intel.com/solutionslibrary/fd-io-vpp-sswan-and-linux-cp-integrate-strongswan-with-world-s-first-open-sourced-1-89-tb-ipsec-solution-technology-guide

vpp-sswan是strongswan的一个插件,它将strongswan的ipsec esp进程处理逻辑从Linux内核卸载到vpp。vpp-sswan利用strongswan可扩展插件设计,将strongswand软件的SA创建/删除以及路由更新操作转换为vpp C api调用,通过api调用将ipsec配置下发到vpp中。也就是说strongswan是ipsec协议栈控制面,vpp则是数据转发面。

vpp-sswan具有以下优点:

1. 易于使用:vpp-sswan遵循strongswan charon规范编写,并提供有用的脚本来编译和安装插件。给定自定义的strongswan安装,用户只需要运行单个命令或手动将编译好的vpp-sswan插件和配置文件复制到特定的strongswan位置,重启strongswan服务即可。

2. 性能:vpp-sswan利用了高度优化的VPP I/O和IPsec协议栈。这意味着网络vpp负责处理I/O和IPsec数据通路。

vpp-sswan插件从22.10版本开始已集成到在vpp主线中,并与strongswan 5.9.5或5.9.6版本一起使用。vpp使用linux-cp插件和strongswan共享网络I/O接口。

上图中展示了在Linux-CP的帮助下,IKE交互的数据流在VPP和strongswan流程流程。在这个例子中,我们假设strongswan预期IKE消息和加密的ESP报文的本地IP地址是10.0.0.1。为了将来自VPP拥有的网卡的IKE数据包路由到strongswan,我们创建了一个Linux-CP实例,它绑定了镜像接口对(图中的WAN网卡端口和Tun/Tap端口),两者都具有相同的IP地址10.0.0.1。Linux-CP有助于自动配置接口之间的路由。当IKE消息通过WAN网卡端口被vpp接收后,会通过Tun/Tap端口转发到内核,经过Linux内核栈处理后再传递给strongswan。如果安全联盟协商成功,strongswan将通过vpp-sswan插件配置vpp中的IPsec ESP配置及路由。自动化配置完成后,VPP将负责IPsec ESP加密/解密,并将数据包转发到所需的端口。

假设通过Internet连接的两个子网192.168.0.0/24和192.168.1.0/24需要建立一条安全的IPsec隧道。每个子网都有一个IPsec网关系统,WAN ip分别为10.0.0.1和10.0.0.2。每个网关系统上的strongswan应用协商一个公共的安全联盟,私有地创建一个会话对称加密算法和密钥。strongswan应用程序将数据平面处理任务交给VPP,然后使用VPP的VAPI创建安全策略(SP)和SA。vpp-sswan将确保必要的SA/SP创建被正确解析为VPP VAPI调用。Linux-CP还将处理WAN网络适配器和镜像Tun/Tap端口之间的正确路由配置。

上图显示了ipsec加解密相关流程。加密流程:当网络数据包被LAN网络适配器接收并匹配出站安全策略(SP)规则时,报文将被加密。该过程包括在数据包中添加ESP (Encapsulating Security Payload,封装安全负载)头。一旦加密,数据包就被转发到WAN网卡端口。解密流程:当WAN网络适配器接收到网络分组时,将根据任何适用的入站SP规则对其进行检查。如果规则匹配,则解密报文,并删除ESP头或tunnel头。随后,解密数据包被转发到LAN网卡或Tun/Tap端口,具体取决于解密数据包中的IP目的地址。

下面是参考白皮书基于vpp最新主线分支在ubuntu22.04环境搭建流程。首先需要编译vpp release 版本,这里就不再展开了(默认vpp-sswan插件中Makefile仅适配了release版本)。

代码语言:javascript
复制
vpp Version:     v24.02-rc0~46-ga16463610
OS:Ubuntu 22.04.3 LTS
kernel Version:5.15.0-88-generic

接下来就是需要先安装strongswan编译所依赖的环境库。

代码语言:javascript
复制
apt install -y flex bison byacc 
apt install -y gperf python3  libsystemd-dev

接下来进入vpp-sswan目录执行make all,就是自动下载strongswan代码及编译。

代码语言:javascript
复制
cd ~/workspace/vpp/extras/strongswan/vpp_sswan
root@jinsh:~/workspace/vpp/extras/strongswan/vpp_sswan# make all 

运行完之后就会在当前目录下生成libstrongswan-kernel-vpp.so,然后直接make install,就会将so及kernel-vpp配置文件拷贝到strongswan相关的配置路径中。

代码语言:javascript
复制
#查询当前路径下生成libstrongswan-kernel-vpp.so
root@jinsh:~/workspace/vpp/extras/strongswan/vpp_sswan# ls -lt
-rwxr-xr-x 1 root    root    347832 Oct 15 08:34 libstrongswan-kernel-vpp.so
#执行make install安装so及配置文件。
root@jinsh:~/workspace/vpp/extras/strongswan/vpp_sswan# make install
cp libstrongswan-kernel-vpp.so /usr/lib/ipsec/plugins/libstrongswan-kernel-vpp.so
cp kernel-vpp.conf /etc/strongswan.d/charon/

接下来就是配置vpp的startup.conf文件,如下:

代码语言:javascript
复制
#使能linux-cp插件,关闭ikev2插件
plugins {
         plugin linux_cp_plugin.so { enable }
         plugin ikev2_plugin.so { disable }
}
#开启vpp和linux内核之间配置自动同步
linux-cp {
      lcp-sync
}

重启vpp及strongswan软件,查询strongswan vapi接口已注册成功。

代码语言:javascript
复制
vpp# show api clients 
Shared memory clients
                Name      PID   Queue Length           Queue VA Health
          strongswan    52411              0 0x00000001301dea40 OK
vpp# 

至此,strongswan和vpp集成环境已搭建完成,后续文章将导入配置验证效果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档