El síntoma
Primero te pongo en contexto. Tengo un servidor con Proxmox y dos tarjetas de red donde tengo una VM con Issabel 5. Después de algún reinicio del hipervisor o de la propia VM, el host queda visible en consola del hipervisor pero inalcanzable por SSH. Hay que abrir la consola, loguear como root, levantar eth0 y eth1 a mano con nmtui (o nmcli connection up), y solo así el servicio de telefonía vuelve a responder en la LAN y a la PSTN.
No era un caso aislado, ocurría de forma intermitente en varios PBX de distintos clientes, todos con el mismo stack: Issabel 5 sobre Rocky 8.8, Asterisk 18.19, IssabelPBX 2.12, corriendo como VM en hosts Proxmox.
Pensé que AUTOCONNECT estaba en NO y solo había que cambiarlo a YES, pero no funcionó, así que a investigar.
Diagnóstico
Foto general del estado de red en el PBX afectado:
nmcli -f NAME,UUID,AUTOCONNECT,DEVICE connection show
nmcli connection show eth0 | grep -E "autoconnect|method|never-default"
nmcli connection show eth1 | grep -E "autoconnect|method|never-default"
systemctl is-enabled NetworkManager
grep -E "ONBOOT|NM_CONTROLLED|BOOTPROTO|DEFROUTE|PEERDNS|GATEWAY|IPADDR" \
/etc/sysconfig/network-scripts/ifcfg-eth0 \
/etc/sysconfig/network-scripts/ifcfg-eth1
ip route show
Revisando el archivo de configuración de las interfaces, los parámetros estaban correctos: AUTOCONNECT=yes, ONBOOT=yes, NetworkManager habilitado. Sin embargo, después de reiniciar, las interfaces aparecían UP pero sin IP asignada, sin ruta default, sin red usable.
Pista clave
Revisando con cuidado el archivo ifcfg-eth1 apareció esto:
AUTOCONNECT_RETRIES=0 significa: si el primer intento de activar la conexión falla, NetworkManager no reintenta nunca, se queda muerto.
El default de NetworkManager es AUTOCONNECT_RETRIES=-1, que significa “reintentar infinitamente”. Pero en este host estaba en 0.
Combinado con la condición de carrera natural del boot —donde a veces el driver virtual de red (virtio) aún no está listo cuando NetworkManager intenta levantar la conexión— el resultado es: primer intento falla, no hay segundo, interfaz queda inactiva permanente hasta que alguien la levante a mano.
El fix preventivo
Lo pensamos en dos capas.
Capa 1 — Valores correctos en ifcfg-*
- Eliminar
AUTOCONNECT_RETRIES=0donde aparezca → vuelve al default-1. - Asegurar
PEERDNS=yesen la interfaz de gestión. - Confirmar
ONBOOT=yes,DEFROUTE=yes,GATEWAYpresente en la interfaz de LAN. - Confirmar
DEFROUTE=noen la interfaz del trunk SIP.
sed -i '/^AUTOCONNECT_RETRIES=/d' /etc/sysconfig/network-scripts/ifcfg-eth1
grep -q "^PEERDNS=" /etc/sysconfig/network-scripts/ifcfg-eth0 || \
echo "PEERDNS=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
Capa 2 — Primero red lista y después boot completo
Habilitar el servicio que fuerza al sistema a esperar red lista antes de declarar boot completo:
systemctl enable NetworkManager-wait-online.service
Y crear un servicio systemd que actúa como red de seguridad: si NetworkManager, por la razón que sea, no activó las interfaces, este servicio las activa explícitamente:
cat > /etc/systemd/system/ifup-eth.service << 'EOF'
[Unit]
Description=Forzar levantamiento de eth0 y eth1
After=NetworkManager.service network.target
Wants=NetworkManager.service
[Service]
Type=oneshot
ExecStart=/usr/bin/nmcli connection up eth0
ExecStart=/usr/bin/nmcli connection up eth1
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable ifup-eth.service
Validación post-reboot
Después de aplicar el fix y reiniciar, la validación se hizo desde fuera del PBX:
ssh root@<ip-pbx> "hostname && nmcli -f NAME,DEVICE,STATE connection show && \
systemctl is-active ifup-eth.service && \
ip route show | head -3"
Interfaces activadas con DEVICE asociado, ifup-eth.service active, ruta default por la LAN, rutas estáticas por el trunk SIP.
Aplicamos esta misma configuración a 4 PBX de distintos clientes.
Lecciones
AUTOCONNECT=yesno es suficiente. Hay un parámetro hermano poco documentado,AUTOCONNECT_RETRIES, que puede estar en0y matar silenciosamente el comportamiento esperado./etc/sysconfig/network-scripts/ifcfg-*sigue siendo autoritativo en Rocky 8. En Rocky 9 el pluginifcfg-rhestá deprecado y los keyfiles.nmconnectionson el default.- Las race conditions de boot en VMs son reales.
NetworkManager-wait-online+ un serviciooneshotde respaldo me resultó bastante bien. - Documentar el fix es parte del trabajo. Si no queda registrado, el siguiente ingeniero repite la investigación desde cero.
Stack del caso documentado
- Rocky Linux 8.8 (Green Obsidian), kernel 4.18.0-477
- Issabel 5.0.0-1, IssabelPBX 2.12.0-1
- Asterisk 18.19.0
- VM sobre Proxmox VE, NIC virtio