Saltar al contenido
Blog TIContel
Regresar

PBX Issabel: cuando las interfaces de red no levantan al reiniciar

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.

Arquitectura del problema al boot

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:

Salida de ifcfg-eth1 mostrando AUTOCONNECT_RETRIES=0

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-*

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

Cadena de servicios systemd del fix preventivo

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

Stack del caso documentado


Compartir esta publicación: