2023年 1月 25日

思科开源软交换机vpp环境搭建

交换机实现动态防御

  • 前言
  • 一、VPP是什么?
  • 二、基于Ubuntu18.04编译运行VPP
    • 1.下载 VPP 源码
    • 2.Ubuntu18.04安装 VPP 依赖、编译安装
    • 2.安装、创建.deb软件包(可选)
    • 3.startup.conf文件配置、运行、vpp配置
      • 3.1 startup.conf:代码如下:
      • 3.2 运行
      • 3.3 vpp配置(根据自己需求配置)

前言

最近要实现一个具备动态防御功能的交换机。查了一下网上的资料,交换机主要有两种实现方式:

  1. 基于软交换机
  2. 基于白盒交换机

软交换机的实现方案主要有两种:

  1. Open vSwitch(ovs)
  2. VPP
    ovs对比vpp
    根据上述表格对比,最终选择了vpp

一、VPP是什么?

VPP是Vector Packet Processing的简称。据传VPP是Cisco 2002年开发的商用代码。提到VPP,不得不提到FD.io。Linux基金会于2016年2月11号创建了FD.io项目。Cisco后来将VPP代码的开源版本加入了该项目,目前VPP已成为该项目的核心。VPP运行于用户空间,支持多种收包方式,这其中也包括DPDK。

VPP有两个关键特性:

框架可扩展。

成熟的交换/路由功能。

二、基于Ubuntu18.04编译运行VPP

1.下载 VPP 源码

代码如下(示例):

$ git clone https://gerrit.fd.io/r/vpp
$ cd vpp
  • 1
  • 2

2.Ubuntu18.04安装 VPP 依赖、编译安装

在构建VPP映像之前,通过输入以下命令,确保没有安装FD.io VPP或DPDK软件包:

$ dpkg -l | grep vpp
$ dpkg -l | grep DPDK
运行上述命令后,应该没有输出或没有显示任何程序包。
运行以下make命令以安装FD.io VPP的依赖项。

$ make install-dep
编译 VPP
此构建版本包含调试符号,这些调试符号对于修改VPP非常有用。下面的 make命令可构建VPP的调试版本。
$ make build-release
构建 软件包
(5.1) deb软件包、VPP要在Ubuntu上运行

ubuntu 安装错误解决:
看错误内容,可能是 python 的版本问题。
解决方案:

第一步 安装 cffi
pip install cffi
第二步 安装
apt-get install vpp-api-python
# 报错误,
apt-get -f install
# apt-get会根据依赖关系自动安装相关组件,执行这个命令后安装vpp-api-python成功
第三步 再次安装 *.deb 包
dpkg -i *.deb

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

下载的第三方依赖的包放在/vpp/buid/external/patches 里面,如果慢的话,可以自己下完改好对应的名字放这里面。

注意:不要自己用浏览器从github上下VPP源码,再编译运行。我试了好多次编译总是莫名其妙的有问题,按上述步骤来。

2.安装、创建.deb软件包(可选)

代码如下(示例):

创建.deb软件包
$ make pkg-deb

UBUNTU 使用以下命令安装创建的软件包
$ sudo bash & cd build-root
$ dpkg -i *.deb
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

此过程在buil-root下生成很多.deb文件。

以上详情可参考:https://blog.csdn.net/weixin_38387929/article/details/115091376

3.startup.conf文件配置、运行、vpp配置

此时在build-root 下有两个文件夹install-vpp-debug-native、install-vpp-native。一个是gdb直接能用的,一个是直接运行的,按自己需求用。

3.1 startup.conf:代码如下:

unix {
  nodaemon
  log /var/log/vpp/vpp.log
  full-coredump
  cli-listen /run/vpp/cli.sock
  startup-config /setup.gate
  poll-sleep-usec 100
  gid vpp
}
api-segment {
  gid vpp
}
dpdk {
     dev 0000:03:00.0 {name G0}  //具体按自己机器配置
     dev 0000:14:00.0 {name G1}  
}
plugins { 
   plugin default { enable }   
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.2 运行

进行如下配置时先用 sudo ifconfig XXXX down 关闭vpp要用到的网卡

./bin/vpp -c etc/startup.conf
  • 1

3.3 vpp配置(根据自己需求配置)

说明:以下过程根据自己的需求配置,以下操作是将vpp配置成一个带DHCP的路由器,
可参考:
1.VPP结合dnsmasq制作家庭路由器(CentOS+VPP+Dnsmasq)
2.Using VPP as a Home Gateway(官方文档)

# 设置WAN口G0信息数据,MAC自行配置
set int state g0 up
set int mac address g0 00:11:22:33:44:55
set dhcp client intfc g0 hostname vppgate
 
# 创建loop口设置IP,并挂接网桥
loopback create
set int l2 bridge loop0 1 bvi
set int ip address loop0 192.168.10.1/24
set int state loop0 up
 
# LAN口配置
set int l2 bridge g1 1
set int state g1 up
set int l2 bridge g2 1
set int state g2 up
set int l2 bridge g3 1
set int state g3 up
set int l2 bridge g4 1
set int state g4 up
 
# 创建tap口并映射到内核
create tap id 0 host-ip4-addr 192.168.10.2/24 host-if-name lstack
set int l2 bridge tap0 1
set int state tap0 up
# 查看配置
show int addr
 
# 设置源nat模式
nat44 add interface address g0
set interface nat44 in loop0 out g0
show nat44 interfaces
 
# 如果有目的nat需求,配置如下。(可选步骤)
nat44 add static mapping local 192.168.10.1 53 external g0 53 tcp
nat44 add static mapping local 192.168.10.1 53 external g0 53 udp
show nat44 static mappings
#nat44 add identity mapping external GigabitEthernet3/0/0 udp 53053  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

参考链接:
[1]: https://blog.csdn.net/weixin_38387929/article/details/115091376
[2]: http://turbock79.cn/?p=1563
[3]: https://fd.io/docs/vpp/latest/usecases/hgw.html