软件定义网络( SDN ) 功能允许您在数据中心级别创建虚拟网络 (VNet ) 

Warning SDN 目前是 Proxmox VE 中的一项实验性功能。该文档也仍在开发中。在我们的 邮件列表或论坛中询问问题和反馈。

12.2. 基本概况

Proxmox VE SDN 允许使用灵活的软件控制配置对虚拟访客网络进行分离和细粒度控制。

分离是通过区域进行管理的,其中区域是其自己的虚拟分离网络区域。VNet是一种连接到区域的虚拟网络根据区域使用的类型或插件,它的行为可能有所不同,并提供不同的功能、优点和缺点。通常,VNet 显示为带有 VLAN 或VXLAN标记的常见 Linux 网桥,但是,有些也可以使用第 3 层路由进行控制。从集群范围的数据中心 SDN 管理界面进行配置后,VNet会本地部署在每个节点上。

12.2.1. 主要配置

配置在数据中心(集群范围)级别完成,并保存在共享配置文件系统中的文件中: /etc/pve/sdn

在 Web 界面上,SDN 具有 3 个主要部分:

  • SDN:SDN 状态概述

  • 区域:创建和管理虚拟分离的网络区域

  • VNet:创建虚拟网桥并管理子网

除此之外,还提供以下选项:

  • 控制器:用于控制复杂设置中的第 3 层路由

  • 子网:用于在 VNet 上定义的 IP 网络

  • IPAM:允许使用外部工具进行 IP 地址管理(来宾 IP)

  • DNS:定义 DNS 服务器 API,用于注册虚拟访客的主机名和 IP 地址

12.2.2. 软件定义网络

这是主状态面板。在这里可以看到不同节点上Zone的部署状态。

“应用”按钮用于在所有集群节点上推送和重新加载本地配置。

12.2.3。本地部署监控

通过主 SDN 面板应用配置后,本地网络配置在文件/etc/network/interfaces.d/sdn中的每个节点上本地生成,并使用 ifupdown2 重新加载。

您可以通过主树监视本地区域和 VNet 的状态。

12.3。区域

区域定义了一个虚拟隔离的网络。可以将区域限制为特定节点并分配权限,以便将用户限制为特定区域及其包含的 VNet。

可以使用不同的技术进行分离:

  • VLAN:虚拟 LAN 是细分 LAN 的经典方法

  • QinQ:堆叠式 VLAN(正式名称为IEEE 802.1ad

  • VXLAN:二层VXLAN

  • 简单:孤立的桥。简单的第 3 层路由桥 (NAT)

  • EVPN(BGP EVPN):使用第 3 层边界网关协议 (BGP) 路由的 VXLAN

12.3.1. 常用选项

以下选项适用于所有区域类型:

节点

应部署区域和关联 VNet 的节点

伊帕姆

选修的。使用 IP 地址管理 (IPAM) 工具来管理区域中的 IP。

域名系统

选修的。DNS API 服务器。

反向域名

选修的。反向 DNS API 服务器。

域名服务器

选修的。DNS 域名。用于注册主机名,例如 <hostname>.<domain>。DNS 区域必须已存在于 DNS 服务器上。

12.3.2. 简单区域

这是最简单的插件。它将创建一个隔离的 VNet 桥。该网桥未链接到物理接口,并且虚拟机流量仅在节点之间是本地的。它还可以用于 NAT 或路由设置。

12.3.3。VLAN 区域

该插件重用现有的本地 Linux 或 OVS 网桥,并管理其上的 VLAN。使用 SDN 模块的好处是,您可以使用特定的 VNet VLAN 标记创建不同的区域,并将虚拟机限制在单独的区域中。

具体VLAN配置选项:

重用已在每个本地节点 上配置的本地网桥或 OVS 交换机 。

12.3.4。亲Q专区

QinQ 也称为 VLAN 堆叠,其中第一个 VLAN 标记是为区域(service-vlan)定义的,第二个 VLAN 标记是为 VNet 定义的。

Note 您的物理网络交换机必须支持此配置的堆叠 VLAN!

下面是QinQ特有的配置选项:

已在每个本地节点上配置的本地 VLAN 感知网桥

服务VLAN

该区域的主VLAN标签

服务VLAN协议

允许您选择 802.1q(默认)或 802.1ad 服务 VLAN 类型。

最大传输单元

由于标签的双重堆叠,QinQ VLAN 还需要 4 个字节。例如,如果物理接口 MTU 为 1500 ,则必须将 MTU 减小到1496

12.3.5。VXLAN 区域

VXLAN 插件在现有网络(底层)之上建立隧道(覆盖)。这将第 2 层以太网帧封装在第 4 层 UDP 数据报中,使用4789作为默认目标端口。例如,您可以在公共互联网网络节点之上创建私有 IPv4 VXLAN 网络。

这只是第 2 层隧道,因此不同 VNet 之间不可能进行路由。

每个 VNet 都有一个范围为 1 – 16777215 的特定 VXLAN ID。

具体 EVPN 配置选项:

对等地址列表

您想要通过其进行通信的每个节点的 IP 地址列表。也可以是外部节点。

最大传输单元

由于VXLAN封装使用50字节,因此MTU需要比出局物理接口低50字节。

12.3.6。EVPN 区域

这是所有支持的插件中最复杂的。

BGP-EVPN 允许您创建可路由的第 3 层网络。EVPN 的 VNet 可以具有任播 IP 地址和/或 MAC 地址。每个节点上的网桥 IP 都是相同的,这意味着虚拟访客可以使用该地址作为网关。

路由可以通过 VRF(虚拟路由和转发)接口跨不同区域的 VNet 工作。

针对EVPN的配置选项如下:

VRF VXLAN 标签

这是用于在 VNet 之间路由互连的 VXLAN-ID。它必须与 VNet 的 VXLAN-ID 不同。

控制器

必须首先定义 EVPN 控制器(请参阅控制器插件部分)。

虚拟网络 MAC 地址

此区域中所有 VNet 的唯一任播 MAC 地址。如果未定义,将自动生成。

退出节点

选修的。如果您想将某些 Proxmox VE 节点定义为通过真实网络的 EVPN 网络的退出网关,则可以使用此选项。配置的节点将公布 EVPN 网络中的默认路由。

主退出节点

选修的。如果您使用多个出口节点,这会强制流量流向主出口节点,而不是在所有节点上进行负载平衡。如果您想使用 SNAT 或者您的上游路由器不支持 ECMP,则这是必需的。

退出节点本地路由

选修的。如果您需要从出口节点访问 VM/CT 服务,这是一个特殊选项。(默认情况下,出口节点只允许转发真实网络和EVPN网络之间的流量)。

通告子网

选修的。如果您有静默 VM/CT(例如,如果您有多个 IP,并且任播网关看不到来自这些 IP 的流量,则这些 IP 地址将无法到达 EVPN 网络内部)。在这种情况下,此选项将公布 EVPN 网络中的完整子网。

禁用 Arp-Nd 抑制

选修的。不要抑制 ARP 或 ND 数据包。如果您在来宾虚拟机中使用浮动 IP(IP 是在系统之间移动的 MAC 地址),则这是必需的。

路由目标导入

选修的。允许您导入外部 EVPN 路由目标列表。用于跨DC或不同EVPN网络互连。

最大传输单元

由于VXLAN封装使用50字节,因此MTU需要比出局物理接口的最大MTU小50字节。

12.4。虚拟网络

VNet基本形式是一个 Linux 桥,将部署在节点本地并用于虚拟机通信。

VNet 配置属性为:

ID

用于命名和标识 VNet 的 8 个字符 ID

别名

如果 ID 不够,可选较长的名称

此 VNet 的关联区域

标签

唯一的 VLAN 或 VXLAN ID

VLAN 感知

允许在虚拟机或容器的 vNIC 配置中添加额外的 VLAN 标记,以允许来宾操作系统管理 VLAN 的标记。

12.4.1. 子网

子网(subnet)允许您定义特定的IP网络(IPv4或IPv6)。对于每个 VNet,您可以定义一个或多个子网。

子网可用于:

  • 限制可以在特定 VNet 上定义的 IP 地址

  • 在第 3 层区域中的 VNet 上分配路由/网关

  • 在第 3 层区域中的 VNet 上启用 SNAT

  • 通过 IPAM 插件在虚拟访客(VM 或 CT)上自动分配 IP

  • 通过 DNS 插件进行 DNS 注册

如果 IPAM 服务器与子网区域关联,则子网前缀将自动在 IPAM 中注册。

子网属性有:

ID

CIDR 网络地址,例如 10.0.0.0/8

网关

网络默认网关的 IP 地址。在第 3 层区域(简单/EVPN 插件)上,它将部署在 VNet 上。

网络地址转换

选修的。为此子网启用第 3 层区域的 SNAT(简单/EVPN 插件)。子网的源 IP 将通过 NAT 转换为服务器的传出接口/IP。在 EVPN 区域中,这仅在 EVPN 网关节点上完成。

域名前缀

选修的。为域注册添加前缀,例如 <hostname>.prefix.<domain>

12.5。控制器

某些区域类型需要外部控制器来管理 VNet 控制平面。目前,只有bgp-evpn区域插件需要这样做。

12.5.1。EVPN控制器

对于BGP-EVPN,我们需要一个控制器来管理控制平面。当前支持的软件控制器是“frr”路由器。您可能需要将其安装在要部署 EVPN 区域的每个节点上。

apt install frr frr-python 工具

配置选项:

阿斯尼

唯一的 BGP ASN 号。强烈建议使用私有 ASN 号(64512 – 65534、4200000000 – 4294967294),否则您最终可能会错误地破坏全局路由。

同行

您想要进行 EVPN 通信的所有节点的 IP 列表(也可以是外部节点或路由反射器服务器)

12.5.2. BGP 控制器

BGP 控制器不直接由区域使用。您可以使用它来配置 FRR 来管理 BGP 对等体。

对于BGP-EVPN来说,可以通过节点来定义不同的ASN,EBGP也是如此。

配置选项:

节点

该BGP控制器的节点

阿斯尼

唯一的 BGP ASN 号。强烈建议使用 (64512 – 65534) 或 (4200000000 – 4294967294) 范围内的私有 ASN 编号,否则您可能会错误地破坏全局路由。

同行

您想要使用底层 BGP 网络进行通信的对等 IP 地址的列表。

EBGP

如果您的对等方的远程 AS 不同,则会启用 EBGP。

环回

使用环回或虚拟接口作为 EVPN 网络的源(对于多路径)。

ebgp多跳

增加到达对等点的跳数,以防它们未直接连接或使用环回。

bgp 多路径作为路径放松

如果您的对等点具有不同的 ASN,则允许 ECMP。

12.6。IPAM

IPAM(IP 地址管理)工具用于管理/分配网络上访客的 IP 地址。例如,当您创建 VM/CT 时(尚未实现),它可用于查找免费 IP 地址。

IPAM 可以与一个或多个区域关联,以为这些区域中定义的所有子网提供 IP 地址。

12.6.1。Proxmox VE IPAM 插件

如果您没有外部 IPAM 软件,这是 Proxmox VE 集群的默认内部 IPAM。

12.6.2. phpIPAM 插件

您需要在 phpIPAM 中创建一个应用程序并添加具有管理员权限的 API 令牌。

phpIPAM 配置属性为:

网址

REST-API 端点:http://phpipam.domain.com/api/<appname> /

代币

API 访问令牌

部分

一个整数 ID。节是 phpIPAM 中的一组子网。客户的 默认安装使用sectionid=1 。

12.6.3。NetBox IPAM 插件

NetBox 是一款 IP 地址管理 (IPAM) 和数据中心基础设施管理 (DCIM) 工具。有关详细信息,请参阅源代码存储库: https ://github.com/netbox-community/netbox

您需要在 NetBox 中创建 API 令牌才能使用它: https ://netbox.readthedocs.io/en/stable/api/authentication

NetBox 配置属性为:

网址

REST API 端点:http://yournetbox.domain.com/api

代币

API 访问令牌

12.7。域名系统

Proxmox VE SDN 中的 DNS 插件用于定义 DNS API 服务器,用于注册您的主机名和 IP 地址。DNS 配置与一个或多个区域相关联,以便为为某个区域配置的所有子网 IP 提供 DNS 注册。

12.7.1。PowerDNS 插件

您需要在 PowerDNS 配置中启用 Web 服务器和 API:

API=是
api-key=随机生成的字符串
网络服务器=是
网络服务器端口=8081

PowerDNS 配置选项有:

网址

REST API 端点:http://yourpowerdnserver.domain.com:8081 /api/v1/servers/localhost

钥匙

API 访问密钥

TTL

记录的默认 TTL

12.8。例子

12.8.1。VLAN 设置示例

Tip 虽然我们在这里显示纯文本配置内容,但几乎所有内容都应该只能使用 Web 界面进行配置。

节点1:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 手册
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        桥接 VLAN 感知 是
        桥视频 2-4094

#vlan100 上的管理 ip
自动vmbr0.100
iface vmbr0.100 inet 静态
        地址192.168.0.1/24

源/etc/network/interfaces.d/*

节点2:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 手册
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        桥接 VLAN 感知 是
        桥视频 2-4094

#vlan100 上的管理 ip
自动vmbr0.100
iface vmbr0.100 inet 静态
        地址192.168.0.2/24

源/etc/network/interfaces.d/*

创建名为“myvlanzone”的 VLAN 区域:

id:myvlanzone
桥:vmbr0

创建一个名为“myvnet1”、“vlan-id”“10”的 VNet,并将之前创建的“myvlanzone”作为其区域。

ID:myvnet1
区域:myvlanzone
标签:10

通过主 SDN 面板应用配置,以在每个节点上本地创建 VNet。

在节点 1 上创建基于 Debian 的虚拟机 (vm1),并在“myvnet1”上创建 vNIC。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.3.100/24

在节点 2 上创建第二个虚拟机 (vm2),其 vNIC 位于与 vm1 相同的 VNet“myvnet1”上。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.3.101/24

之后,您应该能够通过该网络在两个虚拟机之间执行 ping 操作。

12.8.2。QinQ 设置示例

Tip 虽然我们在这里显示纯文本配置内容,但几乎所有内容都应该只能使用 Web 界面进行配置。

节点1:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 手册
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        桥接 VLAN 感知 是
        桥视频 2-4094

#vlan100 上的管理 ip
自动vmbr0.100
iface vmbr0.100 inet 静态
        地址192.168.0.1/24

源/etc/network/interfaces.d/*

节点2:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 手册
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        桥接 VLAN 感知 是
        桥视频 2-4094

#vlan100 上的管理 ip
自动vmbr0.100
iface vmbr0.100 inet 静态
        地址192.168.0.2/24

源/etc/network/interfaces.d/*

创建名为“qinqzone1”的QinQ区域,业务VLAN为20

id:qinqzone1
桥:vmbr0
服务VLAN:20

创建另一个名为“qinqzone2”的QinQ区域,业务VLAN为30

id:qinqzone2
桥:vmbr0
服务VLAN:30

在之前创建的“qinqzone1”区域上创建名为“myvnet1”且客户 VLAN ID 为 100 的 VNet。

ID:myvnet1
区域:qinqzone1
标签:100

在之前创建的“qinqzone2”区域上创建客户 VLAN ID 为 100 的“myvnet2”。

id: myvnet2
区域:qinqzone2
标签:100

应用主 SDN Web 界面面板上的配置以在每个节点上本地创建 VNet。

在节点 1 上创建基于 Debian 的虚拟机 (vm1),并在“myvnet1”上创建 vNIC。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.3.100/24

在节点 2 上创建第二个虚拟机 (vm2),其 vNIC 位于与 vm1 相同的 VNet“myvnet1”上。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.3.101/24

在节点 1 上创建第三个虚拟机 (vm3),并在另一个 VNet“myvnet2”上创建一个 vNIC。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.3.102/24

在节点 2 上创建另一个虚拟机 (vm4),并在与 vm3 相同的 VNet“myvnet2”上使用 vNIC。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.3.103/24

然后,您应该能够在虚拟机vm1vm2之间以及vm3vm4之间 ping 通。但是,虚拟机vm1vm2都无法 ping 通虚拟机 vm3vm4,因为它们位于具有不同服务 VLAN 的不同区域。

12.8.3。VXLAN 设置示例

Tip 虽然我们在这里显示纯文本配置内容,但几乎所有内容都可以通过 Web 界面进行配置。

节点1:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 静态
        地址192.168.0.1/24
        网关192.168.0.254
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        最大传输温度 1500

源/etc/network/interfaces.d/*

节点2:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 静态
        地址192.168.0.2/24
        网关192.168.0.254
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        最大传输温度 1500

源/etc/network/interfaces.d/*

节点3:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 静态
        地址192.168.0.3/24
        网关192.168.0.254
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        最大传输温度 1500

源/etc/network/interfaces.d/*

创建名为“myvxlanzone”的 VXLAN 区域,使用较低的 MTU 以确保可以容纳额外的 50 字节 VXLAN 标头。将节点中所有先前配置的 IP 添加到对等地址列表。

id:myvxlanzone
对等地址列表:192.168.0.1,192.168.0.2,192.168.0.3
最大传输单元:1450

使用之前创建的 VXLAN 区域“myvxlanzone”创建名为“myvnet1”的 VNet。

ID:myvnet1
区域:myvxlanzone
标签: 100000

应用主 SDN Web 界面面板上的配置以在每个节点上本地创建 VNet。

在节点 1 上创建基于 Debian 的虚拟机 (vm1),并在“myvnet1”上创建 vNIC。

为此 VM 使用以下网络配置(注意较低的 MTU)。

自动 eth0
iface eth0 inet 静态
        地址10.0.3.100/24
        最大传输温度 1450

在节点 3 上创建第二个虚拟机 (vm2),其 vNIC 位于与 vm1 相同的 VNet“myvnet1”上。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.3.101/24
        最大传输温度 1450

然后,您应该能够在vm1vm2之间进行 ping 操作。

12.8.4。EVPN 设置示例

节点1:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 静态
        地址192.168.0.1/24
        网关192.168.0.254
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        最大传输温度 1500

源/etc/network/interfaces.d/*

节点2:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 静态
        地址192.168.0.2/24
        网关192.168.0.254
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        最大传输温度 1500

源/etc/network/interfaces.d/*

节点3:/etc/network/interfaces

自动虚拟机BR0
iface vmbr0 inet 静态
        地址192.168.0.3/24
        网关192.168.0.254
        桥接端口 eno1
        桥接 stp 关闭
        桥FD 0
        最大传输温度 1500

源/etc/network/interfaces.d/*

创建 EVPN 控制器,使用私有 ASN 号和上述节点地址作为对等体。

id:myevpnctl
编码:65000
对等点:192.168.0.1,192.168.0.2,192.168.0.3

使用之前创建的 EVPN 控制器创建名为“myevpnzone”的 EVPN 区域。将node1node2定义为退出节点。

ID:myevpnzone
VRF VXLAN 标签:10000
控制器:myevpnctl
最大传输单元:1450
vnet MAC 地址:32:F4:05:FE:6C:0A
退出节点:节点1,节点2

使用 EVPN 区域“myevpnzone”创建第一个名为“myvnet1”的 VNet。

ID:myvnet1
区域:myevpnzone
标签: 11000

在myvnet1上创建子网 10.0.1.0/24,并将 10.0.1.1 作为网关。

子网:10.0.1.0/24
网关:10.0.1.1

使用相同的 EVPN 区域“myevpnzone”(不同的 IPv4 CIDR 网络)创建名为“myvnet2”的第二个 VNet。

id: myvnet2
区域:myevpnzone
标签: 12000

在 vnet2 上创建一个不同的子网 10.0.2.0/24,其中 10.0.2.1 作为网关

子网:10.0.2.0/24
网关:10.0.2.1

应用主 SDN Web 界面面板中的配置,在每个节点上本地创建 VNet 并生成 FRR 配置。

在节点 1 上创建基于 Debian 的虚拟机 (vm1),并在“myvnet1”上创建 vNIC。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.1.100/24
        gateway 10.0.1.1 #这是vnet1的ip
        最大传输温度 1450

在节点 2 上创建第二个虚拟机 (vm2),并在另一个 VNet“myvnet2”上创建一个 vNIC。

为此 VM 使用以下网络配置:

自动 eth0
iface eth0 inet 静态
        地址10.0.2.100/24
        gateway 10.0.2.1 #这是myvnet2的ip
        最大传输温度 1450

然后,您应该能够从 vm1 ping vm2,并从 vm2 ping vm1。

如果您从非网关node3上的vm2 ping 外部 IP ,数据包将转到配置的myvnet2网关,然后路由到出口节点(node1node2),并从那里将这些节点留在默认网关上在节点 1 或节点 2 上配置。

Note 您需要在外部网关的node1和node2上添加10.0.1.0/2410.0.2.0/24 网络的反向路由,以便公网能够回复。

如果您配置了外部 BGP 路由器,则将动态公告 BGP-EVPN 路由(本例中为 10.0.1.0/24 和 10.0.2.0/24)。

12.9。笔记

12.9.1。多个EVPN出口节点

如果您有多个网关节点,则应禁用rp_filter(严格反向路径过滤器)选项,因为数据包可能到达一个节点但从另一节点出去。

sysctl.conf 禁用rp_filter
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

12.9.2。VXLAN IPSEC 加密

如果您需要在 VXLAN 之上添加加密,可以通过Strongswan使用 IPSEC 来实现。您需要将MTU减少60 字节 (IPv4) 或 80 字节 (IPv6) 才能处理加密。

因此,在默认实际 1500 MTU 的情况下,您需要使用 1370 的 MTU (1370 + 80 (IPSEC) + 50 (VXLAN) == 1500)。

安装strongswan
apt安装strongswan

将配置添加到“/etc/ipsec.conf”。我们只需要加密来自 VXLAN UDP 端口4789的流量。

连接%默认值
    ike=aes256-sha1-modp1024!# 现代硬件上最快但相当安全的密码
    esp=aes256-sha1!
    leftfirewall=yes # 使用 Proxmox VE 防火墙规则时这是必需的

连接输出
    rightsubnet=%动态[udp/4789]
    右=%任意
    类型=运输
    授权=psk
    自动=路线

连接输入
    leftsubnet=%动态[udp/4789]
    类型=运输
    授权=psk
    自动=路线

然后使用以下命令生成预共享密钥:

openssl 兰德-base64 128

并将密钥添加到“/etc/ipsec.secrets”,使文件内容如下所示:

:PSK <生成的base64密钥>

您需要将 PSK 和配置复制到其他节点上。

作者 Lin-Tech

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注