SDN fabrics: OpenFabric, OSPF, WireGuard
What you'll learn
- Choose the right fabric protocol for a given topology
- Configure OpenFabric spine-leaf, OSPF, or WireGuard fabrics
- Apply fabrics as underlays for EVPN or full-mesh Ceph networks
- Recognise the trade-offs between fabric automation and manual configuration
Prerequisites
Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12
Why this matters in production
EVPN and Ceph both need an underlay network. Configuring that underlay on every node by hand is error-prone, especially at scale. SDN fabrics automate the underlay configuration through FRRouting (FRR), letting you declare what you want and have Proxmox push the configuration.
What a fabric is
A fabric is a cluster-wide routing configuration that:
- Identifies the participating nodes.
- Assigns each node a router-ID (an IP address used as the routing identifier).
- Configures the routing protocol (OpenFabric, OSPF) between the nodes’ physical interfaces.
- Manages IP addresses on those interfaces.
- Optionally creates dummy/loopback interfaces for stable addressing.
The result is a working dynamic routing topology that EVPN, BGP, or Ceph can build on.
Fabric types
| Type | Protocol | Best for | Notes |
|---|---|---|---|
| OpenFabric | IS-IS based, data-centre optimised | Spine-leaf topologies | Recommended for new deployments |
| OSPF | Link-state, widely deployed | Existing OSPF infrastructure | Battle-tested, broader vendor support |
| WireGuard | Encrypted point-to-point | Multi-site, encrypted underlay | Adds CPU overhead |
Installing the required packages
apt update && apt install -y frr frr-pythontools && systemctl enable --now frr
Configuring an OpenFabric fabric (GUI)
- Datacenter → SDN → Fabrics → Create: pick OpenFabric, set IPv4 prefix for the loopback range, hello interval, CSNP interval.
- Add nodes: pick a node, set its router-ID IPv4 address, and pick the physical interface(s) used to peer with other nodes.
- Apply the SDN configuration.
The fabric automatically:
- Creates dummy interfaces (
dummy0,loopback0…) with the configured router IDs. - Configures FRR to run OpenFabric on the chosen interfaces.
- Adds IP addresses and routing.
Configuring an OpenFabric fabric (CLI)
The fabric object and its per-node entries are separate endpoints under
/cluster/sdn/fabrics, and the fabric type is protocol rather than
type:
pvesh create /cluster/sdn/fabrics/fabric \
--id fabric1 --protocol openfabric \
--ip_prefix 10.255.0.0/24 \
--hello_interval 3 --csnp_interval 10
pvesh create /cluster/sdn/fabrics/node/fabric1 \
--node_id pve-01 --protocol openfabric \
--ip 10.255.0.1 --interfaces ens4
pvesh set /cluster/sdn
vtysh -c 'show ip ospf neighbor' 2>/dev/null || journalctl -u frr --since '5 minutes ago'WireGuard fabric
A WireGuard fabric builds an encrypted underlay between nodes. Use it when:
- The underlay network is untrusted (public internet between sites).
- You need encryption for EVPN or Ceph traffic across an insecure path.
WireGuard does not provide dynamic routing by itself; combine it with OSPF or static routes on top.
apt install -y wireguard-tools
pvesh create /cluster/sdn/fabrics/fabric \
--id wg1 --protocol wireguard \
--ip_prefix 10.255.0.0/24 --persistent_keepalive 25
pvesh create /cluster/sdn/fabrics/node/wg1 \
--node_id pve-01 --protocol wireguard \
--ip 10.255.0.1 --endpoint 198.51.100.1 \
--allowed_ips 10.255.0.1/32
The node entry also takes public_key and peers for an external
WireGuard peer that is not a cluster node.
pvesh usage /cluster/sdn/fabrics/fabric --command create --verbose 1
pvesh usage /cluster/sdn/fabrics/node/wg1 --command create --verbose 1Using a fabric as underlay
Once a fabric exists, an EVPN zone or a Ceph full-mesh network can reference it:
- EVPN zone: set the SDN Fabric field on the EVPN controller to the fabric ID. The controller learns VTEP IPs from the fabric’s loopback addresses.
- Ceph full-mesh: documented in the Ceph lesson, but a fabric provides the routed underlay that the mesh requires.
Verifying a fabric, rather than assuming it
A fabric that applied cleanly and formed no adjacencies looks identical to a working one from the Proxmox GUI. The consumers built on top of it — EVPN, a Ceph mesh — then fail for reasons that appear to be theirs.
NODE=pve-02
# 1. Are the adjacencies up? (protocol depends on fabric type)
pvesh get "/nodes/$NODE/sdn/fabrics" --output-format yaml
vtysh -c 'show openfabric neighbor' 2>/dev/null
vtysh -c 'show ip ospf neighbor' 2>/dev/null
# 2. Are loopback routes being learned?
vtysh -c 'show ip route' | head -30
# 3. Can this node actually reach every other node's router-ID?
for ip in 10.255.0.1 10.255.0.2 10.255.0.3; do
ping -c 2 -W 1 "$ip" >/dev/null 2>&1 &&
echo "$ip reachable" || echo "$ip UNREACHABLE"
doneProxmox also exposes per-node fabric state through the API, which is the right thing to poll from monitoring:
NODE=pve-01
FABRIC=fabric1
pvesh get "/nodes/$NODE/sdn/fabrics/$FABRIC/interfaces" --output-format yaml
pvesh get "/nodes/$NODE/sdn/fabrics/$FABRIC/neighbors" --output-format yaml
pvesh get "/nodes/$NODE/sdn/fabrics/$FABRIC/routes" --output-format yamlCommon mistakes
- Choosing OSPF when an existing routing infrastructure expects it, but forgetting to coordinate route redistribution.
- Using WireGuard as fabric on every link, including internal switches — wasteful CPU cost.
- Configuring fabrics without an EVPN/Ceph consumer; the fabric by itself produces no value.
- Setting hello intervals too low; aggressive timers can destabilise a large fabric.
Key takeaways
- Fabrics automate the underlay routing configuration.
- OpenFabric is the data-centre-optimised default; OSPF for legacy environments; WireGuard for untrusted links.
- A fabric is only useful when something builds on top of it (EVPN, Ceph).
- Verify with three questions: are the adjacencies up, are loopback routes present, and can every node reach every other node’s router-ID. Proxmox will not tell you that a fabric formed no neighbours.
/nodes/{node}/sdn/fabrics/{fabric}/neighborsand/routesare the right endpoints for monitoring to assert on.
Knowledge check
Knowledge check · 4 questions
Q1. Which fabric protocol is purpose-built for data-centre topologies?
Q2. WireGuard gives you encrypted point-to-point tunnels and still needs a routing protocol on top to work as a fabric.
Q3. Which Linux package must be installed to use fabrics in PVE 9?
Q4. An EVPN zone is applied over a new OpenFabric fabric. Guests can reach other guests on the same node and nothing on other nodes. The SDN configuration applied without error and the dummy interfaces carry their router IDs. Where do you look first?
Passing score: 75%. Answers are checked in this browser.