Cómo reconectar interfaces tap de VMs a bridges SDN en Proxmox VE

Cuando se ejecuta una operación ifdown/ifup sobre un bridge SDN en Proxmox VE, todas las interfaces miembro — incluyendo las interfaces tap de las máquinas virtuales — son removidas del bridge. Al levantar el bridge nuevamente con ifup, solo se re-agregan las interfaces definidas en /etc/network/interfaces.d/sdn (por ejemplo, túneles VXLAN). Las interfaces tap de las VMs son agregadas dinámicamente por el script pve-bridge al momento de iniciar una VM, no por la configuración SDN. Si las VMs siguen en ejecución durante la operación, las interfaces tap quedan huérfanas y las VMs pierden conectividad de red.

Este artículo describe cómo identificar el problema y reconectar las interfaces tap a sus bridges correspondientes sin necesidad de reiniciar las máquinas virtuales.

Síntomas

  • Todas las VMs en el nodo pierden conectividad de red simultáneamente.
  • Las VMs siguen en ejecución (no se detuvieron ni se reiniciaron).
  • Las interfaces tap existen pero no están asociadas a ningún bridge.
  • El problema ocurre inmediatamente después de una operación ifdown/ifup o ifreload sobre bridges SDN.

Diagnóstico

Verificar que las interfaces tap existen pero no tienen bridge asignado:

ip link show | grep tap

Verificar que el bridge SDN no tiene interfaces tap como miembros:

bridge link show

Si la salida del segundo comando no muestra interfaces tap (como tap100i0, tap101i0, etc.) asociadas al bridge, las interfaces están huérfanas.

Solución

Ejecute el siguiente comando como root en el nodo Proxmox afectado. El comando itera todas las VMs en ejecución, lee la configuración de red de cada una, y reconecta su interfaz tap al bridge correspondiente:

for vmid in $(qm list | awk 'NR>1 {print $1}'); do
  bridge=$(qm config "$vmid" 2>/dev/null | grep "^net0" | grep -o "bridge=[a-z0-9]*" | cut -d= -f2)
  iface="tap${vmid}i0"
  if [ -n "$bridge" ] && ip link show "$iface" &>/dev/null; then
    ip link set "$iface" master "$bridge"
  fi
done

Advertencia: Este script solo reconecta la interfaz net0 de cada VM. Si las VMs utilizan múltiples interfaces de red (net1, net2, etc.), el script debe ser extendido para iterar esas interfaces adicionales.

Después de ejecutar el script, verifique que las interfaces tap aparezcan nuevamente como miembros del bridge:

bridge link show

Prevención

Evite ejecutar ifdown/ifup directamente sobre bridges SDN cuando haya VMs en ejecución en el nodo. Considere las siguientes alternativas:

  • Usar ifreload -a: Este comando está diseñado para preservar las interfaces miembro cuando sea posible, reduciendo el riesgo de desconexión.
  • Migrar las VMs antes de reconfigurar: Para cambios planificados, migre las VMs en vivo a otro nodo antes de modificar la configuración del bridge.
  • Preparar el script de reconexión: Si ifdown/ifup es inevitable, tenga el script listo para ejecutarlo inmediatamente después de la operación.