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
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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D3.js实战:数据可视化高级技巧实例应用

基础 首先&#xff0c;我们需要一个HTML文件来引入D3.js库&#xff0c;并准备一个画布来放置我们的图表。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"width…

[移动通讯]【无线感知-P1】[从菲涅尔区模型到CSI模型-3][Mobius transformations-7】【Inversion】

前言&#xff1a; mobius map 里面比较难的是inversion &#xff0c;林菲尔德学院&#xff08;Linfield College&#xff09; Michael P. Hitchman. 有本书详细介绍一下该方向的一些原理&#xff0c;例子. Whitman College Book: 《Geometry with an Introduction to Cosmic T…

el-select选项框内容过长

利用popper-class实现选项框内容过长&#xff0c;截取显示功能&#xff1a; <el-select popper-class"popper-class" :popper-append-to-body"false" v-model"value" placeholder"请选择"><el-optionv-for"item in opt…

js 字符串截取,截取指定字符前面/后面的字符串

一个符号截取&#xff1a; let str hello, how are you doing? username! // 截取 ? 前面的字符串&#xff1a; let before1 str.substring(0,str.lastIndexOf("?")) // 不包含 ? console.log(before1,before1---------------); // hello, how are you doing …

Java使用httpclient发送POST请求

声明&#xff1a;实习时接到一个送餐机器人项目 涉及到httpclient 1.创建请求对象:post或者get HttpPost httpPost new HttpPost(url); 2. 创建httpclient对象 CloseableHttpClient httpclient HttpClientBuilder.create().build(); 3. 创建请求头对象 BasicResponseHa…

初识 Linux线程

再学习完Linux进程后,本期,我们来讲解Linux线程 1.为什么需要线程 在之前学习进程前,我们写的所有代码几乎都是单个执行流的,也就是说我们的代码只有一条路走. 在学习进程后,我们可以通过fork进行进程创建,给进程分配任务进行多执行流执行任务,问题来了 那我们为什么还需要…

使用torch.nn.Sequential构建神经网络

torch.nn.Sequential 是 PyTorch 中的一个非常有用的类&#xff0c;它允许用户以一种简单和直观的方式构建神经网络。Sequential 容器可以包含多个神经网络层&#xff0c;这些层会按照它们被添加到 Sequential 中的顺序依次执行。 1.关键特性 以下是 torch.nn.Sequential 的一…

Lenet5硬件加速RTL - 06(nnLinear)

timescale 1ns / 1ps// Description : 全连接层 // Change Logs : 2024.05.10 - Yang.Long - 1.0.0 - module nnLinear #(parameter G_WDEPTH 12 ,//权重深度parameter G_PDEPTH 8 ,//像素深度parameter G_LINEXLEN 160 ,//每行图像宽度pa…

清空回收站是彻底删除吗?一文解答你的疑问!

“我刚刚本来想在回收站中恢复一个文件的&#xff0c;但是一不小心就清空了回收站&#xff0c;想问问清空回收站是彻底删除吗&#xff1f;清空了回收站文件还有机会找回吗&#xff1f;” 在使用电脑的过程中&#xff0c;我们经常会将不再需要的文件或文件夹移动到回收站&#x…

数据结构与算法学习笔记六-二叉树的顺序存储表示法和实现(C语言)

目录 前言 1.数组和结构体相关的一些知识 1.数组 2.结构体数组 3.递归遍历数组 2.二叉树的顺序存储表示法和实现 1.定义 2.初始化 3.先序遍历二叉树 4.中序遍历二叉树 5.后序遍历二叉树 6.完整代码 前言 二叉树的非递归的表示和实现。 1.数组和结构体相关的一些知…

AUTOSAR OS调度表讲解

调度表 AUTOSAR OS通过调度表(Schedule Table)来解决一个alarm只能激活一个任务的限制。调度表是预定义的行为序列,通过到期点实现。AUTOSAR OS遍历调度表并依次处理每个到期点,遍历由底层的counter来实现驱动。 到期点发生在从概念零开始的静态配置偏移量上。偏移量在静…

【程序设计和c语言-谭浩强配套】(适合专升本、考研)

一晃大半年没更新了&#xff0c;这一年一直在备考&#xff0c;想着这几天把前段时间学的c语言给大家分享一下&#xff0c;在此做了一个专栏&#xff0c;有需要的小伙伴可私信获取o。 简介&#xff1a;本专栏所有内容皆适合专升本、考研的复习资料&#xff0c;本人手上也有日常…

Lua 数字格式化

在编程中&#xff0c;对数字进行格式化是一项常见的任务&#xff0c;特别是当我们需要在用户界面中显示数据或生成报告时。在 Lua 中&#xff0c;我们可以使用一些简单而有效的函数来实现数字的格式化。在本文中&#xff0c;我们将介绍一个由几个函数组成的小型 Lua 库&#xf…

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日&#xff0c;Meta在官网上公布了旗下最新大模型Llama 3。目前&#xff0c;Llama 3已经开放了80亿&#xff08;8B&#xff09;和700亿&#xff08;70B&#xff09;两个小参数版本&#xff0c;上下文窗口为8k&#xff0c;据称&#xff0c;通过使用更高质量的训练数据…

JAVA学习-练习试用Java实现电话号码的字母组合

问题: 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输…

Java并发编程之锁的艺术:面试与实战指南(四)

Java并发编程之锁的艺术&#xff1a;面试与实战指南&#xff08;四&#xff09; 文章目录 Java并发编程之锁的艺术&#xff1a;面试与实战指南&#xff08;四&#xff09;前言二十七、什么是AQS&#xff08;AbstractQueuedSynchronizer&#xff09;&#xff1f;它在Java并发包中…

Skywalking系列之日志分析语言LAL的配置与解析

提到Skywalking相比并不陌生&#xff0c;或多或少地听到过这个名词&#xff0c;如果你是JAVA开发者&#xff0c;那么可能就更为了解。 作为国内甚至国际上热度比较高、社区比较活跃的APM(Application Performance Monitoring System)系统&#xff0c;它拥有众多的使用者&#…

react18+ts如何生成二维码并且下载

目录 一、下载qrcode.react 二、引入qrcode.react 三 、编写下载二维码的函数 在react开发中如果需要二维码&#xff0c;笔者选择使用qrcode.react来快速生成。 一、下载qrcode.react pnpm add qrcode.react 二、引入qrcode.react import {Box,Stack,Fab} from mui/mate…

【基础算法总结】二分查找一

二分查找一 1. 二分查找2.在排序数组中查找元素的第一个和最后一个位置3.x 的平方根4.搜索插入位置 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1…

spring boot 线程池

文章目录 引言I 配置线程池II 封装线程池任务执行器2.1 唯一性标识2.2 LogFilter:设置request_id2.3 logback使用request_idIII 检测线程池引言 SpringBootApplication启动类上需要加入注解@EnableAsync或者在配置类上使用 应用场景:封装线程池任务执行器:在任务提交时,会…