12.软件定义网络 (SDN)Software-Defined Network
Proxmox VE 的软件定义网络(SDN)可创建虚拟区域与 VNet, 简化高级网络配置与多租户部署。
12.1.简介Introduction
PVE SDN 用灵活的软件控制配置对虚拟客户机网络做细粒度隔离与控制。隔离通过 zone(区域)、 VNet(虚拟网络) 与 subnet(子网) 三层管理 —— zone 是虚拟隔离的网络区域 , VNet 是属于某 zone 的虚拟网络 , subnet 是 VNet 内的 IP 范围。不同 zone 类型行为不同 , 各有特性、优势与局限。
应用场景从「每节点的本地隔离私网」到「跨地域多 PVE 集群的覆盖网」。在数据中心级 SDN 管理界面配好 VNet 后 , 它会作为普通 Linux bridge 出现在每个节点上 , 供 VM 与容器使用。
12.2.支持状态Support Status
12.2.1.历程
PVE SDN 栈自 2019 起作为实验性特性 , 经开发者与用户持续打磨。 PVE 6.2 Web 界面集成是重要里程碑; PVE 7 周期加入大量改进;设计与实现已足够稳固 , 不再适合「实验性」标签。 PVE 8 把网络与接口管理提升为核心 ACL 组件; PVE 8.1 两大里程碑 :IPAM 加入 DHCP 集成、 SDN 默认安装。
12.2.2.当前状态
- 核心 SDN(VNet 管理及其在 PVE 栈中的集成)—— 完全支持
- IPAM(含客户机 DHCP 管理)—— 技术预览
- 基于 FRR 的复杂路由与控制器集成 —— 技术预览
12.3.安装Installation
12.3.1.SDN 核心
自 PVE 8.1 起 SDN 核心包默认安装。老版本升级时每节点安装:
apt update apt install libpve-network-perl
PVE 7.0+ 默认装了 ifupdown2。若原先是老版本 , 需显式 apt install ifupdown2。
安装后确保每节点的 /etc/network/interfaces 末尾包含 , 以便 SDN 配置被纳入激活:
source /etc/network/interfaces.d/*
12.3.2.DHCP IPAM
内置 IPAM 的 DHCP 集成目前用 dnsmasq 派发租约 , 需手动启用。每节点:
apt update apt install dnsmasq # 禁用默认实例 systemctl disable --now dnsmasq
12.3.3.FRRouting
PVE SDN 栈高级场景使用 FRRouting , 需手动启用。每节点:
apt update apt install frr-pythontools
启用 frr 服务:
systemctl enable frr.service
12.4.配置概览Configuration Overview
配置在数据中心级 Web 界面进行 , 分以下部分:
- SDN:当前 SDN 活动状态总览 , 以及把所有 pending 变更一次性应用到集群。
- Zones:创建与管理虚拟隔离区域。
- VNets:创建虚拟网桥、管理子网。
Options 区域管理附加服务:
- Controllers:复杂场景下的三层路由控制。
- DHCP:为 zone 定义自动分配 IP 并通过 DHCP 下发租约的 DHCP 服务器。
- IPAM:外部 IP 地址管理。
- DNS:注册客户机 hostname / IP 的 DNS 集成。
12.5.技术与配置Technology & Configuration
PVE SDN 尽量使用标准 Linux 网络能力 —— 现代 Linux 网络几乎满足完整 SDN 所需 , 可避免外部依赖与减少易出故障的组件数量。 SDN 配置位于 /etc/pve/sdn, 经 PVE 集群文件系统同步到所有节点;这些配置会被翻译成底层工具(ifupdown2、 frr)的对应格式。
新修改不会立即生效 , 而是先记录为 pending , 可在 SDN 总览面板一次性原子地应用多个变更。已下发状态通过 /etc/pve/sdn 下的 .running-config 与 .version 追踪。
12.6.区域(Zones)Zones
Zone 定义虚拟隔离网络 , 可限制到指定节点并赋权 , 以约束用户的可访问范围。隔离技术:
- Simple:隔离桥 , 简单三层路由桥(NAT)
- VLAN:经典 LAN 细分
- QinQ:堆叠 VLAN(IEEE 802.1ad)
- VXLAN:基于 UDP 隧道的二层 VXLAN
- EVPN(BGP EVPN):VXLAN + BGP 建立三层路由
12.6.1.通用选项
- Nodes
- zone 与关联 VNet 部署的节点。
- IPAM
- 管理 IP 的 IPAM 工具(可选 , 默认
pve)。 - DNS
- DNS API 服务器(可选)。
- ReverseDNS
- 反向 DNS API 服务器(可选)。
- DNSZone
- DNS 域名 , 用于注册
<hostname>.<domain>, 须已存在于 DNS 服务器(可选)。
12.6.2.Simple 区域
最简单 , 创建一个孤立的 VNet bridge —— 不接物理接口 , VM 流量只在本节点内。可用于 NAT 或路由场景。
12.6.3.VLAN 区域
借助已有本地 Linux / OVS bridge 连到节点物理接口 , 用 VNet 中定义的 VLAN tag 隔离网段 , 允许跨节点 VM 通信。
- Bridge
- 每节点已配置好、允许节点间互通的本地 bridge / OVS。
12.6.4.QinQ 区域
也叫 VLAN 堆叠 —— 多层 VLAN tag 做隔离。 QinQ zone 定义外层 VLAN(Service VLAN), 内层 VLAN 由 VNet 定义。
物理交换机必须支持堆叠 VLAN。
- Bridge
- 每节点已配置的 vlan-aware 本地 bridge。
- Service VLAN
- 本 zone 的主 VLAN tag。
- Service VLAN Protocol
- 可选
802.1q(默认)或802.1ad。 - MTU
- 双层 tag 要多 4 字节 —— 物理 MTU 1500 时 , QinQ MTU 要设为 1496。
12.6.5.VXLAN 区域
VXLAN 在既有 underlay 上建立隧道(overlay), 将二层帧封装入四层 UDP(默认端口 4789)。 underlay 须自行配通以实现所有对等体的 UDP 互通。典型 :在公网之上架设 VXLAN overlay, 让 VM 感觉处于同一本地二层网。
VXLAN 本身 不提供加密。跨站点 VXLAN 务必叠加站点间 VPN 等安全通道。
- Peers Address List
- VXLAN zone 内各节点 IP 列表(可含可达的外部节点)—— 集群所有节点都必须列出。
- SDN Fabric
- 可用 Fabric 自动生成 peer 列表 , 免去手填。
- MTU
- VXLAN 封装 50 字节 , MTU 比出向物理 MTU 少 50。
12.6.6.EVPN 区域
EVPN zone 建立可路由的三层网络 , 跨多集群 —— 通过 VPN + BGP 路由协议实现。 EVPN 的 VNet 可拥有 anycast IP / MAC , 各节点上的 bridge IP 相同 , VM 可直接把它当网关。借助 VRF 接口 , 不同 zone 的 VNet 之间也可路由。
- VRF VXLAN ID
- VNet 之间路由互联用的专用 VXLAN ID , 必须与 VNet 的 VXLAN ID 不同。
- Controller
- 本 zone 使用的 EVPN 控制器。
- VNet MAC Address
- 所有 VNet 的 anycast MAC, 不填则自动生成。
- Exit Nodes
- 作为 EVPN 到真实网络的出口网关节点 —— 会向 EVPN 公告默认路由(可选)。
- Primary Exit Node
- 多出口节点时强制流量走此主节点而非 ECMP —— 使用 SNAT 或上游不支持 ECMP 时必需。
- Exit Nodes Local Routing
- 需要在出口节点本机也能访问 VM/CT 服务时启用(默认 exit 节点只在真实网 ↔ EVPN 之间转发)。
- Advertise Subnets
- 向 EVPN 公告整个子网 —— 有「静默」VM/CT(多 IP 且 anycast 网关看不到其流量)时需要 , 否则这些 IP 在 EVPN 内不可达(可选)。
- Disable ARP ND Suppression
- 不抑制 ARP / ND —— VM 使用浮动 IP(IP / MAC 在系统间迁移)时需要(可选)。
- Route-target Import
- 导入外部 EVPN route-target 列表 —— 跨 DC / 不同 EVPN 网互联用(可选)。
- MTU
- VXLAN 封装要 50 字节 , MTU 需比物理最大 MTU 少 50, 默认 1450。
12.7.VNetsVNets
在 SDN GUI 创建 VNet 后 , 每节点出现同名本地接口 —— 把接口分配给客户机并设好 IP 即可接入 VNet。不同 zone 下各选项含义不同 , 详见上面的 zone 小节。
当前状态下 , 部分选项在某些 zone 可能无效或不工作。
- ID
- VNet ID, 最长 8 字符。
- Comment
- 描述性标识 , 作接口别名(可选)。
- Zone
- 关联的 zone。
- Tag
- 唯一 VLAN 或 VXLAN ID。
- VLAN Aware
- 接口开启 vlan-aware, 允许在客户机内配置 VLAN。
- Isolate Ports
- 给该接口上所有客户机端口加 isolated 标志(接口本身不算)—— 客户机仅能向非隔离 bridge 端口(即 bridge 自身)发流量。 需重启受影响客户机生效。
端口隔离仅作用于本机。跨节点隔离请用 VNet 防火墙 —— 例如默认 DROP、仅放行子网 ↔ 网关。
12.8.子网(Subnets)Subnets
Subnet 用 CIDR 描述 IP 范围 , 每个 VNet 可含多个子网 , 用于 :限制 VNet 上可用 IP、在三层 zone 分配路由 / 网关、在三层 zone 上 SNAT、借 IPAM 自动分配客户机 IP、借 DNS 插件注册。若 zone 关联了 IPAM , 子网前缀会自动注册到 IPAM。
- ID
- CIDR, 例如
10.0.0.0/8。 - Gateway
- 默认网关 —— 三层 zone(Simple / EVPN)会部署到 VNet 上。
- SNAT
- 启用源 NAT, 让 VNet 内 VM 通过节点出接口访问外网;在 EVPN zone 上 , 转发发生在 EVPN 网关节点(可选)。
- DNS Zone Prefix
- DNS 注册加前缀 , 形如
<hostname>.prefix.<domain>(可选)。
12.9.控制器Controllers
部分 zone 把控制面与数据面分离 , 需外部控制器管理 VNet 控制面。 目前仅 EVPN zone 需要外部控制器。
12.9.1.EVPN 控制器
EVPN zone 需外部控制器管理控制面 , EVPN 控制器插件配置 FRR 路由器。启用前需先在每节点启用 FRR(见 §12.3.3)。
- ASN #
- 唯一 BGP ASN —— 强烈建议用私有 ASN(64512 – 65534, 4200000000 – 4294967294), 否则可能误伤全局路由。
- SDN Fabric
- 含 EVPN zone 全部节点的 Fabric —— 作 underlay。
- Peers
- EVPN zone 所有节点 IP(可含外部节点或 route reflector)。
12.9.2.BGP 控制器
BGP 控制器不被 zone 直接使用 , 用于配置 FRR 管理 BGP 邻居。 BGP-EVPN 场景下可给每节点定义不同 ASN 实现 EBGP , 也可把 EVPN 路由导出到外部 BGP peer。
默认简单 full-mesh EVPN 不需要 BGP 控制器。
- Node
- 本 BGP 控制器所在节点。
- ASN #
- 唯一 BGP ASN(建议私有范围)。
- Peer
- 要通过 underlay BGP 通信的 peer IP 列表。
- EBGP
- peer 远端 AS 不同则启用 EBGP。
- Loopback Interface
- 用 loopback / dummy 作 EVPN 源(多路径)。
- ebgp-multihop
- peer 非直连或用 loopback 时提高跳数。
- bgp-multipath-as-path-relax
- peer ASN 不同时允许 ECMP。
12.9.3.ISIS 控制器
ISIS 控制器不被 zone 直接使用 , 用于把 EVPN 路由导出到 ISIS 域。
- Node
- 所在节点。
- Domain
- 唯一 ISIS 域。
- Network Entity Title
- 本节点唯一的 ISIS 网络地址。
- Interfaces
- ISIS 使用的物理接口列表。
- Loopback
- 用 loopback / dummy 作 EVPN 源。
12.10.FabricFabrics
Fabric 为集群节点提供自动化路由 , 简化 SDN underlay 配置 —— 通过在物理接口自动配置路由协议建立节点间连通性 , 形成可自愈、自动配置的网络底座。 Fabric 可用作 Ceph 的 full-mesh 网 , 或用于 EVPN 控制器与 VXLAN zone。
12.10.1.安装
基于 FRR 的 OpenFabric / OSPF 实现 —— 先装 FRR:
apt update apt install frr frr-pythontools
12.10.2.权限
查看 fabric 配置需 SDN.Audit / SDN.Allocate , 创建 / 修改需 SDN.Allocate。查看节点配置需 Sys.Audit / Sys.Modify;添加 / 更新 fabric 中节点还需该节点的 Sys.Modify(会写入节点的 /etc/network/interfaces)。
12.10.3.配置
进入 Datacenter → SDN → Fabrics, 点 "Add Fabric", 选协议后创建。用 "+" 添加节点并选与其他节点通信的接口。
Loopback Prefix
可为 fabric 指定 CIDR 作 loopback prefix(如 192.0.2.0/24)—— 系统会校验所有 router-ID 都在此前缀内 , 保证编址一致、避免冲突。
Router-ID
每节点需唯一 router-ID —— IPv4 点分十进制(如 192.0.2.1)。 OpenFabric 也可用 IPv6(如 2001:db8::1428:57ab)。会自动创建以 router-ID 为地址的 dummy 接口作 fabric 的 loopback(默认 passive)。
RouteMaps
每个 fabric 会自动创建 access-list 与 route-map, 让路由器改写出站包源地址为本机 dummy 的 IP, 而非物理接口 IP —— 保证 fabric 内路由与源地址选择一致。
IPv6 注意事项
IPv6 目前只在 OpenFabric 可用。 IPv6 fabric 要求所有节点 全局 启用 IPv6 forwarding —— 否则非 full-mesh fabric 中间节点不会转发给边缘节点。目前没有 IPv4 那样的「按接口启用」, 需全局开启。可在 /etc/network/interfaces 中 fabric 接口下加:
post-up sysctl -w net.ipv6.conf.all.forwarding=1
接口 up 时就会全局启用 IPv6 forwarding —— 注意这会影响自动 IPv6(SLAAC)、 NA、 RS、 RA 的处理 , 详见内核 Documentation/networking/ip-sysctl.txt。
12.10.4.OpenFabric
专为数据中心 fabric 设计、基于 IS-IS、针对 spine-leaf 拓扑优化的路由协议。
Fabric 层
- Name
- OpenFabric fabric 名称 , 最长 8 字符。
- IPv4 Prefix
- IPv4 CIDR , 校验所有 router-ID 在其中。
- IPv6 Prefix
- IPv6 CIDR , 同上。
- Hello Interval(默认 3 秒)
- 发送 hello 发现与维护邻居的频率 —— 值小故障检测快但流量大。 fabric 全局 , 所有节点所有接口继承。
- CSNP Interval(默认 10 秒)
- 与邻居同步路由数据库的频率 , fabric 全局。
IPv6 fabric 需所有节点全局启用 forwarding(见 §12.10.3「IPv6 注意事项」)。
节点层
- Node
- 只显示集群中现有节点。
- IPv4
- 唯一 IPv4 , 用于生成 OpenFabric NET。 fabric 内每节点 router-ID 需不同 , 而同一节点在所有 fabric 中使用同一 NET。不填 PVE 会自动选。
- IPv6
- 同上 IPv6 版本 —— 若同时有 IPv4 / IPv6 , 会用 IPv4 派生 NET。
- Interfaces
- 建立与其他 OpenFabric 节点对等的接口 , 建议选未配 IP 的接口 , 按需在 IPv4 / IPv6 列补。 dummy 「loopback」接口自动创建。
用 IPv6 时 , NET 由最后 3 段生成 —— 各节点这 3 段需不同。
接口层
- IP
- 要自动配置在该接口的 IPv4, 需含掩码(如
/31)。 - IPv6
- 自动配置的 IPv6 , 含掩码(如
/127)。 - Hello Multiplier(默认 10)
- 多少次丢 hello 算链路失效 —— 值大抗丢包但故障检测慢。
移除 /etc/network/interfaces 中带 manual 的接口条目时 , 应用 SDN 配置 不会 删除该 IP。
12.10.5.OSPF
OSPF(开放最短路径优先)是广泛使用的链路状态路由协议。
Fabric 层
- IPv4 Prefix
- IPv4 CIDR , 校验 router-ID 在其中。
- Area
- OSPF 区域标识 , 32 位整数或 IP。
0(0.0.0.0)为骨干。
节点层
- Node
- 集群中节点。
- IPv4
- 唯一 Router-ID —— 同 fabric 内需不同。
- Interfaces
- 与其他 OSPF 节点对等的接口 , 建议未配 IP 的。 dummy「loopback」接口自动创建。
接口层
- IP
- 自动配置的 IPv4, 含掩码。
移除 manual 接口条目时 IP 不会自动删。 dummy 接口自动 passive; 未配 IP 的接口按 point-to-point 处理。
12.11.IPAMIPAM
IPAM 管理网络上客户端的 IP —— PVE SDN 用它为新客户机找空闲 IP 等。一个 IPAM 实例可关联一个或多个 zone。
12.11.1.PVE IPAM 插件
PVE 集群内置默认 IPAM。可通过数据中心 SDN → IPAM 面板查状态 / 创建 / 修改 / 删除 IP 映射 —— 与 DHCP 联用尤其方便。用 DHCP 时可在 IPAM 面板为指定 VM 建 / 改租约 , 从而变更 DHCP 分到的 IP; 改完须强制客户机重新申请租约(一般重载网络栈或重启即可)。
12.11.2.NetBox IPAM 插件
NetBox 是开源 IPAM + DCIM 工具。集成 PVE SDN 需在 NetBox 创建 API token(见 NetBox 文档)。配置:
- URL
- NetBox REST API 端点 :
http://yournetbox.domain.com/api。 - Token
- API 访问令牌。
- Fingerprint
- NetBox API 的 SHA-256 指纹 —— 默认证书可用
openssl x509 -in /etc/ssl/certs/netbox.crt -noout -fingerprint -sha256取。
12.11.3.phpIPAM 插件
phpIPAM 需创建 application 并给它加 admin API token。配置:
- URL
- REST API 端点 :
http://phpipam.domain.com/api/<appname>/。 - Token
- API 令牌。
- Section
- 整数 ID —— phpIPAM 的 section 是子网组 , 默认
sectionid=1(customers)。
12.12.DNSDNS
DNS 插件用于定义 DNS API 服务器 , 注册 hostname 与 IP。 DNS 配置关联一或多个 zone , 为该 zone 内所有子网 IP 提供注册。
12.12.1.PowerDNS 插件
参考 PowerDNS HTTP API 文档。 PowerDNS 配置中启用 webserver 与 API:
api=yes api-key=arandomgeneratedstring webserver=yes webserver-port=8081
- url
- REST API 端点 :
http://yourpowerdnserver.domain.com:8081/api/v1/servers/localhost。 - key
- API 访问密钥。
- ttl
- 记录默认 TTL。
12.13.DHCPDHCP
DHCP 插件可为 zone 自动部署 DHCP 服务器 , 服务于 zone 中配置了 DHCP range 的所有子网。目前唯一后端是 dnsmasq。
工作方式 :给 VM/CT 加网卡时 , DHCP 插件会经 zone 中配置的 IPAM 分配一个 IP ; VM 启动时在 DHCP 插件中建立 MAC ↔ IP 映射;网卡移除或 VM/CT 销毁时 IPAM 与 DHCP 条目一并删除。
IP 映射的增 / 改 / 删当前 仅 PVE IPAM 插件 支持。
12.13.1.配置
在 Web UI 的 Zones 面板高级选项中为 zone 启用 DHCP。
目前 仅 Simple zone 支持自动 DHCP。
启用后再在 VNets 面板的子网里配 DHCP range —— 或用 CLI:
pvesh set /cluster/sdn/vnets/<vnet>/subnets/<subnet> -dhcp-range start-address=10.0.1.100,end-address=10.0.1.200 -dhcp-range start-address=10.0.2.100,end-address=10.0.2.200
子网必须配网关 , 否则自动 DHCP 不会工作。 DHCP 只在配置的 range 内分配 IP。别忘按 §12.3.2 装 dnsmasq。
12.13.2.插件
Dnsmasq 插件
当前唯一 DHCP 插件 , 启用 zone DHCP 时就是它。安装见 §12.3.2。
配置 :每个使用 dnsmasq 的 zone 对应一个 systemd 服务 dnsmasq@<zone>, 生命周期由 DHCP 插件管理。插件自动在 /etc/dnsmasq.d/<zone> 生成:
00-default.conf- dnsmasq 实例的默认全局配置。
10-<zone>-<subnet_cidr>.conf- 子网专属选项 , 如 DHCP 下发的 DNS。
10-<zone>-<subnet_cidr>.ranges.conf- DHCP range 配置。
ethers- 来自 IPAM 的 MAC ↔ IP 映射 —— 勿直接编辑(会被插件覆盖), 改用对应 IPAM 插件。
上述文件 不可手改。如需自定义 , 在同目录建额外文件(如 90-custom.conf), 插件不会动它。配置按文件名顺序读入 , 用命名控制顺序。 DHCP 租约存于 /var/lib/misc/dnsmasq.<zone>.leases。用 PVE IPAM 时可增 / 改 / 删租约 , 其他 IPAM 插件暂不支持。
12.14.防火墙集成Firewall Integration
SDN 会自动生成 IPSet , 可直接在防火墙规则的 source / destination 里引用。对 VNet 与 IPAM 条目都会自动处理。
12.14.1.VNets 与子网
每个 VNet 会在 SDN scope 下自动生成以下 IPSet:
vnet-all- VNet 中所有子网 CIDR。
vnet-gateway- 所有子网网关 IP。
vnet-no-gateway- 所有子网 CIDR , 排除网关。
vnet-dhcp- 所有 DHCP range。
配置变化时 IPSet 自动更新 —— 改子网无需手动改规则。
Simple Zone 示例
# /etc/pve/sdn/vnets.cfg vnet: vnet0 zone simple # /etc/pve/sdn/subnets.cfg subnet: simple-192.0.2.0-24 vnet vnet0 dhcp-range start-address=192.0.2.100,end-address=192.0.2.199 gateway 192.0.2.1 subnet: simple-2001:db8::-64 vnet vnet0 dhcp-range start-address=2001:db8::1000,end-address=2001:db8::1999 gateway 2001:db8::1
以上配置自动生成的 IPSet:
vnet0-all:192.0.2.0/24、2001:db8::/64vnet0-gateway:192.0.2.1、2001:db8::1vnet0-no-gateway:192.0.2.0/24、2001:db8::/64、!192.0.2.1、!2001:db8::1vnet0-dhcp:192.0.2.100 - 192.0.2.199、2001:db8::1000 - 2001:db8::1999
12.14.2.IPAM
用内置 PVE IPAM 时 , 每个在 IPAM 有条目的客户机都会自动生成 IPSet —— 例如 ID 100 的客户机对应 guest-ipam-100, 含该客户机所有 IPAM 条目的 IP(跨多 VNet 时会包含全部 VNet 的 IP)。条目增 / 改 / 删时 IPSet 随之更新。
若移除了客户机所有条目但仍有防火墙规则引用该自动 IPSet , 应用规则会失败 —— 引用了不存在的 IPSet。
12.15.示例Examples
12.15.1.Simple Zone 示例
Simple zone 为单主机上的客户机提供孤立网络。
客户机仅当同主机时才能互通 , 其他节点不可达。
- 创建 Simple zone 名
simple。 - 创建 VNet 名
vnet1。 - 创建子网 , 填网关并启用 SNAT。
- 节点上会出现
vnet1桥 —— 将桥分配给加入该网络的客户机并配 IP。
两个 VM 的网卡配置 , 可经 10.0.1.0/24 互通:
allow-hotplug ens19 iface ens19 inet static address 10.0.1.14/24
allow-hotplug ens19 iface ens19 inet static address 10.0.1.15/24
12.15.2.源 NAT 示例
Simple zone 上想让客户机出外网可用 SNAT。在 §12.15.1 基础上 , 给 vnet1 加子网 , 设网关并启用 SNAT:
Subnet: 172.16.0.0/24 Gateway: 172.16.0.1 SNAT: checked
客户机内在该子网内配静态 IP。节点会以 172.16.0.1 加入本网 , 并为该子网范围内客户机充当 NAT 网关。
12.15.3.VLAN 示例
跨节点 VM 需经隔离网通信时 , VLAN zone 用 VLAN tag 做网络层隔离。创建 VLAN zone myvlanzone:
ID: myvlanzone Bridge: vmbr0
创建 VNet myvnet1, VLAN tag 10, 属 myvlanzone:
ID: myvnet1 Zone: myvlanzone Tag: 10
在 SDN 主面板应用配置。 node1 建 Debian VM vm1, vNIC 接 myvnet1:
auto eth0 iface eth0 inet static address 10.0.3.100/24
node2 建 vm2, 同 VNet:
auto eth0 iface eth0 inet static address 10.0.3.101/24
两 VM 应可互 ping。
12.15.4.QinQ 示例
演示用多层 VLAN tag 配置更隔离的 VLAN —— 典型场景 :托管商为客户提供用于 VM 间通信的隔离网 , 同时隔开不同客户。
创建 QinQ zone qinqzone1, service VLAN 20:
ID: qinqzone1 Bridge: vmbr0 Service VLAN: 20
qinqzone2, service VLAN 30:
ID: qinqzone2 Bridge: vmbr0 Service VLAN: 30
VNet qinqvnet1(tag 100, 属 qinqzone1)、 qinqvnet2(tag 100, 属 qinqzone2)。应用配置。
建 4 个 Debian VM:vm1、 vm2 挂 qinqvnet1, vm3、 vm4 挂 qinqvnet2。各自给 10.0.3.101 – 10.0.3.104。 vm1 ↔ vm2、 vm3 ↔ vm4 可通;但 vm1/vm2 与 vm3/vm4 因不同 service VLAN 无法互通。
12.15.5.VXLAN 示例
假设 3 节点集群 , IP 为 192.168.0.1 / .2 / .3。创建 VXLAN zone myvxlanzone, MTU 默认 1450:
ID: myvxlanzone Peers Address List: 192.168.0.1,192.168.0.2,192.168.0.3
VNet vxvnet1:
ID: vxvnet1 Zone: myvxlanzone Tag: 100000
应用。 node1 建 VM vm1 接 vxvnet1:
auto eth0 iface eth0 inet static address 10.0.3.100/24 mtu 1450
node3 建 vm2:
auto eth0 iface eth0 inet static address 10.0.3.101/24 mtu 1450
vm1 ↔ vm2 应互通。
12.15.6.EVPN 示例
3 节点集群(node1 / 2 / 3, IP 192.168.0.1 / .2 / .3)。创建 EVPN 控制器 myevpnctl, 私有 ASN:
ID: myevpnctl ASN#: 65000 Peers: 192.168.0.1,192.168.0.2,192.168.0.3
EVPN zone myevpnzone:
ID: myevpnzone VRF VXLAN Tag: 10000 Controller: myevpnctl MTU: 1450 VNet MAC Address: 32:F4:05:FE:6C:0A Exit Nodes: node1,node2
第一个 VNet myvnet1:
ID: myvnet1 Zone: myevpnzone Tag: 11000
子网 :10.0.1.0/24 , 网关 10.0.1.1。
第二个 VNet myvnet2(tag 12000), 子网 10.0.2.0/24, 网关 10.0.2.1。应用配置(会生成 FRR 配置)。
node1 建 vm1 接 myvnet1:
auto eth0 iface eth0 inet static address 10.0.1.100/24 gateway 10.0.1.1 mtu 1450
node2 建 vm2 接 myvnet2:
auto eth0 iface eth0 inet static address 10.0.2.100/24 gateway 10.0.2.1 mtu 1450
vm1 ↔ vm2 可互通。从 node3(非出口节点)上的 vm2 ping 外网 IP , 包会经 myvnet2 网关 → 路由到出口节点(node1 或 node2)→ 再经其默认网关出网。
外部网关上要为 10.0.1.0/24 与 10.0.2.0/24 加回指 node1 / node2 的路由 , 公网才能回包。若配了外部 BGP 路由器 , BGP-EVPN 路由(本例的 10.0.1.0/24 和 10.0.2.0/24)会被动态公告。
12.16.注意事项Notes
12.16.1.多个 EVPN 出口节点
多出口节点时应禁用 rp_filter(严格反向路径过滤)—— 因包可能从一个节点进、从另一个节点出。 /etc/sysctl.conf 加:
net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.all.rp_filter=0
12.16.2.VXLAN IPSec 加密
在 VXLAN 上叠加 IPSec 加密(strongswan 示例)。加密需额外减 MTU:IPv4 60 字节 / IPv6 80 字节。物理 1500 MTU 下应用 1370(1370 + 80 IPSec + 50 VXLAN = 1500)。
apt install strongswan
/etc/ipsec.conf —— 只加密 VXLAN UDP 4789:
conn %default ike=aes256-sha1-modp1024! # 快且够用的加密套件 esp=aes256-sha1! leftfirewall=yes # 使用 PVE 防火墙规则时需要 conn output rightsubnet=%dynamic[udp/4789] right=%any type=transport authby=psk auto=route conn input leftsubnet=%dynamic[udp/4789] type=transport authby=psk auto=route
生成 PSK:
openssl rand -base64 128
加入 /etc/ipsec.secrets:
: PSK <generatedbase64key>
把 PSK 与配置复制到所有参与 VXLAN 的节点。