Proxmox VEIV · NetworkingLinux networking
Linux networking primer: interfaces, bridges, taps
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
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).
bridge link show && brctl show vmbr0 2>/dev/null || bridge link show vmbr0Tap 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.
The firewall bridge chain, and why ip link shows more than you expect
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.
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.
VM guest
Application socket
VirtIO net
Paravirt frontend
tap interface
Linux tap device
Linux bridge
vmbr0
VLAN tag
802.1Q VID 100
LACP bond
bond0
NIC driver
ens4 → ixgbe
Physical switch
Top-of-rack
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:
- Guest kernel + virtio-net driver: builds the packet in guest memory and pushes it to the virtio ring.
- QEMU: reads the packet from the ring, injects it into the tap device via the file descriptor.
- Linux kernel networking: receives the packet on the tap device, applies bridge forwarding rules.
- Bridge: forwards the packet to its uplink port (bond, VLAN, or physical NIC).
- VLAN / bond layer: if tagged or aggregated, adds the 802.1Q tag or selects a member.
- Physical NIC driver: transmits the packet via DMA.
- 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
| Symptom | Likely cause | First check |
|---|---|---|
| No link light on switch port | NIC down or cable fault | ethtool eno1 |
| VM starts but no DHCP | Bridge has no uplink | bridge link show vmbr0 |
| Intermittent loss | Bond mis-configured with switch | journalctl -u networking |
| VM can reach gateway but not beyond | Routing or firewall | ip route and iptables |
| VM reachable from host, not from network | Bridge not bound to uplink | bridge 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/interfaceswithoutifreload -aafterwards (Proxmox uses ifupdown2 — directifupmay 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
Q1. A VM is started but cannot reach the network. The bridge has no uplink. Which command reveals this?
Q2. Which of the following are Linux constructs you may encounter in a Proxmox host? (Select all that apply.)
Q3. A bridge with no uplink can still allow VM-to-VM traffic.
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.