strongSwan报文交互过程

简介: strongSwan报文交互过程

通过上篇案例,我们已经初步掌握了如何通过strongSwan配置两台Linux主机之间的IPsec隧道。今天我们再来看一下strongSwan配置IPsec的报文交互过程和转发性能。

组网图还是上次的拓扑。

1677234691037.jpg

首先查看一下在配置完strongSwan之后,还没有建立IPsec SA的状态。

1677234705731.jpg

和正常建立起IKE SA和IPsec SA的状态对比一下。

1677234711697.jpg

可以看到,状态和设备配置的状态相似。上次也提到了,Security Associations就是安全联盟SA,swan后面[]中是1的就是一阶段,也就是对应的IKE SA;后面是2的就是二阶段,也就是对应的IPsec SA。


Connections可以理解为对等体信息,其中前3行是IKE对等体信息,有本端和对端的身份标识以及认证方式;最后一行child就是IPsec连接,模式为TUNNEL隧道模式,因为IPsec SA是基于IKE SA创建的,所以用child来表示也是比较合理的。


Routed Connections和child对应,是通过leftsubnet和rightsubnet来配置的本端私网和对端私网。这种基于策略的VPN配置,通过匹配源目IP地址,可以将符合条件的流量通过指定的VPN隧道进行传输。


了解了这些基本状态信息,我们开始抓包。


首先还是触发IPsec隧道建立,如果已经建立的情况,可以使用命令进行重置。



strongswan restart

1677234730448.jpg

触发隧道建立。

1677234743701.jpg

抓包结果如下,可以看到报文协商过程和设备是一样的。

1677234749040.jpg

可以看到,第一对消息进行SA交换,主要是通过协商确认双方IKE安全策略的过程,报文交互的源目端口都是UDP 500,载荷中还进行了NAT-T检测,如果穿越了NAT,则将端口修改为UDP 4500。

1677234754403.jpg

从报文的Transform字段中,我们可以看到双发交互的安全策略信息。比如加密算法是AES-CBC-128,认证方式为Pre-shared key等。

1677234774600.jpg

第一个报文中发起方给出了两套安全提议,响应方选择了#1提议。

1677234779504.jpg

从状态中也可以看到对应的协商密钥信息。

1677234783809.jpg

第二对消息进行密钥交换,通过交换Diffie-Hellman公共值和辅助数据,最终双方计算生成一系列共享密钥(例如,认证密钥、加密密钥以及用于生成IPsec密钥参数的密钥材料),并使其中的加密密钥和认证密钥对后续的IKE消息提供安全保障。

1677234800233.jpg

第三对消息进行ID信息和验证数据的交换,并进行双方身份的认证。此时数据就已经都是加密的了。

1677234819471.jpg

到这里,IKE SA就协商完成了。


如果是基于路由的VPN,也就是有IPsec隧道接口的那种,一般会自动协商建立IKE SA;当有业务流量需要转发时,再快速进入到第二阶段(快速模式),也就是用在第一阶段建立的IKE SA为IPsec协商安全服务SA,建立用于最终的IP数据安全传输的IPsec SA。


1677234835949.jpg

好了,可以看到报文交互过程和华三设备的交互过程都是一样的,我就放心了。掌握了这些,我们接下来就能配置strongSwan和华三设备的对接了。


最后看一下Linux主机(4核CPU、4 GB内存)作为strongSwan网关的转发性能吧。


先用Host1作为服务器,从Host2发起测试,报文长度修改为1400字节,打流30秒。


1677234851219.jpg

测得带宽为963 Mbps,测试过程中Linux主机的CPU0利用率一度达到100%,应该是尽力了。再把服务器和客户端对调测试一下。

1677234867711.jpg

测得带宽为1.03 Gbps。看来是比VSR(4核CPU、8 GB内存)使用IPsec对接的771 Mbps要高一些,如果把CPU负载再做好一些,是不是还能提升呢?

相关文章
|
10月前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
439 34
|
数据安全/隐私保护 Windows
如何使用 SPICE client (virt-viewer) 来连接远程虚拟机桌面?
如何使用 SPICE client (virt-viewer) 来连接远程虚拟机桌面? 什么是SPICE? SPICE (Simple Protocol for Independent Computing Environments) 是一个用于虚拟化环境中的通讯协议。
5543 0
|
10月前
|
存储 人工智能 Serverless
阿里云《AI 剧本生成与动画创作》技术解决方案测评
本问是对《AI 剧本生成与动画创作》的用心体验。结论不是特别理想,在实际使用中仍存在一些问题。
443 22
|
9月前
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
73322 65
|
设计模式 安全 Java
Java 多线程并发编程
Java多线程并发编程是指在Java程序中使用多个线程同时执行,以提高程序的运行效率和响应速度。通过合理管理和调度线程,可以充分利用多核处理器资源,实现高效的任务处理。本内容将介绍Java多线程的基础概念、实现方式及常见问题解决方法。
390 1
|
网络协议
DHCP服务详解
DHCP服务详解
952 0
|
存储 Linux 编译器
Linux平台上DPDK入门指南:快速提升网络性能的利器
Linux平台上DPDK入门指南:快速提升网络性能的利器
|
算法 安全 Linux
Linux配置strongSwan
Linux配置strongSwan
Linux配置strongSwan
|
存储 设计模式 算法
[C++] static静态成员变量/函数的用法
[C++] static静态成员变量/函数的用法
406 1
|
网络协议 Shell 网络安全
strongswan之ipsec.conf配置手册(下)
strongswan之ipsec.conf配置手册