Proxmox VE 8 用SDN隔离用户网络

作者:田逸(formyz)

最新发布的Proxmox VE(以下简称PVE) 8在Web管理后台集成了易于操作的SDN(软件定义网络)功能插件,其实质是对不同的PVE用户指定不同的网络,进行逻辑隔离,避免不同的用户设置相同的网络地址而产生冲突。例如用户A,给他指定地址段172.16.10.0/24,另外一个用户的地址段是172.16.20.0/24,如果这个用户A,误操作把它所管理的虚拟机设置成B用户所在网段的地址,是不会有效的,也不会对其他用户产生影响。

环境准备

SDN所包含的组件(软件包)主要有:SDN核心libpve-network-perl、DHCP IPAM(IP Address Manage)、FRRouting(开源的互联网路由协议)。如果你运行的PVE版本是7.X,请用下列指令进行软件包的安装。

|----------------------------------------------------------------------------------------------------------------------------|
| apt update apt install libpve-network-perl apt install dnsmasq apt install frr-pythontools |

bash 复制代码
apt update
apt install libpve-network-perl
apt install dnsmasq
apt install frr-pythontools

在PVE 宿主机安装完软件包以后,还需要修改宿主机的网络配置。在宿主系统Debian命令行下,进入目录"/etc/network",将文本行"source /etc/network/interfaces.d/*"追加到网络配置文件"interfaces",注意别丢掉那个星号通配符。

在没有创建与SDN相关联的区域前,PVE 宿主系统的目录"/etc/network/interfaces.d"目录是空的。

验证网络隔离

为便于读者理解,先做个简单的规划。在单节点上两个资源池、创建两个组及用户,两个虚拟网络并将分别授权给已经创建好的用户组,接着创建两个虚拟机,使虚拟机属于不同的网络及资源组。以下操作,如无特别说明,则默认在PVE Web管理后台进行。

1 创建资源组

PVE数据中心级别,点击按钮菜单创建,输入易于辨识的文本对资源组进行命名,如下图所示。

在本案中,我创建了两个资源组"mypool"与"mypool1"。

2 创建群组

PVE数据中心级别,页面中间菜单栏选定"权限"之子菜单"群组",再单击页面顶部按钮"创建",输入文本对其命名,本案创建了两个群组,如下图所示。

3 创建用户

PVE数据中心级别,分别创建两个用户,用户formyz隶属于群组"mygrp",用户"sery"隶属于群组"serygrp",验证方式采用"Promox VE authentication server"(这种方式不需要在PVE宿主系统创建系统用户,简化了操作也降低了安全风险)。

4 创建 SDN 区域

SDN的区域就是虚拟网络隔离标识,PVE支持五种类型的隔离方式,它们是:Simple、VLAN、QinQ、VxLAN、EVPN。受条件限制,本案仅以创建Simple区域为例,来演示隔离效果。

PVE数据中心级别,选定页面中部菜单"SDN"子菜单"区域",再单击顶部按钮"创建",输入文本给区域命名(文本长度有限制),如果是集群,还可能需要选定物理节点,创建过程如下图所示。

依照上法创建好两个区域"simple01"与"tsimple"待用。

5 创建虚拟网络( VNET

数据中心级别,选定SDN子菜单"Vnets",单击页面顶部菜单按钮"创建",输入文本为其进行命名,并选定所属区域"simple01",创建过程如下图所示。

选定已经创建好的虚拟网络(Vnet)"mvnet",点击页面右侧顶部菜单按钮"创建",创建子网(虚拟网段),输入网络地址及默认网关,并勾选"SNAT"(源地网络地址转换)如下图所示。

依照上法,为另一个区域"tsimple"创建子网"vnet01",其网络参数为"192.168.88.0/24,192.168.88.1".

确认无误后,鼠标选定菜单"SDN",再单击顶部按钮"应用",是设置生效。刷新PVE Web管理后台页面,在页面的左侧,显示刚创建好的两个区域,如果设置有错误,图标将以红色的叉显示,如下图所示。

选中区域"simple01",为其赋予组权限"mygrp",指定相应的角色,如下图所示。

同样的方法,将区域"tsimple"隶属于群组""

6 创建虚拟机

创建两个虚拟机,使其属于两个不同的资源组,并为其指定不同的桥接网卡(虚拟网卡)。

创建虚拟机"RRR",指定其属于资源池"mypool",如果不这里不指定,也可以在创建好虚拟机后,以成员的方式加入到资源组。

网络桥接下拉列表框选定前边步骤创建好的虚拟网络接口"mvnet",虚拟机使用网络地址"192.168.99.0/24".创建好虚拟机后,在其上安装操作系统Rocky 9,设置网络地址为"192.168.99.111",默认网关为"192.168.99.1",dns为"223.6.6.6",系统正常启动后,登录到该虚拟机所在的系统,用指令"ping 192.16.99.1"及"ping www.163.com"验证网络的正确性。

修改次虚拟机的IP地址,使其为PVE宿主机所在的网段地址,重启虚拟机网络服务,网络不可能用,达到网络隔离的目的。

继续创建另外一个虚拟机,使其隶属于资源组"mypool1"选定其网络桥接接口为虚拟网卡"vnet01",安装操作系统,并设定其IP地址为"192.168.88.111/24",默认网关为"192.168.88.1",DNS服务器为"223.6.6.6",正常启动该虚拟机,进入系统测试网络的连通性。

现在分属与两个资源组的虚拟机已经创建完毕,同时打开两个浏览器,分别以用户"formyz"和"sery"进行登录,查看PVE WEB管理后台,是否只显示各自的成员(虚拟机或存储)。

SSH远程登录两个虚拟机,用命令相互ping对方,或者ssh相互登录,验证网络连通的正确性。

SDN 的背后

PVE Web管理后台设置好SDN相关项且对其进行应用后,在PVE宿主系统Debian的目录"/etc/network/interface.d"生成文本文件"sdn",其内容大致如下。

Linux系统管理员应该对这个很熟悉吧!那就是网络地址转换。

需要注意的是,SDN Simple适合于单节点的PVE,如果是集群,建议使用VLAN方式,并需要交换机在功能上支持,起码能创建trunk。

相关推荐
秋雨凉人心12 分钟前
Webpack和GuIp打包原理以及不同
开发语言·前端·javascript·webpack·gulp
john_hjy12 分钟前
4. 数据结构: 对象和数组
java·开发语言·前端
一颗去去14 分钟前
【JavaScript】数组函数汇总
开发语言·javascript
我不爱机器学习18 分钟前
python环境配置问题(个人经验)
开发语言·python
一只淡水鱼6619 分钟前
【计算机网络】Tcp报文的组成,Tcp是如何实现可靠传输的?
网络·tcp/ip·计算机网络·可靠传输
BYSJMG19 分钟前
基于Java的停车场管理微信小程序 停车场预约系统【源码+文档+讲解】
java·开发语言·spring boot·微信小程序·小程序·课程设计·毕设
潘潘潘潘潘潘潘潘潘潘潘潘26 分钟前
【数据结构】栈和队列
开发语言·数据结构·学习方法
悟兰因w29 分钟前
神经网络(四):UNet图像分割网络
网络·人工智能·神经网络
LXMXF37 分钟前
华为-单臂路由
运维·网络·华为
抹茶咖啡40 分钟前
IT运维的365天--016 Win11家庭版用微软账户登陆的电脑怎么做共享文件夹
运维·网络