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。

相关推荐
JaguarJack12 小时前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo13 小时前
FrankenPHP 原生支持 Windows 了
后端·php
JaguarJack2 天前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo2 天前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack2 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay3 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954483 天前
CTF 伪协议
php
BingoGo6 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack6 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo7 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php