如果使用了 SDN 网络,必须先安装 dnsmasqfrr-pythontools,再进行 SDN 网络的创建。

安装依赖

1
apt install dnsmasq frr-pythontools -y
注意

建议在换源后执行此命令。这个必须执行后再创建 SDN 网络。

主 dnsmasq.service 冲突问题

安装 dnsmasq 后,会部署一个全局主服务 dnsmasq.service。它和 SDN 的 dnsmasq@.service 模板实例之间存在端口抢占问题。

为什么会产生冲突

主 dnsmasq.service 的存在原因:

软件包默认行为
安装 `dnsmasq` 包时,会部署全局主服务 `dnsmasq.service`,默认启用,读取 `/etc/dnsmasq.d/` 全部配置,抢占 `0.0.0.0:53` 端口。
SDN 使用模板实例
PVE SDN 通过 `dnsmasq@.service` 模板为每个 VNet 创建独立实例(如 `dnsmasq@H2.service`)。这些实例本该只绑定自己的接口和 IP,彼此隔离。
端口抢占
主服务会与这些实例争抢端口(尤其是全局 53 端口),导致冲突。这是 Proxmox SDN 安装流程中的设计疏忽。

为什么以前没注意到?

单 VNet 没踩坑
安装 PVE 后立即配置 SDN,可能主服务还没被触发冲突,或只创建了一个 VNet。
多 VNet 暴露问题
当创建多个 VNet 时,抢端口的问题就暴露了,尤其是第一个启动的实例会吃掉全局 DHCP(67 端口),第二个就起不来。
结论

在 Proxmox SDN 环境中,主 dnsmasq.service 完全多余,应该永久禁用。SDN 的每个 VNet 都由自己的 dnsmasq@<vnet>.service 接管。

禁用命令(一次执行,永久生效)

1
2
3
systemctl stop dnsmasq.service          # 立即停止
systemctl disable dnsmasq.service # 禁止开机自启
systemctl mask dnsmasq.service # 彻底屏蔽,防止被其他服务意外拉起
说明

mask 会创建一个指向 /dev/null 的符号链接,任何试图启动该服务的操作都会被阻止,这是最安全的做法。

验证

1
systemctl status dnsmasq.service        # 应显示 masked (inactive)

之后,只有 dnsmasq@H1dnsmasq@H2dnsmasq@H3 这些模板实例会运行,每个实例各自绑定到对应 VNet 的网关 IP 上,互不干扰。

推荐防火墙设计(数据中心级简配方案)

防火墙规则表

#方向动作协议源端口目的端口说明
1inACCEPTUDP6867DHCP 服务器接收
2inACCEPTUDPany53DNS 查询
3inACCEPTTCPany53DNS 大包(可选)
防火墙配置
防火墙配置
重要

这个必须配置,保存后立即生效,H2/H3 所有网络恢复正常。

SDN-区域

Proxmox VE 的 SDN 提供了五种区域类型,分别对应不同的隔离技术和跨节点通信方案。

五种区域类型概览

区域类型底层技术作用范围跨节点隔离标识数量依赖物理设备典型场景
SimpleLinux Bridge单节点无限制(软件限定)单机隔离、开发测试
VLAN802.1Q VLAN Tag物理网络4094 个交换机需支持 VLAN与物理网络融合、传统虚拟化
VXLANVXLAN OverlayUnderlay 可达1600 万个仅要求 IP 可达大规模云、多租户、跨机房
Q-in-Q802.1ad Provider Bridge物理网络两层 VLAN:每层 4094,共约 1600 万交换机需支持 Q-in-Q运营商环境、多租户共享物理线路
EVPNVXLAN + BGP EVPNUnderlay 可达1600 万个IP 可达 + BGP 对等体现代数据中心、多节点、高级路由

Simple(简单区域)

  • 工作原理:在节点本地创建独立的 Linux Bridge,虚拟机桥接到该网桥。没有隧道封装,也没有 VLAN 标签
  • 隔离性:每个 Simple 区域就是一个独立的软件交换机,不同区域间天生隔离
  • 跨节点:不支持
  • 优点:简单、性能好、无网络依赖
  • 适用:单节点环境、开发和功能测试

VLAN(虚拟局域网区域)

solar:layers-bold-duotone

  • 工作原理:直接使用 802.1Q VLAN 标签,在以太网帧中插入 VLAN ID
  • 隔离性:由交换机按 VLAN ID 隔离,标签范围 1-4094
  • 跨节点:是,所有连接到同一交换机、同一 VLAN 的节点都能互通
  • 依赖:物理交换机必须配置相应的 VLAN 并允许通过(Trunk 口)
  • 适用:需要与现有物理网络打通的场景

VXLAN(虚拟可扩展局域网区域)

solar:cloud-bold-duotone

  • 工作原理:将二层的以太网帧封装在 UDP 包中(默认端口 4789),通过标准 IP 网络传输
  • 隔离性:VNI 数量可达 1600 万个
  • 跨节点:是,只要节点之间 IP 三层可达即可
  • 优点:摆脱了物理网络限制,扩展性极强
  • 适用:需要跨机架、跨数据中心的大规模虚拟网络

Q-in-Q(802.1ad 双重标签)

solar:layers-minimalistic-bold-duotone

  • 工作原理:在以太网帧中打两层 VLAN 标签(S-VLAN + C-VLAN)
  • 隔离性:双重标签约 1600 万个隔离通道
  • 适用:运营商将多个客户 VLAN 聚合到一条物理线路上时使用

EVPN(以太网虚拟专用网络)

solar:network-bold-duotone

  • 工作原理:在 VXLAN 基础上引入 BGP EVPN 作为控制平面,解决 ARP 广播问题
  • 优点:支持多活网关、快速收敛、多租户复杂路由策略
  • 缺点:架构复杂,配置门槛高
  • 适用:中大型生产环境,需要跨多个节点构建弹性、可扩展的虚拟网络

选型建议

Simple
单节点开发/测试
省心省力

VLAN
与物理网络混跑
VLAN 数量 < 200

VXLAN
大规模虚拟化
不想受物理网络限制

Q-in-Q
运营商环境
双重 VLAN 需求

EVPN
中大型生产集群
跨多节点可扩展

SDN VNet 属性

在 Simple 区域中,VNet 有两个关键属性:

端口隔离 (isolate-ports)

注意

需要虚拟机关机再开机才能生效。

**作用**:阻止连接到同一个 VNet 的虚拟机之间进行二层直接通信(广播、单播帧都被过滤),但它们仍然可以与网关通信。
**典型应用**:公共云风格的网络策略,每个 VM 只能和网关/外部通信,互不可见
**对子网的影响**:无影响,子网仍然可以正常创建,DHCP 正常工作

VLAN 感知 (VLAN aware)

作用:将 Linux Bridge 配置为 VLAN-aware 模式,允许网桥识别和处理带有 VLAN 标签的帧,实现单网卡多 VLAN(Trunk 模式)。

关键限制

当 VNet 设置为 VLAN-aware 时,PVE SDN 不允许在该 VNet 上直接附加任何 Subnet。原因是网桥不再代表一个单一广播域,PVE 无法确定网关 IP 属于哪个 VLAN。

如果想在单节点上模拟多个 VLAN 并给每个 VLAN 自动分配 IP,正确的做法是创建一个 **VLAN zone**,然后在该 zone 下创建多个 VNet,每个对应一个 VLAN ID,再分别挂载子网。

直观对比

端口隔离 vs VLAN 感知 table

特性端口隔离 (isolate-ports)VLAN 感知 (VLAN aware)
二层效果VM 之间禁止直接通信允许 VM 发送带标签的帧
可附加子网可以不可以
DHCP/DNS 自动配置由 PVE 自动集成需外部提供或手动配置
典型用途安全隔离、云风格网络让 VM 自己做 Trunk 或多 VLAN
底层实现bridge isolate onbridge vlan_filtering 1