If you manage a Proxmox cluster with multiple nodes, you have
probably written manual bridge configs on every host. Need to
add a new isolated network? SSH into node1, edit
/etc/network/interfaces, apply it. Node2? Same. Node3? Same.
Now keep them in sync when you add a fourth host. That is brittle,
error-prone, and doesn’t scale.
Proxmox SDN (Software-Defined Networking) solves this. Introduced as a core feature in Proxmox VE 8.1, SDN lets you define virtual networks — zones, VNets, subnets — once at the datacenter level. The configuration is replicated across your cluster automatically and applied on every node. Need a new isolated network for your IoT containers? Create a VNet in the web UI, apply, and bridge it to any VM or CT on any node. No SSH required.
This guide covers deploying Proxmox SDN in a homelab cluster, choosing the right zone type, creating VNets with subnets and DHCP, and assigning them to virtual guests.
Why Bother with SDN in a Homelab?
The traditional approach — Linux bridges with VLAN tagging — works fine for a single node. With a three-node cluster, it is annoying but manageable. At five nodes and a dozen networks, the overhead becomes real.
SDN replaces per-node manual configuration with a single source of truth in the Proxmox cluster filesystem. The benefits:
- Single point of management — create/edit/delete networks from the web UI, no CLI required on individual nodes
- Automatic distribution — config syncs via
pmxcfs(the Proxmox cluster file system) and is applied with one click - Self-service isolation — spin up a new VNet for a project or tenant without touching physical switch VLANs
- DHCP integration — built-in dnsmasq gives VMs IPs in their VNet subnet automatically
- Consistency — no drift between nodes, no forgotten bridges
If you run even two Proxmox nodes with more than one isolated network, SDN saves you time. With three or more, it is a game-changer.
Prerequisites
- Proxmox VE 8.1+ — SDN is installed by default on fresh installs. On upgrades from 7.x, you need the package:
|
|
-
Cluster — SDN works at the datacenter level across nodes. A single-node cluster works fine too; you still get centralized management.
-
ifupdown2— Required by SDN. Included by default since Proxmox 7. Check with:
|
|
If absent, install it before proceeding:
|
|
- Verify the include line — Ensure
/etc/network/interfacesends with:
|
|
This line tells ifupdown2 to load SDN-generated configs. Add it
if missing. Do this on every node.
Zone Types — Picking the Right One
Proxmox SDN offers four zone types. Each uses a different transport technology:
| Zone Type | Transport | Best For |
|---|---|---|
| Simple | Local bridge (no overlay) | Single node, test/development |
| VLAN | 802.1Q tagged | Existing physical VLAN infrastructure |
| VXLAN | UDP overlay (port 4789) | Multi-node clusters, no switch VLAN config |
| EVPN | VXLAN + BGP routing | Multi-site, inter-VNet routing |
For most homelabs with 2-4 nodes, VXLAN is the sweet spot. It creates overlay networks over your existing management or storage network — no physical switch VLAN provisioning needed. Each VNet gets its own VXLAN Network Identifier (VNI), giving you up to 16 million isolated networks.
Stick with Simple if you only have one Proxmox node. Use VLAN if your physical switch already handles VLANs and you want SDN to manage the bridge side. Use VXLAN for everything else.
Step 1 — Creating a VXLAN Zone
Navigate to Datacenter > SDN > Zones and click Create.
Zone ID: lab-zone
Type: VXLAN
Peers: 10.0.20.30, 10.0.20.31, 10.0.20.32
MTU: 1450
Nodes: all
The Peers field lists the IP addresses of every cluster node on your underlay network. These are the VTEP (VXLAN Tunnel Endpoint) addresses — the IPs the nodes use to reach each other for overlay traffic. Typically your management network IPs.
MTU 1450 is critical. VXLAN overhead is 50 bytes per packet (outer IP + UDP + VXLAN header). With a physical MTU of 1500, payload MTU drops to 1450. If your switch supports jumbo frames (MTU 9000), set Peers MTU to 8950.
Click OK to create the zone.
Step 2 — Creating VNets and Subnets
Now create isolated virtual networks inside the zone. Navigate to Datacenter > SDN > VNets and click Create.
VNet for Production Containers
VNet ID: vnet-prod
Zone: lab-zone
Tag: 100
The Tag is the VXLAN VNI — a unique identifier for this overlay network. Each VNet in a VXLAN zone needs its own tag.
After creating the VNet, click on it and add a subnet:
Subnet: 10.100.1.0/24
Gateway: 10.100.1.1
SNAT: Enabled
DHCP Range: 10.100.1.100 - 10.100.1.200
DNS Server: 10.0.20.1
SNAT enables masquerading traffic from this VNet to external networks (like the internet). Without it, guests can talk to each other across VXLAN but cannot reach the outside world.
VNet for Development
VNet ID: vnet-dev
Zone: lab-zone
Tag: 200
Subnet: 10.100.2.0/24
Gateway: 10.100.2.1
SNAT: Enabled
DHCP Range: 10.100.2.100 - 10.100.2.200
VNet for IoT
VNet ID: vnet-iot
Zone: lab-zone
Tag: 300
Subnet: 10.100.3.0/24
Gateway: 10.100.3.1
SNAT: Disabled
IoT networks are intentionally left without SNAT and without DHCP — guests get static IPs and have no internet access. If you need selective internet access, enable SNAT and apply firewall rules instead.
Step 3 — Applying the Configuration
In Datacenter > SDN, you will see a banner saying “Pending changes”. Click the Apply button.
SDN applies changes atomically. It reads the config from
/etc/pve/sdn/, generates ifupdown2 config snippets, and pushes
them to all nodes. On each node, it creates bridges:
vnets-bridge-vnet-prodon all nodesvnets-bridge-vnet-devon all nodesvnets-bridge-vnet-ioton all nodes
Verify the bridges are up:
|
|
If you see the bridges and their VXLAN tunnel interfaces, SDN is active. You can also check:
|
|
Step 4 — Assigning VNets to VMs and Containers
VNets appear as regular bridges in the network device dropdown. A VM gets a virtual NIC plugged into the bridge, just like any Linux bridge network.
Via Web UI
For a VM: go to Hardware > Add > Network Device, select
vnet-prod as the bridge, VirtIO model.
For an LXC container: go to Network > Add, select vnet-prod,
set IPv4 to DHCP.
Via CLI
|
|
When the guest boots, it receives an IP from the dnsmasq DHCP server running for that subnet. Containers on different VNets cannot communicate with each other — they are fully isolated at layer 2.
Step 5 — DHCP Integration with dnsmasq
For DHCP to work, you need dnsmasq installed on every node
that hosts guests on a VNet with DHCP enabled:
|
|
Proxmox SDN manages its own dnsmasq instances per subnet. The system-level dnsmasq must be disabled to avoid port conflicts.
The DHCP server automatically:
- Assigns IPs from the configured range
- Sets the gateway and DNS server you specified
- Registers hostnames (guest hostname → IP) for DNS resolution within the VNet
You can check active leases:
|
|
Step 6 — Firewalling VNet Traffic
SDN VNets are isolated by default — layer 2 traffic does not cross VNet boundaries. However, layer 3 traffic (routed through SNAT or through a router VM) can mix. Add Proxmox firewall rules at the datacenter or node level to control inter-VNet access.
Datacenter Firewall Rules
Navigate to Datacenter > Firewall > Rules and add:
| Action | Type | Source | Dest | Comment |
|---|---|---|---|---|
| ACCEPT | IP | vnet-prod | 10.100.1.0/24 | Allow prod self-traffic |
| DROP | IP | vnet-prod | 10.100.2.0/24 | Block prod→dev |
| ACCEPT | IP | vnet-dev | 10.100.2.0/24 | Allow dev self-traffic |
| DROP | IP | 10.100.3.0/24 | any | Block IoT→all |
| ACCEPT | IP | 10.100.3.0/24 | 10.100.3.0/24 | Allow IoT self-traffic |
The order matters — Proxmox firewall uses first-match semantics. Place specific allow rules before broad drops.
Enable Firewall on VMs
Guest-level firewall rules only apply when the firewall is enabled on the VM or CT. Via CLI:
|
|
Then define rules in /etc/pve/firewall/<VMID>.fw or via the
VM’s Firewall panel in the web UI.
Transitioning from Manual Bridges
If you are migrating existing VMs from manually created bridges to SDN VNets, the process is straightforward:
- Create the VNet in SDN → Apply
- Shut down the VM
- Change its network device from the old bridge to the new VNet
- Start the VM
The VM keeps its IP if you assign the same subnet. For LXC containers using DHCP, the dnsmasq lease will assign the same IP because dnsmasq persists leases to disk.
When all guests are migrated, delete the old manual bridge config
from /etc/network/interfaces on each node.
Troubleshooting Common Issues
Bridges not appearing after Apply
Check the SDN status:
|
|
If version is -1 (not applied) or stale, re-apply from the
web UI. Also verify ifupdown2 is installed:
|
|
If the bridge exists but has no VXLAN link, check MTU. An MTU mismatch between nodes causes silent packet drops. Set all physical interfaces and the VXLAN zone to the same MTU.
Guests cannot reach the internet
Verify SNAT is enabled in the subnet configuration. Without SNAT, VNet traffic has no route to external networks. If SNAT is on, check the default gateway in the VNet matches what guests receive via DHCP.
DHCP not assigning IPs
- Ensure
dnsmasqis installed and the systemd service is disabled on every node hosting guests - Check the dnsmasq lease file for errors
- Verify the DHCP range does not overlap with the gateway IP or any static assignments
- Confirm the VNet is applied (check
.running-config)
VXLAN performance is slow
VXLAN adds 50 bytes per packet, which can cause fragmentation or MTU issues. Set the VXLAN zone MTU to 1450 (or 8950 with jumbo frames) and ensure guests also use the reduced MTU:
|
|
For Docker hosts on a VNet, set the MTU in daemon.json:
|
|
SDN vs Traditional Bridges — A Comparison
| Aspect | Traditional Bridges | Proxmox SDN |
|---|---|---|
| Config location | Every node’s /etc/network/interfaces |
Single datacenter UI |
| Applying changes | Per-node SSH, ifreload -a |
One-click Apply |
| Adding a node | Copy all bridge configs | Add IP to Peers, re-Apply |
| DHCP | External (Pi-hole, router) | Built-in dnsmasq per subnet |
| Network isolation | Manual bridge per network | VNet per network |
| Cross-node overlay | Manual VXLAN setup | Automatic VXLAN per VNet |
| Rollback | Manual copy/backup | Re-apply previous state |
When to Avoid SDN
SDN is powerful but not always the right fit:
- Single node, one or two networks — Simple bridges are less overhead and no additional service to maintain
- Very tight memory budget — Each dnsmasq instance uses a few MB. On a host with 8 GB or more, this is irrelevant
- Complex multi-site BGP routing — EVPN is still in tech preview. For multi-site routing, consider FRRouting on a VM alongside SDN
- Existing heavily customized networking — If you have complex OVS bridges, bonding, or policy routing, SDN may conflict. Test in a lab first
Proxmox SDN transforms network management from a per-node chore into a cluster-wide operation. For a three-node homelab with production, development, and IoT workloads, it eliminates the most tedious part of Proxmox administration — keeping bridge configs in sync. Define it once, apply it everywhere, and spend your time on things that actually matter.