2. Network and edge
Two networks to build: an SDN fabric for tenant private networks, and a shared public segment carrying routed public addresses.
Decide the address plan first
Section titled “Decide the address plan first”Write these down before creating anything. Renumbering an EVPN fabric later is a project, not a change.
| Decision | Guidance |
|---|---|
| Tenant address pool | A large private range that overlaps nothing in your datacentre. One /20 per private network, one /24 per subnet |
| Public block | Routed to your edge’s WAN address. Confirm with your upstream that the whole block is routed, not bridged |
| Underlay | Addresses the hypervisors use to carry VXLAN between themselves |
VLAN or EVPN
Section titled “VLAN or EVPN”| VLAN mode | EVPN mode | |
|---|---|---|
| Segment | A tagged VLAN per subnet | A VXLAN VNet per subnet |
| Isolation | VLAN separation | A VRF per private network |
| Physical switch | Must trunk every VLAN you use | Carries only the underlay |
| Scale | Bounded by the VLAN identifier space | Effectively unbounded |
| Complexity | Lower | Higher — needs a working underlay and routing daemon |
EVPN is the better model for a multi-tenant platform and is what production uses. VLAN mode is a legitimate choice for a small installation with a switch you already control.
EVPN fabric
Section titled “EVPN fabric”Create one controller for the cluster, peering the nodes:
pvesh create /cluster/sdn/controllers --controller z9evpn --type evpn \ --asn 65000 --peers <node1-underlay>,<node2-underlay>,<node3-underlay>Then, per private network, one zone and its VNets:
pvesh create /cluster/sdn/zones --zone z9v<N> --type evpn --controller z9evpn \ --vrf-vxlan <vrf-vni> --mtu 1450
pvesh create /cluster/sdn/vnets --vnet z9v<N>a0 --zone z9v<N> --tag <l2-vni>pvesh create /cluster/sdn/vnets/z9v<N>a0/subnets \ --subnet <10.x.y.0/24> --type subnet --gateway <10.x.y.1>MTU 1450 is not optional. The VXLAN header costs 50 bytes. Leaving the default produces a network where small packets work and large ones vanish — the hardest class of problem to diagnose.
Verify the underlay can actually carry it, between two nodes:
ping -M do -s 8972 -c3 <other-node-underlay>Shared public segment
Section titled “Shared public segment”Public addresses are routed to virtual machines directly, with no NAT, so every public interface shares one layer-2 segment on a VLAN:
pvesh create /cluster/sdn/zones --type vlan --zone z9vlan --bridge vmbr0pvesh create /cluster/sdn/vnets --vnet z9pub --zone z9vlan --tag <vlan-id>No SDN subnet is defined here. The gateway for that block lives on your edge router; Proxmox is not doing address management for public addresses.
Applying
Section titled “Applying”pvesh set /cluster/sdnApplying SDN configuration is supposed to be hitless. Run a continuous ping to an existing production machine through the apply and measure it rather than trusting it.
pvesh get /cluster/sdn/zones --output-format jsonsystemctl status frr --no-pager | head -3The edge
Section titled “The edge”Your edge router owns the public block and the default route for tenant traffic. What it must do:
- Route the public block toward the region, without translating it. A public address is configured on the virtual machine itself — that is the product’s model.
- Carry the public segment to the hypervisors on the VLAN you chose.
- Apply north-south policy you want at the edge, above per-machine firewalls.
zone9 programs only what it owns through the edge adapter — address objects and the policy entries tied to them. Your own rules are left alone.
Two operating modes are available for the adapter, and starting in the safe one is recommended: an analysis mode that only reads and refuses writes, and an apply mode.
Verify before moving on
Section titled “Verify before moving on”- A test machine on a tenant VNet reaches another machine on the same VNet.
- A machine with a public address is reachable from the internet, not just from your office.
- The two are correct at the same time — a public address on a machine that also has a private interface must not break either.