Proxmox Networking Setup: From a Simple Bridge to LACP Bonds

Updated on Oct 12, 2026
Mathew M
18 MINS READ
Table of Contents
Proxmox Networking Guide

A good network layout on a bare-metal Proxmox node does three things. It keeps the management network private, it keeps guest traffic on its own VLANs, and it survives a cable or switch port failure. In this guide, you will learn to build that layout step by step. We use one Proxmox VLAN bridge as the base, add active-backup or LACP bonds, and move the management IP to its own network.

What You Will Build

This guide is tested for Proxmox VE 9.2. The steps also work on Proxmox VE 8.x, because the network file format is the same. You will learn these parts:

  • How vmbr bridges work, and how Proxmox uses /etc/network/interfaces.
  • How to make a VLAN-aware bridge, and how to use tagged and untagged VM networks.
  • How to build an active-backup bond and an LACP bond.
  • How to move the management IP to its own VLAN or its own network card.
  • How to change the network remotely and roll back automatically if something breaks.

We use this plan for all examples. Change the numbers to match your network:

VLAN ID Name Subnet Used for
10 Management 172.16.10.0/24 Proxmox web UI, SSH, cluster traffic
20 Servers 172.16.20.0/24 Normal VMs and containers
30 DMZ 172.16.30.0/24 Public-facing services
40 Backup 172.16.40.0/24 Backup and storage traffic

Interface names such as eno1 and eno2 are examples. Run ip -br link on your server to see your real names.

Requirements and Safety Rules

Before you start Proxmox networking setup, check these items:

  • A bare-metal Proxmox VE node with root access.
  • At least one network card. Two or more cards are needed for bonding.
  • Out-of-band access: IPMI, iDRAC, iLO, or the KVM console from your provider.
  • A switch or provider network that supports VLAN tags (802.1Q) if you want VLANs.
  • A switch that supports LACP (802.3ad) if you want an LACP bond.

Use the following command to check your version and your network tool:

Bash
pveversiondpkg -l ifupdown2 | grep ifupdown2

Proxmox uses ifupdown2, so you can apply network changes live without a reboot. If ifupdown2 is missing, install it with the command below:

Bash
apt updateapt install ifupdown2

Warning: Do not use ifdown vmbr0 and ifup vmbr0 on a running node. ifdown on a bridge cuts all guest traffic, and ifup does not reconnect those guests later. Use ifreload -a instead.

If you want to host this setup on a server with full network control, you can use a dedicated server with a private network port from PerLod.

How Proxmox Network Files Work

Proxmox keeps all its network settings in the /etc/network/interfaces file. When you change the network in the web UI, Proxmox does not write to this file at once. It writes to a staging file named /etc/network/interfaces.new. When you click Apply Configuration, Proxmox moves the changes into the real file and applies them live. If you edit the real file manually, you must apply your changes with:

Bash
ifreload -a

Proxmox uses these names:

  • Physical cards: eno1, enp3s0f1, and similar.
  • Bridges: vmbr0, vmbr1, and so on.
  • Bonds: bond0, bond1, and so on.
  • VLAN on a device: the device name plus a dot and the VLAN ID, such as bond0.10 or vmbr0.10.

Keep Your NIC Names the Same After Upgrades

A big upgrade or a new kernel can change the name of a network card. For example, enp3s0 can become enp4s0. Your bridge or bond then points to a card that no longer exists, and the server loses its network.

Proxmox has a tool that locks the names, so they stay the same after upgrades. Do this before you build bridges and bonds:

Bash
pve-network-interface-pinning generate

This creates .link files in /usr/local/lib/systemd/network and updates /etc/network/interfaces to use the new names. Also, it writes .new files first, so you can compare them:

Bash
diff -y /etc/network/interfaces /etc/network/interfaces.new

A reboot is needed for the new names to work. Do this only when you can reach the console.

Step 1: Back Up and Prepare Rollback

A wrong network change can lock you out of a remote server in seconds. This step protects you from that. You must save a copy of the network file, create a rollback script, and start a timer that restores the old setup by itself. Do it before every network change.

Install tmux

First, you can run your work inside tmux. If your SSH session drops, your commands keep running, and you can log in again and continue:

Bash
apt install tmuxtmux new -s net

If you lose the connection, log in again and run tmux attach -t net.

Back Up Your Network File

Before you change anything, you must save a copy of your working network file. If something breaks, this is the file you will restore:

Bash
mkdir -p /root/net-backupcp -a /etc/network/interfaces /root/net-backup/interfaces.goodcp -a /etc/network/interfaces /root/net-backup/interfaces.$(date +%F-%H%M)

Build an Automatic Network Restore Script

This small script puts your saved network file back and reloads the network. The safety timer in the next step runs it for you, and you can also run it manually from the console.

Bash
cat > /root/net-rollback.sh <<'EOF'#!/bin/shcp /root/net-backup/interfaces.good /etc/network/interfacesifreload -aEOFchmod +x /root/net-rollback.sh

Start the Safety Timer

Before you apply a network change, you must start a timer. If you lose access, the server runs the rollback script by itself after 5 minutes. If the change works, you cancel the timer.

Bash
systemd-run --unit=net-rollback --on-active=5m /root/net-rollback.shsystemctl list-timers net-rollback.timer

Safe Network Change Checklist

You must use these steps for every network change in this guide:

  1. Save the copy.
  2. Edit /etc/network/interfaces.
  3. Check the syntax without applying it: ifreload -s -a
  4. Start the safety timer: systemd-run --unit=net-rollback --on-active=5m /root/net-rollback.sh
  5. Apply the change: ifreload -a
  6. Open a new SSH session to the new address and test the web UI on port 8006.
  7. If it works, cancel the timer and save the new file as the good copy:
Bash
systemctl stop net-rollback.timercp -a /etc/network/interfaces /root/net-backup/interfaces.good

If it does not work, do nothing. Wait for the timer, or run /root/net-rollback.sh from the console.

If a change breaks the network so much that the timer cannot run, use the IPMI or KVM console and restore the file manually:

Bash
cp /root/net-backup/interfaces.good /etc/network/interfacesifreload -a

If nothing else works, reboot the server. It will start with the file you restored.

Topology 1: Single NIC with a Simple Linux Bridge

This is the default Proxmox layout. One card connects to one bridge, and the VMs act like they are plugged into the same switch as the host. It is the simplest setup, and a good starting point for a new server. Open the file with:

Bash
nano /etc/network/interfaces
Bash
auto loiface lo inet loopback iface eno1 inet manual auto vmbr0iface vmbr0 inet static        address 198.51.100.10/24        gateway 198.51.100.1        bridge-ports eno1        bridge-stp off        bridge-fd 0 source /etc/network/interfaces.d/*

What the main lines mean:

  • bridge-ports eno1 connects the physical card to the bridge.
  • bridge-stp off turns off spanning tree on the bridge. It is not needed on a simple host.
  • bridge-fd 0 removes the forwarding delay, so ports come up fast.
  • The host IP and gateway are on vmbr0, not on eno1.

Note: Many hosting providers block extra MAC addresses on one port. If your VMs get no network with this layout, use the routed layout below.

Topology 2: Routed Setup for Provider Networks

You can use this layout if your provider gives you one main IP and an extra IP block for VMs, and it blocks bridged traffic. Packets from VMs go through the host, so the provider only sees one MAC address.

Bash
auto loiface lo inet loopback auto eno1iface eno1 inet static        address 198.51.100.5/29        gateway 198.51.100.1        post-up echo 1 > /proc/sys/net/ipv4/ip_forward        post-up echo 1 > /proc/sys/net/ipv4/conf/eno1/proxy_arp auto vmbr0iface vmbr0 inet static        address 203.0.113.17/28        bridge-ports none        bridge-stp off        bridge-fd 0 source /etc/network/interfaces.d/*

Here, the host owns 198.51.100.5, and your VMs use addresses from 203.0.113.16/28 with 203.0.113.17 as their gateway. Replace both blocks with the real addresses your provider gave you. 

Topology 3: VLAN-Aware Bridge on One NIC

In this layout, one network card carries many VLANs. The host management IP sits on VLAN 10, and your VMs use VLAN 20, 30, and 40. The bridge itself has no IP, so the host talks only on the management VLAN. Your switch port must allow all four VLANs.

Bash
auto loiface lo inet loopback iface eno1 inet manual auto vmbr0iface vmbr0 inet manual        bridge-ports eno1        bridge-stp off        bridge-fd 0        bridge-vlan-aware yes        bridge-vids 2-4094 auto vmbr0.10iface vmbr0.10 inet static        address 172.16.10.2/24        gateway 172.16.10.1 source /etc/network/interfaces.d/*

Note: Before you apply it, make sure your current SSH session can survive. If your switch does not carry VLAN 10 yet, the node goes offline. Use the rollback timer from Step 1, and test with the safe change routine.

After you apply the change, check it with the commands below:

Bash
ip -br addr show vmbr0.10bridge vlan show

You should see the IP 172.16.10.2/24 on vmbr0.10, and VLAN 10 listed on eno1 and vmbr0.

If you change the management IP, also update /etc/hosts so the node name points to the new IP. Open the file and fix the line for your hostname:

Bash
nano /etc/hostshostname --ip-address

The second command should show the new management IP. Do not change the IP of a node that is already in a cluster without a plan, because the cluster files also use it.

Tagged VM Networks

With a VLAN-aware bridge, you must set the VLAN tag on the VM network card. Then, the VM joins that VLAN, with no extra bridge needed. You can set the tag in the web UI or CLI.

In the Web UI:

  1. Select the VM, and open Hardware.
  2. Select the Network Device, and click Edit.
  3. Set Bridge to vmbr0.
  4. Set VLAN Tag to 20.
  5. Click OK.

From the Command Line:

First, check the current setting so you keep the same MAC address:

Bash
qm config 100 | grep net0

Then, you can set the tag. Use the same MAC address from the output above:

Bash
qm set 100 --net0 virtio=BC:24:11:AA:BB:CC,bridge=vmbr0,tag=20

For a container, use pct instead of qm. The tag works the same way:

Bash
pct set 200 --net0 name=eth0,bridge=vmbr0,tag=20,ip=172.16.20.50/24,gw=172.16.20.1

Multiple VLANs on One VM Network Card

Some VMs, such as a router or firewall VM, need many VLANs on one network card. You can use trunks and handle the tags inside the VM:

Bash
qm set 101 --net0 'virtio=BC:24:11:DD:EE:FF,bridge=vmbr0,trunks=20;30;40'

Remember to put the value in quotes, because the semicolon has a special meaning in the shell.

Untagged VM Networks

If you do not set a VLAN tag, the VM uses the default VLAN of the bridge. This is VLAN 1 by default. Your switch port must use the same default VLAN:

Bash
qm set 102 --net0 virtio=BC:24:11:11:22:33,bridge=vmbr0

Use untagged networks only when you have a clear reason, for example, when your provider gives you one public network without tags. For all other guests, set a tag. It makes the network easy to see in the VM config and stops mix-ups.

If the host IP is on vmbr0 and you turn on VLAN awareness, the host stays on the default VLAN. This works, but the management network is shared with every untagged guest. The next sections show a better way.

Step 2: Proxmox Network Bonding Basics

A bond joins two or more network cards into one logical card. It protects you from a cable, card, or switch port failure. It can also add speed. The most used modes include:

Mode Name in file Needs switch setup Use for
Active-backup active-backup No Simple failover. Works with any switch.
LACP 802.3ad Yes Failover plus more speed with many flows.

If your switch supports LACP, use 802.3ad. If not, use active-backup. Other modes, such as balance-rr or balance-xor, can cause problems and are not the best choice for a production node.

Topology 4: Active-Backup Bond with VLAN-Aware Bridge

You can use this layout when you want failover, but your switch has no LACP, or when you connect the two cables to two different switches.

Bash
auto loiface lo inet loopback iface eno1 inet manual iface eno2 inet manual auto bond0iface bond0 inet manual        bond-slaves eno1 eno2        bond-miimon 100        bond-mode active-backup        bond-primary eno1 auto vmbr0iface vmbr0 inet manual        bridge-ports bond0        bridge-stp off        bridge-fd 0        bridge-vlan-aware yes        bridge-vids 2-4094 auto vmbr0.10iface vmbr0.10 inet static        address 172.16.10.2/24        gateway 172.16.10.1 source /etc/network/interfaces.d/*
  • bond-slaves eno1 eno2 lists the cards in the bond.
  • bond-miimon 100 checks the link every 100 ms.
  • bond-mode active-backup uses one card at a time. The other waits.
  • bond-primary eno1 sets the preferred card. Traffic goes back to it when it recovers.

Both switch ports must carry the same VLANs. No LACP setup is needed on the switch. Check the bond with:

Bash
cat /proc/net/bonding/bond0

Look for Bonding Mode: fault-tolerance (active-backup), Currently Active Slave: eno1, and MII Status: up for both cards.

Topology 5: LACP Bond with VLAN-Aware Bridge

LACP uses both cards at the same time and fails over if one stops. The switch must be set up as a port-channel with LACP on. If the switch side is not ready, the bond will not work as expected.

Bash
auto loiface lo inet loopback iface eno1 inet manual iface eno2 inet manual auto bond0iface bond0 inet manual        bond-slaves eno1 eno2        bond-miimon 100        bond-mode 802.3ad        bond-xmit-hash-policy layer3+4        bond-lacp-rate fast auto vmbr0iface vmbr0 inet manual        bridge-ports bond0        bridge-stp off        bridge-fd 0        bridge-vlan-aware yes        bridge-vids 2-4094 auto vmbr0.10iface vmbr0.10 inet static        address 172.16.10.2/24        gateway 172.16.10.1 source /etc/network/interfaces.d/*
  • bond-mode 802.3ad is LACP.
  • bond-xmit-hash-policy layer3+4 picks the card for each flow using IP addresses and ports. This spreads traffic better than layer2.
  • bond-lacp-rate fast sends LACP messages every second instead of every 30 seconds, so a failed link is found faster.

Switch Checklist for LACP

LACP works only when both sides are set up. Your server and your switch must both use LACP. Use this checklist on the switch side, with your switch's own commands. If you rent a dedicated server, ask your provider to do these steps.

  1. Create a port-channel (LAG) with the two ports.
  2. Set the mode to LACP (active).
  3. Make the port-channel a trunk and allow VLANs 10, 20, 30, and 40.
  4. Set the native VLAN to match your plan.
  5. Use fast LACP rate on the switch too.

Check the LACP Bond

After you apply the bond, check that LACP really works with the command below:

Bash
cat /proc/net/bonding/bond0

Look for these signs of a healthy bond:

  • Bonding Mode: IEEE 802.3ad Dynamic link aggregation
  • Both cards show MII Status: up.
  • The Partner Mac Address is not 00:00:00:00:00:00.
  • Both cards show the same Aggregator ID.

If the partner MAC is all zeros, the switch is not sending LACP messages. Check the switch port-channel.

One limit to remember: LACP does not give one single connection more than one card of speed. It spreads many different flows across the cards.

How to Isolate the Proxmox Management Network

Management traffic is the web UI (port 8006), SSH (port 22), and cluster traffic. You must keep it away from your guest network, so a VM can never reach it. There are three levels of isolation, including a separate VLAN, a separate network card, and firewall rules. Pick the one that fits your server.

Level 1: Management on Its Own VLAN

This is what Topology 3, 4, and 5 do. The host IP sits on vmbr0.10, and guests use other VLANs. It is simple and needs no extra card.

The limit is that a Proxmox VLAN bridge lets a VM use any tag you give it. A user who can edit a VM network card could set tag 10 and land in the management network. So limit who has rights to change VM network devices, and never give VLAN 10 to a guest.

Level 2: Management on a Separate Network Card

This is the strongest layout. One card carries only management. A bond carries all guest traffic. No guest port touches the management network.

Bash
auto loiface lo inet loopback iface eno1 inet manual iface eno2 inet manual iface eno3 inet manual auto vmbr1iface vmbr1 inet static        address 172.16.10.2/24        gateway 172.16.10.1        bridge-ports eno1        bridge-stp off        bridge-fd 0#Management only auto bond0iface bond0 inet manual        bond-slaves eno2 eno3        bond-miimon 100        bond-mode 802.3ad        bond-xmit-hash-policy layer3+4        bond-lacp-rate fast#Guest uplink auto vmbr0iface vmbr0 inet manual        bridge-ports bond0        bridge-stp off        bridge-fd 0        bridge-vlan-aware yes        bridge-vids 2-4094#Guest bridge source /etc/network/interfaces.d/*

The host has an IP only on vmbr1. The guest bridge vmbr0 has no host IP at all, so the host does not answer on the guest network. Never attach a VM to vmbr1, unless it is a management tool such as a jump host.

Level 3: Firewall Rules for Management Ports

Firewall rules add a second lock to your management network. With them, only trusted IPs can reach the web UI and SSH, even if the network is shared. Keep one SSH session open while you set this up, so you can undo a mistake.

First, open the cluster firewall file with the command below:

Bash
nano /etc/pve/firewall/cluster.fw

Add the management network and your admin IP to the special management IP set. Then, turn on the firewall:

Bash
[OPTIONS]enable: 1 [IPSET management]172.16.10.0/24203.0.113.50

Replace 203.0.113.50 with your own admin or VPN IP. Hosts in the management set can reach the web UI, VNC, SPICE, and SSH. When the firewall is on, other traffic to the host is blocked by default, with some exceptions for the local network and cluster traffic. Check the status with:

Bash
pve-firewall status

Start the rollback timer before you turn the firewall on. If the firewall locks you out, you can stop it from the console:

Bash
pve-firewall stop

For a cluster, keep Corosync on its own network, ideally with a separate network card. It can switch between networks itself, so a bond is not needed.

If you use LACP, set bond-lacp-rate fast on the node and enable fast LACP on the switch. The slow setting can take about 90 seconds to detect a failure, which is too long for HA services. Avoid balance-rr, balance-xor, balance-tlb, and balance-alb for Corosync.

Apply and Test Your Network Setup

At this point, you can use the safe change routine from Step 1 to apply your settings, then open a new SSH session. Check the host connection, VLANs, and bond before you cancel the rollback timer.

Bash
ifreload -s -asystemd-run --unit=net-rollback --on-active=5m /root/net-rollback.shifreload -a

Open a new SSH session. Then, run these checks:

Bash
ip -br addrip -br link show master vmbr0bridge vlan showcat /proc/net/bonding/bond0ping -c 3 172.16.10.1ss -tlnp | grep -E ':(22|8006)\s'

Then, you can start a VM on VLAN 20 and ping its gateway. To test failover, keep the ping running and unplug one bond cable or disable its switch port. The connection should recover with only a few lost packets.

When all tests pass, cancel the timer and save the file:

Bash
systemctl stop net-rollback.timercp -a /etc/network/interfaces /root/net-backup/interfaces.good

Troubleshoot Proxmox Networking

If the host or a VM loses its connection, you can use these checks to find the problem. Start with the VLAN settings, switch ports, and bond status.

  • No network after applying: Wait for the rollback timer, or run /root/net-rollback.sh from the console.
  • VM on a VLAN has no network: Check that the switch trunk allows this VLAN, and run bridge vlan show to see if the bridge and port carry it.
  • Host unreachable after adding vmbr0.10: The switch port may not carry VLAN 10, or the native VLAN is wrong.
  • LACP shows one active link: The switch port-channel is missing or not in LACP mode. Check the partner MAC in /proc/net/bonding/bond0.
  • Provider cuts the port after using bridges: The provider blocks extra MACs. Use the routed layout.
  • Card names changed after an upgrade: Fix the names in /etc/network/interfaces, and pin the names as shown earlier.
  • Web UI works but cluster is unstable: Move Corosync to its own network.

When Your Network Needs Proxmox SDN

Everything in this guide is for one node and one site. A VLAN-aware bridge is the best tool for that job.

If you need to link guests across several nodes or data centers, you need an overlay network. For that, you can read the multi-site Proxmox SDN guide with WireGuard fabric. You can keep the host management network from this guide on its own VLAN or card, and build SDN on top of it.

Conclusion

A clear Proxmox network setup keeps management and guest traffic separate. You must choose the right bridge and bond for your server, check the switch settings, and test before moving workloads.

Always back up your network file and use a rollback timer when making remote changes.

We hope you enjoy this guide. For more information, you can check the Official Proxmox VE Network Configuration.

It is a Linux bridge that reads VLAN tags. It lets each VM use its own VLAN with one setting.

A tagged VM uses a VLAN number you set. An untagged VM uses the native VLAN, which is VLAN 1 by default.

Put it on a VLAN interface of the bridge, such as vmbr0.10. The bridge itself has no IP.

Run ifreload -a. Do not use ifdown and ifup on a bridge.