VTTP-虚拟化拓扑测试平台

虚拟化拓扑测试平台

项目地址

1
https://github.com/wylgogogo/V-TopoTestingPlat

简单介绍

这玩意的背景是这样的,作为一个苦命的社畜,测试镜像的时候经常要跑到机房去接线做测试,突然有一天想到能不能做一个类似于ensp那样的模拟平台?!那岂不是嘎嘎方便,然后就有了这么个玩意🤭

简单演示

首先模拟一个场景,你需要使用某个防火墙镜像搭建一个双机环境,并且要基于这个防火墙使用IPSEC去连接两边的终端
  • 打开咱们的平台

image-20260206142601738

  • 我们选择新建任务,输入任务名demo,并点击创建

image-20260206142711080

  • 首先点击左侧防火墙,添加到画布中

image-20260206142832994

  • 可以在画布拖动设备,使他们对齐,点击可以对他们进行一个初始化配置

image-20260206143005234

  • 选中设备上下左右的端点,可以进行连线,可以模拟网线连接,这里我们将防火墙的eth2连起来,模拟公网

连线

  • 接下来我们添加模拟终端,点击左边PC终端,并调整位置与连线

image-20260206143833628

  • 同样,我们可以点击PC,来设置一些基本项

image-20260206143856546

  • 现在整个项目的拓扑已经部署好了,我们点击左侧部署环境,后台会自动部署这些虚拟化设备

image-20260206143934366

  • 等待一会,环境就部署好了,这个时候可以点击右边的资源状态,查看部署的资源,已经cli管理等

image-20260206144028600

可以看到分为虚拟机,容器,以及网络 👆,并且点击虚拟机或容器的终端,可以进入ssh/串口

image-20260206144206672

image-20260206144224881

这个时候就可以根据需求做测试了,整个虚拟环境已经部署好了

部署安装

一、部署的机器需要能够支持虚拟化,可以通过以下方法查看支不支持
1
ls /dev/kvm

如果显示

1
2
wyl@wyl-KVM:~$ ls /dev/kvm 
/dev/kvm

则说明支持虚拟化

二、网络配置

我们这边的测试环境网段是192.168.168.0/24并且宿主机上面的ens3配置了 192.168.168.160,为了实现虚拟机通网段管理,我们需要将ens3变成一个桥

1
2
3
4
5
6
7
8
9
10
11
12
# 创建管理桥
sudo ip link add br-mgmt type bridge
sudo ip link set br-mgmt up

# 把物理网卡塞进桥
sudo ip link set ens3 master br-mgmt
sudo ip link set ens3 up

# 把 Ubuntu IP 挂到桥上
sudo ip addr flush dev ens3
sudo ip addr add 192.168.168.160/24 dev br-mgmt
sudo ip route add default via 192.168.168.1
三、dhcp服务器配置

为了不用手动去一个一个配置虚拟设备的管理IP,所以需要内置一个dhcp服务器

  • 安装dhcp服务器
1
sudo apt install -y dnsmasq
  • 编辑配置文件
1
sudo vim /etc/dnsmasq.d/mgmt.conf
  • 写入以下内容
1
2
3
4
5
interface=br-mgmt
bind-interfaces
dhcp-range=192.168.168.50,192.168.168.200,12h
dhcp-option=3,192.168.168.1
dhcp-option=6,192.168.168.1
  • 启动
1
sudo systemctl restart dnsmasq
  • 验证dhcp是否正常
1
sudo dnsmasq --test
  • 出现以下内容则OK
1
dnsmasq: syntax check OK.
四、创建一个libvirt直连网络
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo vim /tmp/br-mgmt.xml

# 写入
<network>
<name>br-mgmt</name>
<forward mode="bridge"/>
<bridge name="br-mgmt"/>
</network>

# 加载

sudo virsh net-define /tmp/br-mgmt.xml
sudo virsh net-start br-mgmt
sudo virsh net-autostart br-mgmt
五、将防火墙镜像(或者其他的镜像都行,格式是qcow2的,目前仅支持qcow2)放置在/img目录下

image-20260206150206170

六、git项目到服务器并启动
1
git clone https://github.com/wylgogogo/V-TopoTestingPlat.git
1
2
cd V-TopoTestingPlat/
sudo sh start_all.sh
  • 可以将这个start_all 注册到systemctl 中,通过systemctl start/stop/status 管理
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
root@wyl-KVM:/home/wyl/V-TopoTestingPlat# cat /etc/systemd/system/vttp.service
[Unit]
Description=vttp
After=network.target libvirtd.service docker.service
Requires=libvirtd.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/wyl/V-TopoTestingPlat
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="SUDO_USER=wyl"

# 启动命令
ExecStart=/bin/bash /home/wyl/V-TopoTestingPlat/start_all.sh

# 重启策略
Restart=on-failure
RestartSec=10s

# 超时设置
TimeoutStartSec=60s
TimeoutStopSec=30s

# 标准输出和错误日志
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target