跳转到内容

SDN Fabrics:OpenFabric、OSPF、WireGuard、BGP 与路由过滤 ​

跨节点的 VXLAN 或 EVPN 网络需要节点之间先有一条能互相路由的底层网络(underlay)。传统做法是手写 FRR(一套开源路由协议套件)配置,每个节点都要改,容易出错。SDN Fabrics 把这一步做成了 Web UI 里的表单:选协议、加节点、点 Apply,PVE 自动生成并下发 FRR 配置。

改动会重新配置节点的路由和物理接口

Fabric 直接接管参与节点的路由协议守护进程(FRR)配置,并可能涉及为对应物理接口分配 IP、开关路由邻居关系。配置错误可能导致节点间路由中断,进而影响依赖这条 underlay 的 VXLAN/EVPN 网络,甚至如果与集群管理网络共用接口,会影响集群通信。

开始前确认你有以下至少一条退路:物理控制台、IPMI/BMC,或者机器就在手边。失联后的自救步骤见改静态 IP 与失联自救。建议先在测试集群或非高峰时段验证一次完整流程。

适合什么场景 ​

  • 给 Ceph 搭建全网状(full mesh)高速存储网络,不占用交换机端口。
  • 给 EVPN 或 VXLAN Zone 提供跨节点路由,不用手动维护每对节点的对等关系。
  • 多机房、多站点场景下,节点之间没有一个共同的二层网络,只能靠路由互通。

不需要跨三层路由、也不打算用 EVPN 的小规模单机或单交换机环境,通常用不到 Fabrics,直接用 Bridge/VLAN 更简单。

各版本支持的协议 ​

Proxmox VE 9.0(2025-08)引入 SDN Fabrics 功能,初始只支持两种协议;后续版本逐步增加。具体协议和参数以你实际安装版本的 Web UI 为准,下表基于官方发布信息整理:

版本新增的 Fabric 协议/能力
9.0OpenFabric(基于 IS-IS)、OSPF
9.1OSPF 路由重分发能力增强(不同资料对 9.1/9.2 的具体条目归属有出入,以你版本的更新日志为准)
9.2新增 WireGuard、BGP 两种 Fabric 类型;BGP/EVPN 支持 route map 与 prefix list 做路由过滤;EVPN 支持 IPv6 underlay
协议适合说明
OpenFabric大型扁平三层网络基于 IS-IS,配置简单,适合全网状拓扑
OSPF传统 IGP 路由环境经典动态路由协议,支持把路由重分发进 EVPN
WireGuard需要加密的 underlay,跨不可信网络的节点互联本身不做动态路由,需要配合 OSPF 或 BGP 在其上跑路由
BGP大规模、多站点、需要精细路由控制的场景采用 eBGP unnumbered,节点各自一个 ASN,链路不需要配 IP,支持 IPv6 underlay 和 EVPN

开始之前 ​

  • 需要 frr 和 frr-pythontools 软件包(OpenFabric/OSPF 场景):
sh
# 宿主机 shell,每个涉及的节点
apt install frr frr-pythontools
  • Fabric 的配置文件是 /etc/pve/sdn/fabrics.cfg,通过 pmxcfs 自动同步到全部节点。
  • 如果从 PVE 8 升级上来,且之前在 /etc/frr/frr.conf.local 里手写过 OpenFabric 或 OSPF 配置:第一次应用 SDN 配置时,这些自定义配置会失效,因为 PVE 会接管 /etc/frr/daemons 里对应守护进程的启用状态。想保留自定义配置,需要另外建 /etc/default/frr 并按需加上 ospfd=yes(OSPF)或 fabricd=yes(OpenFabric)。

操作步骤(以 OpenFabric 全网状为例) ​

  1. 数据中心 → SDN → Fabrics → Create,选择协议(例如 OpenFabric)。
  2. 给 Fabric 起名,确定参与的接口。
  3. 逐个节点点 Add Node(或者在 Fabric 那一行点 +),填写该节点的 IPv4/IPv6 地址——这个地址同时也会作为该节点在路由协议里的 router-id。
  4. 回到 数据中心 → SDN 总览页,点 Apply Configuration。PVE 会在每个涉及节点上生成对应的 FRR 配置并重载。

BGP Fabric 的配置多几步:每个节点需要分配 ASN(推荐使用私有 ASN 段),链路是 eBGP unnumbered(不需要给链路配 IP,只需要指定物理接口);WireGuard Fabric 需要额外指定监听端口和节点间的对等关系,建立起来的隧道本身不路由,还要在其上叠加 OSPF 或 BGP 才能实现路径选择。

WireGuard Fabric 不是独立的路由方案

WireGuard 只负责建立加密隧道,官方文档明确说明它不提供动态路由能力,需要配合 OSPF 或 BGP 一起用:WireGuard 建隧道,OSPF/BGP 在隧道之上跑路由。

路由过滤:Route Map 与 Prefix List(9.2 起) ​

多租户或多站点场景下,不是所有路由都应该被所有节点看到。9.2 引入的 Route Map 和 Prefix List 可以按 Fabric 精细控制哪些前缀被重分发、被哪些邻居接收,典型用途包括:限制某个 EVPN VRF 只暴露部分网段给特定 Exit Node,或者过滤掉不需要的外部路由。具体字段和界面位置请以你的 Web UI 为准。

检查结果 ​

sh
# 宿主机 shell,确认 FRR 服务状态
systemctl status frr

# 查看当前路由表里 Fabric 带来的路由
ip route

# 进入 FRR 的交互界面查看协议邻居和路由细节
vtysh -c "show ip ospf neighbor"
vtysh -c "show isis neighbor"
vtysh -c "show bgp summary"

从一个节点 ping 另一个节点的 Fabric 地址,确认互通;再检查依赖这条 underlay 的 VXLAN Zone 或 EVPN Zone(见 SDN Zone 实战)是否能正常跨节点通信,这才是 Fabric 真正生效的验证。

常见问题 ​

升级到 PVE 9 之后,原来手写的 FRR 配置不生效了。 见上文「开始之前」的说明,需要在 /etc/default/frr 里显式启用对应的守护进程(ospfd=yes / fabricd=yes)。

Apply 之后节点间路由不通。 用 vtysh 检查协议邻居状态是否建立;检查填写的节点地址、接口是否正确,尤其是 BGP 场景下的 unnumbered 接口配置。

WireGuard Fabric 建立了隧道,但节点间还是不通。 确认在这条隧道之上还配置了 OSPF 或 BGP——WireGuard 本身只负责加密传输,不负责路由。

不确定自己的版本支持哪些 Fabric 类型。 不同版本的功能表述在各方资料之间有出入,直接看 数据中心 → SDN → Fabrics → Create 下拉框里实际列出的协议,那才是你这台机器上真正可用的。

参考资料 ​

延伸阅读 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。