Skip to main content
RunBook Academy

Proxmox VEIV · NetworkingSDN

SDN: zones, VNets, subnets

Advanced⏱ ~22 min

What you'll learn

  • Distinguish zone types: simple, VLAN, QinQ, VXLAN, EVPN
  • Create zones, VNets, and subnets through the GUI and CLI
  • Apply SDN-level firewall and IPAM features
  • Know when SDN is overkill and a plain bridge suffices

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

Not yet marked complete on this device.

Why this matters in production

Without SDN, every multi-tenant environment requires manual bridge creation on every node and per-VLAN configuration that does not scale beyond a handful of segments. SDN lets you define zones, VNets, and subnets once at the datacenter level and have Proxmox push the configuration to every node.

Mental model

SDN has three layers:

  1. Zone — a virtually separated network area. The zone type (simple, VLAN, QinQ, VXLAN, EVPN) determines the underlying technology.
  2. VNet — a virtual network inside a zone. A VNet is realised as a bridge on every node that participates in the zone.
  3. Subnet — an IP range inside a VNet, with optional gateway, SNAT, and DHCP.
flowchart TB
  subgraph Z[Zone: 'corp', type VLAN]
    V1["VNet 'web' (tag 100)"]
    V2["VNet 'db' (tag 200)"]
    S1[Subnet 10.10.100.0/24]
    S2[Subnet 10.10.200.0/24]
  end
  V1 --> S1
  V2 --> S2

Zone types

TypeWhat it doesWhen to use
SimpleIsolated bridge, no uplink. VMs can talk to each other but not to the network.DMZ, isolated workload, NAT setup
VLANUses an existing local bridge + VLAN tagging.Tenant segmentation on shared uplink
QinQStacked VLANs (Service-VLAN + Customer-VLAN).Multi-tenant over provider VLANs
VXLANLayer 2 over UDP tunnel on an underlay network.Multi-site L2 extension, isolated tenants across data centres
EVPNVXLAN + BGP control plane.Routed L3 fabric across clusters

Creating zones, VNets, subnets (GUI)

  1. Datacenter → SDN → Zones → Create: pick the zone type, set the bridge (for VLAN zones), MTU.
  2. Datacenter → SDN → VNet → Create: choose the zone, set the tag (VLAN ID for VLAN zones), alias.
  3. Datacenter → SDN → Subnets → Create: choose the VNet, set CIDR, gateway, optional SNAT, DHCP.

Apply changes from Datacenter → SDN → SDN (the main SDN overview panel) — pending changes are atomic.

Pending, dry-run, rollback and the global lock

The staging model gives you four operations, and knowing all four turns an SDN change from something you hope works into something you can inspect first and undo afterwards.

Read-only / Safesee exactly what an apply would change
pvesh get /cluster/sdn/dry-run --output-format yaml

# every object, showing both pending and running state
pvesh get /cluster/sdn/zones --pending 1 --output-format yaml
pvesh get /cluster/sdn/vnets --pending 1 --output-format yaml
Cluster-wide riskdiscard everything pending
pvesh create /cluster/sdn/rollback

There is also a global lock. pvesh create /cluster/sdn/lock acquires it and returns a token; every subsequent write takes that token as --lock-token, and pvesh delete /cluster/sdn/lock releases it. Its purpose is to stop two operators staging changes into the same pending configuration at the same time — which matters more than it sounds, because the apply is all-or-nothing and carries whatever anyone else staged.

The configuration itself lives in /etc/pve/sdn, which is pmxcfs — so it is replicated to every node and read-only when the cluster loses quorum. An SDN apply is therefore one of the operations that fails during a quorum incident even though the node you are on is healthy.

CLI walkthrough

Note the API root: SDN lives under /cluster/sdn, and subnets are nested under their VNet.

pvesh get /cluster/sdn/zones --output-format yaml
pvesh get /cluster/sdn/vnets --output-format yaml
pvesh get /cluster/sdn/vnets/web/subnets --output-format yaml
pvesh create /cluster/sdn/zones --zone corp --type vlan --bridge vmbr0 --mtu 1500
pvesh create /cluster/sdn/vnets --vnet web --zone corp --tag 100 --alias "Web tier"
pvesh create /cluster/sdn/vnets/web/subnets \
  --type subnet --subnet 192.0.2.0/24 --gateway 192.0.2.1 --snat 1

Applying is a PUT on /cluster/sdn itself — described in the API as “Apply sdn controller changes && reload” — not a separate apply endpoint:

pvesh set /cluster/sdn

Attaching a VM to a VNet

Once a VNet exists, attaching a VM is the same as attaching to a bridge: pick the VNet name in the VM NIC configuration.

ip -br link show | grep -E 'vnet|br-'

IPAM and DHCP

IPAM (IP Address Management) and DHCP are in tech preview as of PVE 9.2. The IPAM plugin tracks which IPs are allocated. The DHCP option requires installing dnsmasq:

apt install -y dnsmasq && systemctl disable --now dnsmasq

DHCP ranges are configured per subnet. Use with care in production — the tech-preview status means the implementation may change.

Production considerations

Common mistakes

  • Creating a VXLAN zone without a routable underlay between peer IPs.
  • Forgetting to apply pending changes; thinking the configuration has been pushed.
  • Applying without running the dry-run. The apply carries every pending change in the cluster, including ones you did not make.
  • Assuming IPAM and DHCP are just configuration. Both are documented as tech preview; the IPAM and DNS lesson covers what that costs.
  • Mixing SDN-managed VNets and hand-crafted bridges on the same uplink, producing confused routing.
  • Assuming IPAM/DHCP is production-grade.

Key takeaways

  • SDN has three layers: zone, VNet, subnet.
  • Choose the zone type by topology (Simple / VLAN / QinQ / VXLAN / EVPN).
  • Apply changes atomically from the SDN overview panel — and read pvesh get /cluster/sdn/dry-run first, because the apply carries everyone’s pending changes.
  • pvesh create /cluster/sdn/rollback discards the pending configuration; the global lock at /cluster/sdn/lock stops two operators staging into it at once.
  • SDN configuration lives in /etc/pve/sdn, so it is replicated and becomes read-only when the cluster loses quorum.

Knowledge check

Knowledge check · 3 questions

  1. Q1. Which SDN zone type creates an isolated bridge with no external uplink?

  2. Q2. SDN changes are applied incrementally as you save each section.

  3. Q3. Which package must be installed to enable DHCP integration with SDN IPAM?

Passing score: 75%. Answers are checked in this browser.