Proxmox link recovery¶
Zion remained powered on after an upstream link interruption but did not always recover network connectivity. Because the management address, VMs and LXC containers all use the same bridge, the complete virtualized platform appeared offline.
Symptoms¶
- SSH and the Proxmox web interface stop responding;
- every guest attached to the main bridge becomes unreachable;
- Zion remains powered on;
- connectivity returns after manual recovery or reboot;
- the incident follows a router, switch, cable or power interruption.
Network model¶
flowchart TD
nic["nic0 โ physical interface"] --> bridge["vmbr0 โ Linux bridge"]
bridge --> management["Zion management"]
bridge --> vm["Virtual machines"]
bridge --> lxc["LXC containers"]
The management address belongs to vmbr0. nic0 has no IP address and acts only as a bridge port.
Confirmed conditions¶
The original configuration contained only:
Two changes were required:
nic0was made eligible for hotplug-driven configuration;- Energy Efficient Ethernet was disabled and the validated link parameters were reapplied when the interface was brought up.
Adding allow-hotplug restored the interface to UP after reconnecting the cable, but services still failed to recover reliably until EEE was disabled.
allow-hotplug is not a continuous carrier monitor. It allows ifupdown to configure the interface after a device event. The post-up commands run when the interface is brought up, not after every ordinary carrier flap.
Persistent configuration¶
The verified /etc/network/interfaces structure is:
auto lo
iface lo inet loopback
allow-hotplug nic0
iface nic0 inet manual
post-up ethtool --set-eee nic0 eee off
post-up ethtool -s nic0 speed 1000 duplex full autoneg on
auto vmbr0
iface vmbr0 inet static
address <ZION_MANAGEMENT_IP>/<PREFIX>
gateway <LAN_GATEWAY>
bridge-ports nic0
bridge-stp off
bridge-fd 0
source /etc/network/interfaces.d/*
The 1000 Mb/s, full-duplex and autonegotiation values were verified for Zion and its switch port. Do not copy them to different hardware without checking both ends of the link.
Non-disruptive diagnosis¶
ip -brief link
ip -brief address
bridge link
ip route
ethtool nic0
ethtool --show-eee nic0
journalctl -u networking --no-pager -n 100
Confirm that:
nic0has carrier and is attached tovmbr0;- the management address exists only on
vmbr0; - the default route uses
vmbr0; - negotiated speed and duplex match the switch;
- EEE is disabled;
- no duplicate address or default route exists.
Recovery safety¶
Do not begin with systemctl restart networking over SSH. Restarting the complete network stack can disconnect Zion and every guest attached to vmbr0.
Use a local or out-of-band console. If an interface is actually administratively DOWN, bring up only that interface:
These commands do not repair a carrier problem when both interfaces are already UP. Do not add an address or default route unless inspection proves it is missing; duplicate values make recovery harder.
The verified incident procedure was:
- inspect the current interface, bridge and route state;
- correct
/etc/network/interfaces; - disable EEE and verify the negotiated link;
- use a controlled reboot with console access to load the persistent configuration;
- test another physical link interruption.
Logos network recovery¶
Zion also runs a network-recovery mechanism for Logos. After the physical link returns, it uses qm guest exec to restart networking inside the VM. This path depends on QEMU Guest Agent on both sides:
- Guest Agent support must be enabled in the Proxmox VM configuration;
- the
qemu-guest-agentpackage and service must be present inside Logos; - the VM must have the QEMU
virtio-serialdevice attached.
Enable the agent for Logos on Zion:
Then perform a complete stop and start of the VM. A live change or ordinary in-guest service restart is not enough to attach a missing virtio-serial device.
Without that device, qemu-guest-agent.service inside Logos remains in Dependency failed, and every later qm guest exec call fails even if the package is installed correctly.
Validate the dependency before relying on automatic recovery:
Inside Logos, verify:
systemctl is-enabled qemu-guest-agent.service
systemctl is-active qemu-guest-agent.service
systemctl status qemu-guest-agent.service --no-pager
Only test network-recovery after qm agent 101 ping succeeds. Enabling the service inside Logos alone does not prove that Proxmox attached the required virtual device.
IPv6 timeout¶
During the incident, networking.service also waited on IPv6-related timeouts. IPv6 was intentionally unused on vmbr0, so it was disabled only on that bridge:
The setting belongs in /etc/sysctl.d/. Do not disable IPv6 globally or use this as a generic fix without confirming the timeout in logs.
Validation¶
The final configuration was tested by disconnecting the physical link for ten minutes and reconnecting it while monitoring:
After reconnecting, verify:
The test passes only when:
nic0andvmbr0return without manual address or route creation;- EEE remains disabled;
- the link reports the expected speed and full duplex;
- Zion management, VMs and LXC containers become reachable without another reboot.
Related symptoms¶
| Symptom | Check first |
|---|---|
| SSH works but ping does not | Proxmox firewall policy |
| Direct UI works but the reverse-proxy URL fails | Reverse proxy and protocol handling |
| Link is up but guests remain unreachable | Bridge membership and guest interfaces |
| Network restart waits for several minutes | ifupdown2, IPv6 and dependency logs |
| Failure returns after another carrier loss | EEE state and persistent link settings |