Skip to main content
RunBook Academy

Proxmox VEIV · NetworkingLinux networking

Linux networking primer: interfaces, bridges, taps

Foundation⏱ ~18 min

What you'll learn

  • Map a guest network packet to its path through the Linux host
  • Distinguish physical NICs, VLAN subinterfaces, bonds, bridges, and tap devices
  • Inspect the network stack from the host CLI
  • Diagnose the most common "VM has no network" problems

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

Most production VM outages that look like “the VM can’t reach the database” are not VM problems — they are Linux networking problems on the host. Knowing the path a packet takes and which Linux primitive owns each step is the only way to triage effectively.

Mental model

A packet from a guest to an external host traverses several layers, each owned by a different Linux construct:

flowchart LR
  A[Guest virtio-net] --> B[tap device]
  B --> C[Linux bridge]
  C --> D[Bond or VLAN]
  D --> E[Physical NIC]
  E --> F[Switch]

Each box is a real Linux construct with state you can inspect.

The constructs

Physical NIC

The hardware device. Names like eno1, ens4, enp3s0. Managed by the kernel driver (e.g. ixgbe for Intel 10 GbE, mlx5_core for Mellanox).

ip -br link show | grep -v 'veth\|br-\|vmbr\|tap\|bond\|fwpr\|fwln\|veth'

VLAN subinterface

A tagged VLAN on a physical NIC. Names like eno1.100 (VLAN 100 on eno1). The host kernel strips or adds the 802.1Q tag at this layer.

ip -d link show | grep 'vlan proto'

Bond (LAG)

Two or more NICs aggregated. bond0 typically. Modes:

  • balance-rr (round-robin) — seldom used.
  • active-backup — one NIC active, the other on standby. Survives link loss on the active.
  • 802.3ad / LACP — requires the switch to participate; load-balancing + failover.

Linux bridge

A virtual switch inside the host. vmbr0 is the typical default. VMs are attached to it via tap devices. The bridge can be bound to a physical NIC, a bond, or nothing (an “internal” bridge for isolated VM-to-VM traffic).

Read-only / Safe
bridge link show && brctl show vmbr0 2>/dev/null || bridge link show vmbr0

Tap device

A virtual NIC that connects a QEMU process to the Linux bridge. Each VM NIC produces one tap device (e.g. tap100i0 for VM 100, NIC 0).

ip -d link show | grep -A1 'tun'

SDN VNet

A Proxmox-managed bridge equivalent. Created via SDN configuration; appears as a Linux bridge with a name you chose. VNet bridges have the same semantics as regular bridges, with the addition of SDN-level firewall and routing.

Run ip -br link on a node with the firewall enabled and guests running, and you will find interfaces nobody created: fwbr100i0, fwpr100p0, fwln100i0. They are not leftovers.

When the iptables firewall backend filters a guest interface, it cannot attach rules directly to a tap device on a bridge. So Proxmox inserts a small bridge per guest interface and a veth pair to connect it to the real bridge:

tap100i0  ->  fwbr100i0  ->  fwln100i0 <-> fwpr100p0  ->  vmbr0
 (guest)      (firewall       (veth pair, one end in each  (real
               bridge)         bridge)                      bridge)

The naming decodes cleanly: fwbr is the firewall bridge, fwln its end of the veth pair, fwpr the end plugged into the real bridge, and the numbers are the VMID and interface index.

Two things follow.

Anything that counts or enumerates bridges sees three times what you expect. A monitoring check on bridge count, a script parsing brctl show, an inventory of interfaces — all of them see the firewall scaffolding as topology.

The proxmox-firewall nftables backend does not create them. It attaches its rules differently, so a node converted to nftables has a visibly different interface list and the tap device is on the real bridge directly. That is a behaviour change to know about before the migration, not after a monitoring check starts alerting.

Read-only / Safetrace one guest's interface from tap to uplink
VMID=100

ip -br link show | grep -E "(tap|fwbr|fwln|fwpr)${VMID}"
bridge link show | grep -E "${VMID}|vmbr0"

The packet walk

Interactive · VM → Wire Packet Flow

Watch a single packet traverse each layer that Proxmox adds between a guest application and the physical network. The end-to-end latency is the sum of every hop plus any protocol overhead.

1

VM guest

Application socket

+0ms
2

VirtIO net

Paravirt frontend

+0.05ms
3

tap interface

Linux tap device

+0.05ms
4

Linux bridge

vmbr0

+0.1ms
5

VLAN tag

802.1Q VID 100

+0.02ms
6

LACP bond

bond0

+0.1ms
7

NIC driver

ens4 → ixgbe

+0.2ms
8

Physical switch

Top-of-rack

+0.3ms

End-to-end latency

0.82 ms

This is the steady-state latency for a guest on a healthy Proxmox node. Most "slow VM" reports trace back to one of the eight hops above, often storage rather than network.

A packet sent from the guest’s application to an external host:

  1. Guest kernel + virtio-net driver: builds the packet in guest memory and pushes it to the virtio ring.
  2. QEMU: reads the packet from the ring, injects it into the tap device via the file descriptor.
  3. Linux kernel networking: receives the packet on the tap device, applies bridge forwarding rules.
  4. Bridge: forwards the packet to its uplink port (bond, VLAN, or physical NIC).
  5. VLAN / bond layer: if tagged or aggregated, adds the 802.1Q tag or selects a member.
  6. Physical NIC driver: transmits the packet via DMA.
  7. Network: arrives at the switch port.

Each step can fail independently. The packet-flow visualizer above lets you simulate MTU mismatch and link failures to see the failure modes.

Inspecting the stack

ip -br addr
ip route
bridge fdb show
iptables -L -n -v | head -50

Common “VM has no network” diagnoses

SymptomLikely causeFirst check
No link light on switch portNIC down or cable faultethtool eno1
VM starts but no DHCPBridge has no uplinkbridge link show vmbr0
Intermittent lossBond mis-configured with switchjournalctl -u networking
VM can reach gateway but not beyondRouting or firewallip route and iptables
VM reachable from host, not from networkBridge not bound to uplinkbridge link show

Production considerations

Common mistakes

  • Creating a bridge without an uplink interface.
  • Putting the management IP on the same bridge as VM traffic without a firewall.
  • Assuming VLAN tags work on a bond without configuring the switch for trunk mode.
  • Editing /etc/network/interfaces without ifreload -a afterwards (Proxmox uses ifupdown2 — direct ifup may not work).

Key takeaways

  • A packet goes: guest virtio → tap → bridge → bond/VLAN → physical NIC → switch.
  • With the iptables firewall backend there are two more hops: tap → fwbr → veth pair → the real bridge. The nftables backend removes them.
  • Every layer is a real Linux construct you can inspect.
  • Most “VM has no network” tickets trace to bridge or bond misconfiguration.

Knowledge check

Knowledge check · 4 questions

  1. Q1. A VM is started but cannot reach the network. The bridge has no uplink. Which command reveals this?

  2. Q2. Which of the following are Linux constructs you may encounter in a Proxmox host? (Select all that apply.)

  3. Q3. A bridge with no uplink can still allow VM-to-VM traffic.

  4. Q4. ip -br link on a node shows fwbr100i0, fwln100i0 and fwpr100p0 alongside tap100i0. What are they?

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