Entorno
- SO: CentOS 7
- Versión de NetworkManager: 1.18.x
Síntoma
Una interfaz de red (ej. eth1) pierde repetidamente su dirección IP estática después de un reinicio o al reiniciar NetworkManager. La interfaz sube a nivel de capa 2 (link UP, carrier on) pero no tiene IP asignada. NetworkManager la muestra como disconnected sin perfil de conexión vinculado.
$ nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
eth1 ethernet disconnected --$ ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff
(no inet address)Mientras tanto, otras interfaces (ej. eth0) funcionan correctamente cada vez.
Causa Raíz
Dos errores de configuración combinados impiden que la interfaz obtenga su IP:
1. Plugin ifcfg-rh deshabilitado en NetworkManager
En /etc/NetworkManager/NetworkManager.conf, la línea de plugins estaba comentada:
[main]
#plugins=ifcfg-rh,ibftCon esta línea comentada, NetworkManager no lee los archivos /etc/sysconfig/network-scripts/ifcfg-*. Otras interfaces pueden seguir funcionando si tienen un perfil de conexión preexistente en la base de datos interna de NetworkManager. Sin embargo, cualquier interfaz que dependa únicamente de su archivo ifcfg-* no tendrá perfil cargado.
Sin un perfil válido, NetworkManager auto-genera un perfil temporal "Wired connection 1" con ipv4.method: auto (DHCP), que obtiene una dirección DHCP aleatoria o falla silenciosamente — nunca aplicando la IP estática deseada.
2. Valor inválido de BOOTPROTO en el archivo ifcfg
Incluso después de rehabilitar el plugin ifcfg-rh, NetworkManager puede rechazar cargar el archivo. El journal mostrará:
ifcfg-rh: loading "/etc/sysconfig/network-scripts/ifcfg-eth1" fails: Unknown BOOTPROTO 'no'NetworkManager 1.18.x espera BOOTPROTO=none (no no) para configuración de IP estática. El valor no es aceptado por el servicio legacy network pero no por el plugin ifcfg-rh de NetworkManager.
Solución
Paso 1: Habilitar el plugin ifcfg-rh
Editar /etc/NetworkManager/NetworkManager.conf y asegurarse de que la línea de plugins no esté comentada:
[main]
plugins=ifcfg-rh,ibftPaso 2: Corregir BOOTPROTO en el archivo ifcfg
Editar el archivo correspondiente en /etc/sysconfig/network-scripts/ y cambiar BOOTPROTO=no a BOOTPROTO=none.
Ejemplo de ifcfg-eth1 corregido:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.1.254
NETMASK=255.255.255.252Paso 3: Eliminar perfil auto-generado y recargar
# Eliminar el perfil DHCP auto-generado si existe
nmcli connection delete 'Wired connection 1'
# Reiniciar NetworkManager
systemctl restart NetworkManagerPaso 4: Verificar
$ nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
eth1 ethernet connected eth1
$ ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
inet 192.168.1.254/30 brd 192.168.1.255 scope global noprefixroute eth1Comandos de Diagnóstico
| Comando | Propósito |
|---|---|
ip addr show eth1 |
Verificar si la interfaz tiene IP |
nmcli device status |
Ver estado de NM por interfaz |
nmcli connection show |
Listar perfiles cargados en NM |
cat /etc/NetworkManager/NetworkManager.conf |
Verificar si el plugin ifcfg-rh está habilitado |
cat /etc/sysconfig/network-scripts/ifcfg-* |
Inspeccionar archivos de configuración de interfaces |
journalctl -u NetworkManager |
Leer logs de NM para errores de carga |
nmcli connection load /etc/sysconfig/network-scripts/ifcfg-eth1 |
Intentar carga manual para provocar el error |
Conclusión Clave
- Siempre verificar que el plugin ifcfg-rh esté habilitado — si está comentado, NM ignora silenciosamente todos los archivos ifcfg.
-
Usar
BOOTPROTO=none, noBOOTPROTO=no— el servicio legacynetworkacepta ambos, pero el plugin ifcfg-rh de NetworkManager solo aceptanone. -
Revisar
journalctl -u NetworkManager— NM registra la razón exacta por la que rechaza un archivo de configuración, lo cual es el camino más rápido al diagnóstico.