Proxmox VE / Troubleshooting
Proxmox LXC Container Has No Internet: Diagnose Bridge, Gateway and Firewall
Separate container addressing, bridge attachment, gateway reachability, firewall scope, and upstream path when a running Proxmox LXC container cannot reach the external network.
A container that starts is not yet a container with working networking. Proxmox containers share the host kernel and are set up from the host for network, DNS, and storage, which means the container address, the bridge attachment, and the host path are separate observations that must each be confirmed.[1]
A Linux bridge interface, commonly vmbr0, acts as a virtual switch connecting guests to the physical network, and the default installation connects vmbr0 to the first Ethernet card. Bridged, routed, and masquerading setups are different designs: confirm which design this container is supposed to use before changing anything, and prefer the GUI for configuration changes because it protects against errors.[2]
Containers can use the same Proxmox VE firewall as virtual machines, and firewall policy exists at more than one level. A packet that leaves the container can therefore be stopped at the container, node, or datacenter scope even when addressing and the bridge look correct, so each scope must be inspected separately.[1][4]
Sections
Applicability
- Products
- Proxmox VE
- Scope
- For a Proxmox VE LXC container that starts and stays running but cannot reach the required external network or Internet, while the Proxmox host itself retains management networking. The container is expected to use a Linux bridge (commonly vmbr0) toward the LAN. This page does not cover containers that fail to start, host-wide network loss after an upgrade, QEMU/KVM VM networking, SDN or OVS redesign, bond redesign, or fresh-install networking.[1][2][3]
- Last verified
Symptoms
- The LXC container starts and remains running, but external destinations are unreachable from inside the container. The container may or may not have an address, and the LAN or host may or may not respond; each of these is a different observation.[1][2]
- The Proxmox host itself retains management networking while the container has no external path. Host-wide loss after an upgrade belongs to the upgrade diagnosis, not this page.[3][2]
Quick diagnosis
Confirm the container runs first. A present address never proves the path is healthy.
Confirm this page applies before diagnosing
Confirm the guest is an LXC container (not a QEMU/KVM VM), that it starts and stays running, and that the host retains management networking. If the container does not start, if the host itself is offline, or if the guest is a VM, stop and use the matching diagnosis instead.[1][3]
Record the container address and expected design
Record the container network settings as configured (interface, address and prefix, gateway, DNS, bridge) and compare them with the intended design: bridged, routed, or masquerading. An address shown in configuration is a configured value, not proof that the interface is up or that traffic passes.[1][2]
Capture current links, addresses, routes, and bridge state
Capture current links, addresses, routes, and bridge ports with display-only commands from the host and, where available, the container. Presence of an address never proves the gateway is reachable, and a bridge showing UP never proves external traffic passes; record observations without drawing conclusions yet.[5][6]
ip link showip addr showip route showbridge link showInteractive troubleshooter
Your answers stay in this browser tab. The tool does not connect to your systems or send diagnostic results.
Guided check / step 1
Is the LXC container running?
A container that does not stay running never reaches network-path diagnosis.[1]
Read the complete diagnostic tree without using the controls
- Is the LXC container running?
A container that does not stay running never reaches network-path diagnosis.[1]
- Yes, it runs but has no external path → Does the container have a live address?
- No, it does not stay running → This is a container lifecycle problem, not a network path
- I have not checked → Check the container running state
- Check the container running state
Record whether the container starts and stays running before any network observation.[1]
- What did the running-state check show?
Only a running container continues on this page.[1]
- It runs but has no external path → Does the container have a live address?
- It does not stay running → This is a container lifecycle problem, not a network path
- This is a container lifecycle problem, not a network path
A container that does not stay running needs lifecycle diagnosis (template, storage, resources, task log), not bridge or gateway checks. Preserve the state and log output and use the matching workflow.[1]
- Does the container have a live address?
Compare container network settings with live address state. A present address continues to reachability checks; it never by itself declares the network healthy.[1][5]
- Yes, an address is present → Can the container reach the LAN or host side?
- No, no address is present → Resolve address assignment before path checks
- I have not checked → Compare configured and live addressing
- Compare configured and live addressing
Record the configured container network settings and the live address state side by side.[1][5]
- What did the address comparison show?
A configured address that is absent at runtime is an assignment gap, not an upstream outage.[1]
- An address is present → Can the container reach the LAN or host side?
- No address is present → Resolve address assignment before path checks
- Resolve address assignment before path checks
Without a live container address, gateway and external tests cannot localize the fault. Investigate container network settings and address assignment first; do not change bridge, firewall, or upstream configuration yet.[1]
- Can the container reach the LAN or host side?
Test LAN-side reachability before external destinations. LAN success narrows the fault toward gateway, firewall, or upstream layers.[2]
- Yes, LAN responds → Does the intended gateway respond?
- No, nothing local responds → Stay in the container and bridge layers
- I have not tested it → Run the LAN reachability check
- Run the LAN reachability check
Test a LAN-side destination from the container context and record which side was actually tested.[2]
- What did the LAN check show?
Total local failure stays with addressing, bridge attachment, or host path.[2]
- LAN responds → Does the intended gateway respond?
- Nothing local responds → Stay in the container and bridge layers
- Stay in the container and bridge layers
Check container addressing, bridge attachment, and host bridge state before gateway, firewall, or upstream changes. An untested external destination cannot explain a local failure.[2][6]
- Does the intended gateway respond?
Confirm the gateway this container design intends. A responding gateway makes a fully broken local path less likely but never proves firewall or upstream behavior.[2]
- Yes, the gateway responds → Which network design does this container intend?
- No, the gateway does not respond → Distinguish design, bridge, and host path
- I have not tested it → Test the intended gateway
- Test the intended gateway
Test the intended gateway from the container context using the design's expected interface.[2]
- What did the gateway test show?
An unresponsive gateway keeps the investigation at design, bridge, or host-path layers.[2]
- The gateway responds → Which network design does this container intend?
- The gateway does not respond → Distinguish design, bridge, and host path
- Distinguish design, bridge, and host path
Confirm the intended gateway for this bridged, routed, or masquerading design, then compare bridge attachment and host path state. Do not change firewall or upstream configuration before the gateway layer is classified.[2]
- Which network design does this container intend?
Bridged, routed, and masquerading are different designs with different bridge expectations. The official routed and masquerading examples intentionally use a bridge with no physical member, so an absent member alone is never a fault there. Establish the intended design before any bridge verdict.[2]
- Bridged, with an expected physical member → For this bridged design, is the container on the expected path?
- Routed → Routed design needs routing evidence, not a bridge member
- Masquerading (NAT) → Masquerading design needs forwarding evidence, not a bridge member
- I do not know yet → Determine the intended design before any change
- Routed design needs routing evidence, not a bridge member
For a routed design, a bridge with no physical member may be intentional and does not by itself establish a bridge failure. Continue into routing and forwarding design checks supported by the official documentation, and do not apply the bridged attachment fix. Record the documented design before any change.[2]
- Masquerading design needs forwarding evidence, not a bridge member
For a masquerading design, a private bridge with no physical member may be intentional and does not by itself establish a bridge failure. Host forwarding and NAT belong to the documented design only where it requires them; do not invent route or NAT parameters and do not apply the bridged attachment fix. Record the documented design before any change.[2]
- Determine the intended design before any change
Without a confirmed intended design, no bridge verdict and no network change is possible. Record the current container configuration and determine whether the design is bridged, routed, or masquerading first; do not guess whether a physical member should exist.[2]
- For this bridged design, is the container on the expected path?
This branch applies only because the intended design is bridged with an expected physical member. Compare the configured bridge against live bridge port state. A configured bridge entry never proves the datapath forwards.[2][6]
- Yes, attached to the expected bridge → What fails with addressing, gateway, and bridge confirmed?
- No, wrong bridge or missing member → Bridged discrepancy confirmed — use the bounded procedure
- I have not checked → Compare configured bridge with live ports
- Compare configured bridge with live ports
Record the configured container bridge and the live bridge ports and physical membership.[2][6]
- What did the bridge comparison show?
A present configuration entry is not a working datapath.[2]
- Attached to the expected bridge → What fails with addressing, gateway, and bridge confirmed?
- Wrong bridge or missing member → Bridged discrepancy confirmed — use the bounded procedure
- Bridged discrepancy confirmed — use the bounded procedure
For this confirmed bridged design, the comparison shows the container is not on the expected bridge path with its expected member. Preserve the current configuration exactly as recorded. Apply only the bounded bridged network-change procedure in Next actions, and only with console or independent recovery access; host-wide bridge changes are out of scope here. Routed and masquerading designs never reach this outcome for an absent member alone.[2]
- What fails with addressing, gateway, and bridge confirmed?
With container, gateway, and bridge layers confirmed, separate firewall scope from upstream behavior. A responding gateway never proves firewall or upstream correctness.[4][2]
- Names fail or policy denies the path → Inspect firewall scope and resolution separately
- Comparable external IPs fail with no policy denial found → Continue at the upstream and design layer
- I cannot tell yet → Record each layer before a change
- Inspect firewall scope and resolution separately
Inspect Proxmox VE firewall state at container, node, and datacenter scope, and separate a failing hostname from a failing comparable IP connection. Do not disable the firewall as a test; request a scoped correction with the exact scope, rule, and direction.[4][1]
- Continue at the upstream and design layer
With local path, gateway, bridge, and firewall scope confirmed, continue at outbound and upstream design: the intended bridged, routed, or masquerading model, the upstream router, and NAT where the design requires it. Do not convert designs as a probe.[2]
- Record each layer before a change
Record container state, addressing, LAN result, gateway result, bridge comparison, and firewall scope. An unclassified layer is unknown, not a confirmed cause, and no change should precede classification.[2]
Detailed diagnosis
1. Establish that the container runs
A container that fails to start is a lifecycle problem, not a network-path problem. Confirm the running state first; only a running container continues on this page.[1]
2. Separate configured addressing from live addressing
Compare the configured container network settings with the live address state. A configured address that is absent at runtime narrows the investigation to container startup and address assignment; a present address continues to reachability checks and never by itself declares the network healthy.[1][5]
ip addr show3. Test LAN reachability before external destinations
Test whether the container can reach the local LAN or host side before testing external destinations. LAN reachability narrows the fault toward gateway, firewall, or upstream layers; total local failure stays with addressing, bridge attachment, or host path.[2][5]
4. Confirm the intended gateway responds
Confirm the intended gateway for this container design responds from the container context. A responding gateway makes a completely broken local path less likely but never proves the Internet path or firewall behavior is correct.[2]
5. For a confirmed bridged design, verify bridge and member
For a confirmed bridged design, verify the container interface is attached to the expected Linux bridge and that the bridge has the expected physical member and state. Routed and masquerading designs may intentionally use a bridge with no physical member, so an absent member alone is never a fault there. A bridge entry in configuration never proves the datapath forwards; compare the configured bridge against live bridge port state.[2][6]
bridge link show6. Inspect firewall scope before upstream
Inspect Proxmox VE firewall state at container, node, and datacenter scope for this container and bridge. Containers share the host firewall framework with VMs, so a rule at any scope can stop container traffic while addressing and bridge state look correct. Do not disable the firewall as a test.[1][4]
Supported scenarios
These observations narrow the next investigation; they do not establish a unique cause.
The container does not stay running
A container that fails to start never reaches network diagnosis. Lifecycle, template, storage, or resource faults precede any path observation.[1]
How to check: Confirm the running state and recent task log before any network check.[1]
The container has no live address
Configured network settings without a live address indicate an assignment or startup gap rather than an upstream outage. The configured design and the live state must be compared explicitly.[1][5]
How to check: Compare container network settings against live address output.[1][5]
Local LAN reachability fails
Failure to reach the LAN or host side keeps the investigation at addressing, bridge attachment, or host path layers. External destinations cannot localize the fault while local reachability is unestablished.[2]
How to check: Test LAN-side reachability from the container before testing external destinations.[2]
The intended gateway does not respond
An unresponsive intended gateway is consistent with a wrong gateway design, a bridge or member fault, or host-path policy, and each must be distinguished. Bridged, routed, and masquerading designs use the gateway differently.[2]
How to check: Confirm which gateway this container design intends and whether it responds from the container context.[2]
The container is not on the expected bridged path
For a bridged design that is documented to use a physical member, a container attached to the wrong bridge, a missing expected member, or a down bridge device breaks that intended path. Routed and masquerading designs may intentionally use a bridge with no physical member, so an absent member alone establishes nothing there. Configuration entries alone do not establish that the datapath forwards.[2][6]
How to check: For a bridged design, compare the configured bridge against live bridge port state and physical membership. For routed or masquerading designs, compare against the documented design instead of assuming a member should exist.[2][6]
Firewall policy stops the container path
Proxmox VE firewall policy at container, node, or datacenter scope can stop container traffic while addressing, gateway, and bridge observations look correct. Each scope is an independent prerequisite.[1][4]
How to check: Inspect firewall state and rules at each scope for this container before changing policy.[4]
Local path works but external destinations fail
Working LAN and gateway observations with failing external destinations narrow the investigation to name resolution, outbound policy, or the upstream router and NAT design. A responding gateway never proves external forwarding.[2]
How to check: Separate a failing hostname from a failing comparable IP connection, then check outbound policy and the upstream design.[2]
Next actions and procedure boundaries
Attach the container to the verified bridge
Before changing anything
- Risk
- Changing the container network attachment can remove the container external path and, if host bridge configuration is touched, can affect every guest on the host.[2]
- Safer check
- First confirm the intended bridged design and the exact container interface, and ensure console or independent recovery access exists before changing anything.[1][2]
- Expected result
- The container interface shows the intended address on the verified bridge, live bridge ports include the container interface, and the previously failing reachability check from the same context succeeds without changing other guests.[5][6][2]
- Backup / recovery access
- Record the full current container network settings, including interface, address and prefix, gateway, DNS, and bridge, before the change.[1]
- Rollback
- If connectivity worsens, restore the exact recorded container network settings and re-verify; do not alter host-wide bridge configuration as rollback.[1][2]
Use this procedure only after the diagnostic tree confirms intended design = bridged with a known expected bridge and the actual container attachment differs. After confirming the intended bridged design and recording the current container network settings, change only the confirmed container interface to the verified bridge with the intended address, gateway, and DNS, using the GUI where possible. Do not change host-wide bridge configuration without separate evidence. Re-verify live bridge port state afterward; configuration alone is not confirmation.[1][2]
Request a scoped firewall correction
If firewall state confirms a denial for this container at a specific scope, record the exact scope, rule, and direction and provide those observations to the firewall owner. Request review of only the required container, direction, and service. This is a planning handoff, not an instruction to disable the firewall, and never a blanket allow rule.[4]
Escalate a design mismatch with evidence
When observations show the container design does not match the site design (bridged versus routed versus masquerading, wrong gateway, or wrong upstream), keep the container configuration intact, record configured versus live state, bridge membership, gateway behavior, and firewall scope, and escalate to the network owner. Do not convert one design into another as a probe.[2][1]
Warnings and boundaries
Sources
Links were reviewed on 2026-09-10. Reachability and automated validation do not replace editorial verification of each claim.
- Proxmox Container Toolkit
Proxmox Server Solutions · Tier A · accessed 2026-09-10 - Network Configuration
Proxmox Server Solutions · Tier A · accessed 2026-09-10 - Host System Administration
Proxmox Server Solutions · Tier A · accessed 2026-09-05 - Proxmox VE Firewall
Proxmox Server Solutions · Tier A · accessed 2026-09-05 - ip(8) in Debian Trixie
Debian project · Tier A · accessed 2026-09-08 - bridge(8) in Debian Trixie
Debian project · Tier A · accessed 2026-09-08