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。

相关推荐
事业运财运爆棚几秒前
php 如何将数组转成对象数组
php
芊寻(嵌入式)11 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
2403_8757368714 分钟前
道品科技智慧农业中的自动气象检测站
网络·人工智能·智慧城市
一颗松鼠19 分钟前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_21 分钟前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_201327 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑34 分钟前
php 使用qrcode制作二维码图片
开发语言·php
夜雨翦春韭38 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
小远yyds39 分钟前
前端Web用户 token 持久化
开发语言·前端·javascript·vue.js
何曾参静谧1 小时前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++