Introduction
You spin up a new VM in Proxmox VE, install your OS, boot it up — and there's no internet. No IP address, or an IP address that goes nowhere. Ping the router and you get Destination Host Unreachable. It's one of the most common things new Proxmox users run into, and it's rarely the OS itself. Most of the time the problem sits somewhere between the virtual NIC and the physical cable coming out of your server.
The good news is that Proxmox networking has a small number of moving parts, and once you know where to look, most connectivity problems take five minutes to find. This guide walks through the actual diagnostic process — not "just reinstall it" — so you can figure out what's broken and fix it without guessing.
What You Will Learn
- How traffic actually flows from a VM to your physical network in Proxmox VE
- A step-by-step process for narrowing down where a connection is failing
- The commands that show you what's really happening, on both the host and inside the guest
- The specific error messages that point to a specific cause
- How to tell a firewall problem apart from a bridge problem apart from a guest OS problem
- Habits that stop these issues from happening in the first place
What Is This Feature?
Before you can troubleshoot networking, it helps to know what's actually sitting between your VM and the internet. On a fresh Proxmox VE install, there's a virtual switch called vmbr0 — a Linux bridge — wired to your host's physical network card. Every VM you create gets a virtual network card, and that virtual NIC plugs into a bridge, usually vmbr0, the same way a real computer plugs into a real switch.
When your VM boots, its virtual NIC sends out a DHCP request looking for an IP address, the same way your laptop does when you join a new Wi-Fi network. That request has to travel through the virtual NIC, across the bridge, out the physical NIC, to whatever's handing out addresses on your network — usually your router. If any one of those links is broken or misconfigured, the VM either gets no IP at all, or gets one that can't actually reach anywhere.
Two other pieces matter here. The NIC model you pick for a VM (VirtIO, e1000, or a couple of others) affects whether the guest OS even recognizes the network card — Windows in particular needs a driver for VirtIO that isn't built in. And the Proxmox firewall, which exists at the datacenter, node, and individual VM level, can silently block traffic even when the bridge and IP addressing are both fine.
Why Would You Use It?
You don't get a choice about whether to deal with this — sooner or later a VM won't get an IP, or a container will lose its connection after a host reboot, and you'll need to figure out why. Learning the diagnostic order once means you stop guessing every time it happens.
There's also a bigger payoff than fixing this one VM. The same handful of commands — checking the bridge, checking the guest's IP config, checking the firewall state — cover the vast majority of networking issues you'll hit in Proxmox, whether that's a single homelab box or a small cluster. Learn the process once and you're not starting from zero the next time something's unreachable.
Prerequisites
Before you start, make sure you have:
- A Proxmox VE host running 8.x or 9.x, with at least one VM or LXC container that's booted but has no working network
- Root access to the Proxmox host, either through the web UI's Shell or over SSH
- Console access to the guest — through the Proxmox Console tab is fine if SSH isn't working yet
- Basic comfort with a terminal — you'll run commands, not just click buttons
- Your network's expected gateway IP and subnet on hand, so you know what a "correct" address looks like
You don't need any special hardware for this. Everything below applies whether you're running a single home server or a small handful of nodes.
Step-by-Step Tutorial
Step 1: Confirm the VM actually has a network device attached
In the Proxmox web UI, click your VM, go to Hardware, and check that a Network Device is listed and not disconnected. Click it — you'll see something like virtio=BC:24:11:xx:xx:xx,bridge=vmbr0,firewall=1. Note the bridge name and whether firewall is checked. If the device is missing entirely, that's your whole problem: add one, pick VirtIO (paravirtualized) as the model unless you have a specific reason not to, and attach it to vmbr0.
Step 2: Check the bridge on the host
From the Proxmox host shell, run:
ip link show vmbr0
You want to see state UP. If it says DOWN, the bridge itself isn't active — that's a host-level networking problem, not a VM problem, and every guest on that bridge will be affected, not just one. Also run:
bridge link show
This lists which physical and virtual interfaces are actually attached to the bridge. If your VM's tap interface (something like tap101i0) isn't listed, the VM isn't really connected even if Proxmox shows a device configured.
Step 3: Check what the guest thinks its IP is
Open the VM's console and run, on Linux:
ip addr show
or on Windows, open PowerShell and run ipconfig /all. If there's no IP address at all (or a self-assigned 169.254.x.x on Windows, or nothing on the interface for Linux), the guest never got a DHCP response. If there is an IP but it's wrong for your network — say you expect 192.168.1.x and you're seeing 10.0.3.x — the guest is talking to the wrong DHCP server, or a leftover static config is overriding DHCP.
Step 4: Rule out a static config left over from a template or clone
This one catches people constantly. If your VM was cloned from a template, or built from a cloud image, it may have a baked-in static IP or a disabled DHCP client from whatever machine it was cloned from. On Debian/Ubuntu guests, check:
cat /etc/network/interfaces
or, on systems using Netplan:
cat /etc/netplan/*.yaml
Look for a hardcoded address line where you'd expect dhcp. If you're using cloud-init templates, the network config is set on the Cloud-Init tab in Proxmox instead — check that it's set to DHCP if that's what you want, then regenerate the cloud-init image and reboot.
Step 5: Check the Proxmox firewall
Go to the VM's Firewall tab, then check the Options sub-tab. If Firewall is enabled here with no rules defined, and the default input policy is set to DROP, the VM can look perfectly healthy — correct IP, correct gateway — and still be unreachable from outside, or unable to reach out, depending on which direction is blocked. For testing, disable the firewall at the VM level, confirm connectivity comes back, then re-enable it and add the specific rules you actually need instead of leaving it off.
Step 6: Test connectivity in order — gateway first, then the internet, then DNS
From inside the guest, run these three in sequence:
ping -c 4 192.168.1.1
ping -c 4 8.8.8.8
ping -c 4 google.com
(Swap in your actual gateway IP.) If the first ping to your gateway fails, the problem is local — bridge, VLAN tag, or firewall. If the gateway responds but 8.8.8.8 doesn't, your router or upstream network is the issue, not Proxmox. If both IPs respond but the domain name doesn't resolve, you've got a DNS problem specifically, which is a much smaller and different fix — usually just a bad or missing DNS server in the guest's network config.
Step 7: Check for a VLAN tag mismatch
If you're using a VLAN-aware bridge, or you've set a VLAN tag on the VM's network device, confirm that tag actually matches what your physical switch expects on that port. A VM tagged for VLAN 20 plugged into a switch port that's only trunking VLAN 10 and 30 will show a link, get no DHCP response, and look identical to a broken bridge from the guest's point of view. This is one of the harder ones to spot because nothing in Proxmox itself reports an error — the packets just never arrive.
Commands Explained
| Command | What it does |
|---|---|
ip link show vmbr0 | Shows whether the bridge interface is up and what its basic state is |
bridge link show | Lists every interface actually attached to a bridge, including VM tap devices |
ip addr show | Shows IP addresses assigned to interfaces — run this inside the guest |
ip route show | Shows the routing table, including the default gateway the guest is using |
ifreload -a | Reapplies /etc/network/interfaces on the Proxmox host without a full reboot |
qm config <vmid> | Prints a VM's full configuration from the command line, including its network device line |
journalctl -u pve-firewall | Shows recent log output from the Proxmox firewall service, useful when rules aren't behaving as expected |
Common Errors
"Destination Host Unreachable" when pinging the gateway from inside the guest. This almost always means the packet never left the host, or never made it onto the physical network — check the bridge state and the tap interface attachment from Step 2.
"Network is unreachable", as opposed to unreachable host, usually means there's no default route configured at all inside the guest. Check ip route show — if it's empty, DHCP never completed, or the static config is missing a gateway line.
No DHCPOFFERS received in the guest's boot log or journalctl output means the DHCP request went out but nothing answered. That points at the bridge, the physical switch, or a firewall rule dropping DHCP traffic (UDP ports 67/68) before it reaches your router.
A self-assigned 169.254.x.x address on a Windows guest means the same thing as the DHCP error above — Windows falls back to APIPA when it can't reach a DHCP server after several attempts.
The NIC shows up in Proxmox but the guest doesn't see any network adapter at all, particularly on Windows. That's a missing VirtIO driver, not a networking problem — Windows doesn't ship with a VirtIO NIC driver built in, so a fresh install with a VirtIO network device just won't show an adapter in Device Manager until you install the driver from the VirtIO ISO.
Troubleshooting
If you've gone through the steps above and you're still stuck, a few less common causes are worth checking.
Two VMs with the same static IP on the same bridge will fight over that address, and symptoms are inconsistent — sometimes one VM works, sometimes neither does, sometimes it seems to work and then drops. If a VM's network was fine yesterday and broken today with no changes on your end, check whether something else on the network picked up the same address, especially if you're mixing DHCP reservations with manually assigned static IPs.
MTU mismatches show up if you're running an SDN setup with VXLAN, or tunneling traffic in any way. Symptoms are strange — small packets like pings work fine, but larger transfers stall or hang. If that's your situation, it's worth checking the MTU on the bridge and comparing it against what your physical network actually supports.
If you added a second network device to a VM and only the first one works, double check which bridge the second device is actually attached to. It's an easy click to miss when adding hardware, and Proxmox won't warn you if you've attached a NIC to a bridge that doesn't have a route anywhere useful.
And if none of this narrows it down, isolate the variable: create a brand new, minimal test VM — a fresh Debian net-install is fine — attach it to the same bridge, and see if it gets an IP. If the test VM works and your original doesn't, the problem is inside that specific guest's configuration, not the Proxmox host.
Best Practices
A few habits save you from repeating this whole process every few weeks.
- Use VirtIO network devices by default, and install the VirtIO drivers on Windows guests as a standard step, not an afterthought.
- Test new VMs with the per-VM firewall off first, confirm networking works, then turn the firewall back on and add rules deliberately. Don't leave the firewall permanently disabled — that defeats the point of having it.
- Keep a naming convention for bridges and VLANs if you're running more than one of each. "vmbr0 is the LAN, vmbr1 is the lab VLAN" written down somewhere beats trying to remember it during an outage.
- When cloning VMs from a template, always check the network config on the clone before assuming it inherited the right settings — cloud-init templates especially.
- Install the QEMU Guest Agent in your VMs. It doesn't fix networking directly, but it lets Proxmox report the guest's actual IP address in the web UI, which saves you a console login every time you're just checking whether a VM got an address.
Frequently Asked Questions
Why does my VM show a MAC address but no IP address?
A MAC address just means the virtual NIC exists and is configured. Getting an IP is a separate step that depends on DHCP working end to end, or a correct static configuration inside the guest.
Do I need to restart Proxmox to fix a bridge problem?
Rarely. Most bridge configuration changes on the host can be applied with ifreload -a instead of a full reboot. Save a full restart for cases where networking is so broken you can't reach the host at all.
My container (LXC) has no network but my VMs are fine — why?
Containers share the host kernel's networking stack more directly than VMs do, so check the container's network config in its Options or through pct config <ctid>, and confirm it's attached to the same bridge your working VMs use.
Can two VMs on different VLANs still talk to each other?
Not directly, by design — that's the point of VLANs. They need a router or a Layer 3 device to pass traffic between VLANs, whether that's your physical router or Proxmox's own SDN routing features.
Is it safe to leave the per-VM firewall disabled once I've confirmed networking works?
Technically yes, but I wouldn't. It's one of the easier security wins you get in Proxmox, and turning it back on with a couple of sensible rules takes a few minutes.
Conclusion
Most "no internet" problems in Proxmox come down to one of four things: the bridge isn't up, the guest never got an IP, a firewall rule is silently dropping traffic, or a VLAN tag doesn't match what the switch expects. Work through them in that order — bridge, guest IP, firewall, VLAN — and you'll usually find the actual cause well before you'd have finished reinstalling anything. Keep the ping sequence from Step 6 in your back pocket too. Gateway, then external IP, then domain name — it tells you within thirty seconds which side of the problem you're actually looking at.