1.VPP 编译、安装、使用及插件开发注意事项
2.Ubuntu 18.04快速配置WireGuard互联
3.VPP配置指南:基于IKEv2的IPsec ***
4.DPDK加解密设备与IPSEC
5.vppip指的是什么
VPP 编译、安装、使用及插件开发注意事项
VPP(Vector Packet Processing)是一个由Cisco开发的开源可扩展框架,用于提供易于使用的投影寻真源码高性能交换和路由功能。它通过使用各种插件(Plugin)来处理网络协议,这些插件可以在配置代码中指定其后续操作。插件间的处理逻辑通过返回的索引链接起来,形成一个处理流程。
VPP的核心在于其高性能处理机制,它将相同类型的包放在数组中,利用CPU缓存提高效率,并通过SSE、AVX指令加速(x平台)、NEON指令加速(ARM平台)或AltiVec技术加速(PowerPC平台)。Bihash实现了一个高效的检索表结构,支持读写分离。
VPP安装非常简单,无需编译步骤,直接从官方网站下载源代码,通过apt/yum更新后,执行apt/yum install vpp即可完成安装。不过需要注意的是,安装的版本可能较低。
在使用VPP时,新版本内置了DPDK,但默认情况下未启用高性能模式。默认运行方式可能为socket/af_packet,性能一般。如果你熟悉交换机指令,php递归源码VPP的使用方式会很熟悉,具有自动补全、帮助和显示信息的功能。创建虚拟网口与VPP建立通信通常使用veth技术。
创建虚拟网口时,如需让VPP运行,通常需要通过命令创建网口并开启主机到VPP的通道。具体操作可参考以下示例:创建虚拟网口与VPP内部建立通讯。
VPP提供了一套完整的命令系统,允许用户进行详细的配置和调试。使用VPP指令时,通过ping .0.0.2检查网络连通性,同时VPP内部的show int命令可以显示统计数据的变化情况,而主机通过tcpdump工具可以抓取到包。
编写插件时,可以参考src/examples/sample_plugin/sample中的示例代码。插件初始化代码在sample.c/sample_init函数中,其中VNET_FEATURE_INIT宏定义了前导节点及插入到哪个节点前面。默认位置为ethernet-input,即适配器输入的前面。vnet_feature_enable_disable函数用于激活节点,参数1通常包含前一步中定义的值。在插件命令执行时,如sample macswap,将调用相应的节点逻辑。
丢包操作可以通过在插件初始化时获取error_drop节点的全局索引,然后将需要丢弃的包存储到目标位置,并使用vlib_put_frame_to_node函数将包放入error_drop节点。实现时,可以使用vlib_get_next_frame获取目标包地址,无忧商城源码然后使用put_frame函数将包放入指定位置。
编写和编译插件的流程相对标准,使用emacs进行编辑。VPP的源码编译相对简单,通常只需执行几条命令即可。需要注意的是,在编译过程中,可能会遇到如内存分配不足等问题,因此在虚拟机环境和图形界面下需进行相应的优化。同时,在特定版本和环境下,可能需要额外的依赖库和配置文件。
在安装和配置VPP时,可能会遇到一些常见的问题,例如无法打开日志文件、组vpp不存在等。这些问题通常可以通过调整配置文件或创建相关目录来解决。在某些版本和环境下,安装时可能需要额外的依赖包,如intel-ipsec-mb、dpdk、rdma-core、xdp-tools、quicly、meson等,确保在编译和安装过程中正确配置这些依赖。
最后,确保在安装和运行VPP时有足够的磁盘空间,特别是在配置DPDK时,需要充足的oracle dump 源码内存资源。如果在HyperV下的Ubuntu.环境中遇到问题,可能需要额外的配置和优化。对于较新的Ubuntu版本,确保使用的是适合VPP版本的系统软件包,避免因版本不兼容导致的问题。
Ubuntu .快速配置WireGuard互联
大概是去年这个时候,我发了几篇有关WireGuard的文章(使用8条命令即可完成的***配置!CentOS快速配置WireGuard全互联组网),WireGuard的对标选手主要是IPsec和open***,目标是比IPsec更快、更简单、更精简、更有用,比 Open*** 性能更高。
对比IPsec部分,我们之前也测试过了(2个报文即完成隧道建立!WireGuard的报文交互竟然比野蛮模式还快!),在Windows系统中,WireGuard确实相比传统的IPsec有了较大的改进,一般需要至多6次报文交互即可完成隧道建立;并且,传统的IPsec在转发层和接口层是分离的,而WireGuard则直接新建了一个虚拟接口来进行转发。
性能部分,虽然我们没有测试到WireGuard官方宣称的速率,但是比主机IPSec加密的性能领先空间还是巨大的!
WireGuard认为Open***的性能很差,因为必须在内核空间和用户空间之间多次复制数据包,需要一个长寿命的守护进程。并且支持全部过多的copy问道源码TLS功能,增加了相当多的代码,提高了漏洞暴露的风险。目前我们也多次测试过open***了(open***的Linux客户端竟然比Windows客户端性能高5倍不止),后面我们会将相关信息验证一下。
之前协助很多小伙伴处理了WireGuard的一些问题,今天我们来介绍一下Ubuntu .系统中配置WireGuard的基本方法。
首先是软件安装,这个就很简单了,我们之前在CentOS 7系统中提供了3种方法,这里我们直接用最简单的。
首先,作为前提条件,我们需要为主机增加一个虚拟网卡,并配置一个IP地址。
在另一台主机中做同样的操作。
然后就是创建WireGuard的配置文件,可以参考之前的文章(Wireguard配置文件详解)。主要就是[Interface]中本地的接口配置和[Peer]中邻居的配置信息,其中公钥和私钥信息需要手工在本地生成。
在另一台主机中做同样的操作。
到这里我们就拿到了双方的公钥和私钥信息,私钥是配置在本端的[Interface]配置中的,公钥是配置在对端的[Peer]配置中的。
接下来,我们想让两台主机使用通过.1.1.0/网段建立连接,对应[Peer]配置中的Endpoint部分,端口号使用,配置允许邻居通过WireGuard网卡传入的流量以及本地要发送给对端发送的流量仅限..1.0/网段。那我们可以将配置文件简单配置成如下所示:
对应的,对端的Wireguard配置如下:
两端都配置完成之后,就可以配置调用生效了。
可以看到,配置前后的显示存在明显差异;再配置好另一台终端,就可以测试访问了。
我们查看一下设备的路由表信息。
通过上次的测试,我们发现Ubuntu .的性能最大可以达到 Gbps(Debian阵营还是要原装,Ubuntu是真不行)。接下来,我们来测试一下载Ubuntu系统中WireGuard能达到多少性能。
可以看到,在相同配置参数下,使用底层网卡打流的带宽是.7 Gbps,经过WireGuard隧道转发的带宽是2. Gbps,这个数值比之前它自己宣称的1 Gbps高出去一倍多了。
呃,不过好像这个带宽也没有VPP的性能高啊?毕竟我们之前将1C1G的VPP的性能测得了3. Gbps(CPU0实锤了!VPP这个精致的单核英雄主义者!!),是不是WireGuard测得不仔细啊?
对了,最后提一下,这里我们手工创建的WireGuard网卡wg0重启之后就失效了,还需要再次配置,非常不方便。如果我们想实现WireGuard开机自动连接,可以将相关命令写入到启动脚本文件/etc/rc.d/rc.local中就可以了。
还有一个使用wg-quick配置的方法,你还记得吗?(配置Wireguard的几个进阶玩法)
好了,今天就介绍到这里吧!
长按二维码 关注我们吧
VPP配置指南:基于IKEv2的IPsec
***VPP配置IPsec ***,尤其是基于IKEv2的方案,为网络安全提供了强大支持。部署VPP并具备基本转发功能后,我们接下来探讨如何建立安全的IPsec隧道。IPsec是IETF制定的三层隧道加密协议,用于保护数据传输,通过安全联盟(SA)在两个通信方间创建加密通道。
SA的建立有两种方式:手工配置和IKE自动协商。手工方式适用于少量对等体或静态组网,而IKEv2自动协商(支持野蛮模式和NAT穿越)适用于动态网络环境,无需所有对等体有静态IP。
在VPP中,自.版本开始,主要使用IKEv2进行SA协商,通常分两阶段完成,第一阶段生成IKEv2 SA,第二阶段生成IPsec SA。NAT穿越场景下,可使用FQDN或RFC进行标识。
配置过程包括设置接口IP,配置IKEv2 profile,选择认证鉴权方式(如PSK),指定对端ID,配置流量选择器,以及设置发起者和响应者角色。配置完成后,VPP会创建一个IPsec隧道接口,并配置路由使其互通。测试结果显示,报文已加密,且外层报文头显示为GRE over IPsec类型。
查看IKEv2和IPsec SA状态,可以进一步确认隧道的建立和安全设置。至此,你已经掌握了基于IKEv2的VPP IPsec配置基础。如有兴趣,可通过相关命令深入了解。
DPDK加解密设备与IPSEC
DPDK 加解密设备与 IPSEC 整体框架包含三大部分:加解密框架、加解密设备和安全协议。
加解密框架 (crypto framework) 主要负责 API 设计与总体架构规划,具体实现细节则在加解密设备 (crypto dev) 层次中展开。设备层分为 null 实现、硬件相关设备(如 Intel、ARM、NXP、AMD 等)及基于 VIRTIO 的 PMD 设备。不同设备支持不同的加密算法,详情可见相关文档。
接口 API 为设备调度与使用提供了标准接口,包括设备调度 API (schduler) 和加解密设备使用 API (cryptodev)。初始化加密设备遵循特定流程,包括实体设备与虚拟设备的初始化方法。
安全协议 (Security Framework) 集成了 NIC pmd 和 Crypto pmd,主要功能是整合与调用,用于处理 IPSEC 报文。硬件 offload 与协议 offload 是 IPSEC 处理过程中的重要技术,前者使硬件直接负责解密过程,后者允许硬件参与包头处理。IPSEC 封解包能力由设备决定,可通过特定 API 查看。
为了处理 IPSEC 报文,专门使用了 rte_ipsec 模块。该模块在 master 分支中,提供详细的 API 和用法指南。此外,针对 DPDK、网络协议栈、vpp、OvS、DDoS、NFV 及虚拟化领域的学习资源与教程也可通过指定链接获取。
vppip指的是什么
虚拟专用网络(Virtual Private Network)是一种通过公共网络,如互联网,建立的专用通信网络。它利用加密和隧道技术,确保数据传输的安全性,使用户能够通过互联网安全地访问企业内部网络资源。
VPPip,即VPPrivate IP,表示在虚拟专用网络环境下,为用户分配的私有IP地址。这种私有IP地址在虚拟网络内部使用,与互联网上的公共IP地址相隔离,确保了网络通信的安全性和隐私性。通过VPPip,用户可以不受地理限制地访问网络资源,进行远程工作或业务。
虚拟专用网络的实现依赖于多种技术,如IPSec、SSL、PPTP、L2TP、GRE等。这些技术共同构建起一条安全的隧道,将用户的数据从源端安全地传输到目标端。在虚拟专用网络中,数据被加密,只有拥有正确密钥的接收方才能解密数据,确保了信息的机密性和完整性。
虚拟专用网络的应用场景广泛,包括企业远程办公、移动设备接入企业网络、远程访问服务器等。它为用户提供了一种灵活、高效、安全的网络连接方式,使得在任何地点、任何时间都能够访问到所需的网络资源。
总之,虚拟专用网络(VPPip)通过提供私有IP地址和安全的数据传输通道,为用户构建了一个独立、安全的网络环境。它不仅解决了远程访问的安全问题,还为企业提供了一种高效、经济的网络解决方案。