用VPP软件交换机连接QEMU KVM虚拟机

本文介绍了如何使用FD.io VPP软件交换机与QEMU KVM虚拟机进行连接。首先,确认宿主机CPU支持硬件虚拟化,然后配置VPP以桥接模式连接物理网卡和虚拟网卡。接着,创建和配置QEMU虚拟机,使用libvirt和virsh管理工具。通过vhost-user连接VPP和虚拟机,确保QEMU版本大于2.7。最后,建立宿主机到VPP的虚拟链路,用VPP桥接虚拟网卡和物理网卡,并进行端口镜像以捕获流量。
摘要由CSDN通过智能技术生成

假设http://FD.io VPP已经装好,并且可以用QEMU创建和启动 virtual machines。
参考官方实验:FD.io VPP with Virtual Machines

1. 简介

1.1 靶场拓扑介绍#

这个仿真靶场平台的实验,可以用一台物理服务器做实验,也可以跨越两台物理服务器作实验。

  • 如果一台服务器作实验:可以把攻击机Kali Linux和预置漏洞的靶机Metasploitable运行在同一台服务器上。这台服务器并不需要有万兆光纤网卡,只需要用桥接模式的vpp软件交换机来连接两台虚拟机。
  • 如果两台服务器做实验:可以一台运行攻击机Kali Linux,另外一台部署预置漏洞的靶机Metasploitable。两台服务器通过万兆光纤网卡连接,两台服务器上分别起桥接模式的VPP软件交换机。如下图所示,右边服务器上的VPP软件交换机启动了桥接模式,连接了万兆光纤物理网卡和虚拟网卡。

$ ping 192.168.100.3  
64 bytes from 192.168.100.3: icmp_seq=492 ttl=64 time=0.104 ms
64 bytes from 192.168.100.3: icmp_seq=493 ttl=64 time=0.063 ms
...

1.2 KVM虚拟化简介#
KVM虚拟机(名称来自英语: Kernel-based Virtual Machine 的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个虚拟机hypervisor。KVM由Quramnet公司于开发(2008年被 Red Hat 收购),从 Linux 2.6.20 起就作为模块被包含在 Linux 内核中。


KVM虚拟机需要宿主机的CPU能支持硬件虚拟化扩展(比如, Intel VT or AMD-V)。下面的命令可以校验宿主机cpu的硬件虚拟化支持。
egrep '(vmx|svm)' --color /proc/cpuinfo

如果输出结果不包含vmx 或者 svm 标志,这意味着宿主机CPU没有hardware virtualization支持。这样你就没法在宿主机上使用KVM。验证过宿主机cpu可以支持vmx或svm特性,下面才可以继续安装KVM。参考:How to use KVM from the command line on Debian or Ubuntu
参考资料:云计算与虚拟化技术发展编年史,以及虚拟化技术实现 — QEMU-KVM & Libvirt,以及虚拟化技术实现 — KVM 的 CPU 虚拟化

2. 配置网卡

注意:要停止所有实验时,首先需要在QEMU界面里关掉所有虚拟机,然后再重启vpp软件交换机。

virsh list --all
virsh destroy Kali-Linux-2021.2-virtualbox-amd64
virsh destroy metasploitable-linux-2.0.0
virsh list --all

sudo vppctl "set interface l2 bridge VirtualEthernet0/0/0 0"
sudo vppctl "set interface l2 bridge VirtualEthernet0/0/1 0"
sudo vppctl "set interface l2 bridge TenGigabitEthernet86/0/0 0"
sudo vppctl "set interface l2 bridge host-vpp-out0  0"
sudo vppctl "create bridge-domain 100 del"

sudo vppctl "delete vhost-user VirtualEthernet0/0/0" #VPP删除vhost-user接口命令
sudo vppctl "delete vhost-user VirtualEthernet0/0/1" #VPP删除vhost-user接口命令
sudo rm /tmp/vm00.sock
sudo rm /tmp/vm01.sock
sudo vppctl "clear interfaces"

# 该命令会自动删除成对存在的两个虚拟网卡
sudo ip link delete dev vpp-host0

# 停止vpp服务
sudo service vpp stop
sudo ifconfig nic0 down

2.1 绑定物理网卡(如果服务器上有万兆网卡,想跨服务器作大型实验)#

先查看本地物理主机inspur1的光纤卡pcie地址

$ sudo lshw -class network -businfo

Bus info          Device      Class          Description
========================================================
pci@0000:1a:00.0  eth0        network        Ethernet Connection X722 for 1GbE
pci@0000:1a:00.1  eth1        network        Ethernet Connection X722 for 1GbE
pci@0000:af:00.0  nic0        network        Ethernet Controller XXV710 for 25Gb
pci@0000:af:00.1  nic1        network        Ethernet Controller XXV710 for 25Gb
                  virbr0-nic  network        Ethernet interface

修改vpp启动配置文件,位置/etc/vpp/startup.conf,把下面配置信息插入,目前只利用nic0到另外一台服务器的光纤连接,所以只配置nic0的信息。

dpdk {
	socket-mem 1024 #更改每个套接字的大页面分配 默认值256
	dev 0000:af:00.0{  #根据服务器上的光纤网卡的情况修改,我用的是X710网卡的第一个网口
		name TenGigabitEthernet86/0/0
	}
	uio-driver vfio-pci  ## dpdk driver for nic0
} 

重新开启vpp,查看此时的网卡信息

sudo ifconfig nic0 down
sudo service vpp start

2.2 在VPP中创建虚拟网口,等待连接虚拟机#

Virtio networking (virtio-net)介绍:这是Linux KVM虚拟化方案中宿主机host和客户虚拟机guest之间的网络通信协议。下图展示了基于virtio虚拟网络的系统架构。可以看到宿主机的vhost和虚拟机guest之间建立了virtio网络连接。

在 vhost 的方案中,由于 vhost 实现在内核中,guest 与 vhost 的通信,相较于原生的 virtio 方式性能上有了一定程度的提升,从 guest 到 k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值