交换机实现动态防御
- 前言
- 一、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配置(根据自己需求配置)
前言
最近要实现一个具备动态防御功能的交换机。查了一下网上的资料,交换机主要有两种实现方式:
- 基于软交换机
- 基于白盒交换机
软交换机的实现方案主要有两种:
- Open vSwitch(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