La mayoría de las distribuciones de Linux actuales use NetworkManager para crear y administrar conexiones de red. Eso significa que necesito entenderlo como administrador del sistema. En una serie de artículos, compartiré lo que he aprendido hasta la fecha y por qué creo que NetworkManager es una mejora con respecto a las opciones anteriores.
Red Hat introdujo NetworkManager en 2004 para simplificar y automatizar la configuración y las conexiones de la red, especialmente las conexiones inalámbricas. La intención era liberar a los usuarios de la tarea de configurar manualmente cada nueva red inalámbrica antes de usarla. NetworkManager puede administrar conexiones de red por cable sin archivos de configuración de interfaz, aunque utiliza archivos de conexión de red para conexiones inalámbricas.
En este artículo, revisaré qué es NetworkManager y cómo usarlo para ver conexiones de red y dispositivos para hosts Linux. Incluso resolveré un par de problemas en el proceso.
Qué reemplaza NetworkManager
NetworkManager es un reemplazo de las herramientas de administración de red anteriores. El comando de configuración de interfaz original, ifconfig
, y sus archivos de configuración de interfaz están obsoletos. Puedes ver esto en el ifconfig
páginas del manual, que contienen una nota que indica precisamente eso.
La ip
El comando reemplaza el ifconfig
comando y realiza esencialmente las mismas tareas. Ambos comandos han coexistido desde hace algún tiempo, lo que permite a los administradores de sistemas usar cualquiera de ellos, lo que hace que las secuencias de comandos dependan de ifconfig
funcional. Aunque sus páginas man aún no lo indican, el ifconfig
El comando está obsoleto y NetworkManager lo ha hecho así en la práctica.
Ahora es el momento de reescribir esos scripts, porque usar los comandos de NetworkManager tiene más sentido.
Cómo funciona NetworkManager
NetworkManager se ejecuta como un servicio systemd y está habilitado de forma predeterminada. NetworkManager funciona con D-Bus para detectar y configurar interfaces de red a medida que se conectan a la computadora con Linux. Esta gestión plug-and-play de las interfaces de red hace que la conexión a nuevas redes, tanto cableadas como inalámbricas, sea trivialmente fácil para el usuario. Cuando se detectan interfaces de red instaladas previamente durante el inicio de Linux, se tratan exactamente como un dispositivo conectado después de que el sistema ya está en funcionamiento. Tratar todos los dispositivos como plug-and-play en cada instancia facilita el manejo de esos dispositivos para el sistema operativo, ya que solo hay una base de código para manejar ambos conjuntos de circunstancias.
El demonio udev crea una entrada para cada tarjeta de interfaz de red (NIC) instalada en el sistema en el archivo de reglas de red. D-Bus señala la presencia de un nuevo dispositivo de red, con cable o inalámbrico, a NetworkManager. NetworkManager luego escucha el tráfico en el D-Bus y responde creando una configuración para este nuevo dispositivo. Dicha configuración, por defecto, se almacena solo en la RAM y no es permanente. Debe crearse cada vez que se inicia la computadora.
NetworkManager usa la información de D-Bus para inicializar cada NIC. Primero busca archivos de configuración que proporcionen una configuración estática más permanente. Cuando se le notifica de un nuevo dispositivo, NetworkManager verifica la existencia de archivos de configuración de interfaz de red antiguos (ifcfg-*
) en /etc/sysconfig/network-scripts
. El complemento ifcfg-rh permite el uso de estos archivos heredados para compatibilidad con versiones anteriores.
A continuación, NetworkManager busca sus propios archivos de conexión de interfaz, ubicados en /etc/NetworkManager/system-connections directory
directorio. La mayoría de las distribuciones, incluida Fedora, mantienen sus archivos de conexión de red en /etc/NetworkManager/system-connections directory
directorio, utilizando el nombre de la red como nombre de archivo.
Por ejemplo, mi computadora portátil System76 Oryx Pro originalmente usaba POP!_OS
. Lo reemplacé con Fedora, que actualmente se encuentra en la versión 35, y cada conexión inalámbrica que hice con él tiene un archivo en /etc/NetworkManager/system-connections directory
. Estos mantienen un registro del identificador de conjunto de servicios (SSID) y las contraseñas inalámbricas para cada red. El servidor de Protocolo de configuración dinámica de host (DHCP) en el enrutador inalámbrico proporciona el resto de los datos de configuración de red para estas conexiones inalámbricas. Por razones de seguridad, debido a que estos archivos contienen contraseñas, solo el usuario root los lee/escribe, al igual que los archivos de cuentas del sistema /etc/passwd
y /etc/shadow
.
El directorio /etc/NetworkManager/system-connections directory
en esa computadora portátil contenía archivos para la red cableada, así como para cada una de las redes inalámbricas a las que me conecté. La estructura de estos archivos es diferente de la antigua ifcfg
archivos, pero están en formato de texto sin formato ASCII y son legibles y fácilmente comprensibles.
Este proceso es sensible a la secuencia. Se utiliza el primer conjunto de archivos de configuración encontrado. Si no se encuentran archivos de configuración, NetworkManager genera una configuración utilizando los datos de un servidor DHCP. Si no existe un archivo de configuración de interfaz, conectar un nuevo dispositivo o conectarse con una nueva red inalámbrica hace que udev notifique a NetworkManager sobre el nuevo dispositivo o conexión inalámbrica. En Fedora hasta la versión 28, NetworkManager crea el nuevo archivo de configuración de la interfaz. A partir de Fedora 29 y superior, NetworkManager crea solo la conexión y no crea un archivo de configuración de interfaz.
Si no se encuentran archivos de configuración o servidor DHCP, no es posible la conexión de red.
Configuración de la interfaz de visualización
El programa de interfaz de línea de comandos de NetworkManager, nmcli, ofrece varias opciones para determinar el estado actual de cualquier hardware de interfaz de red instalado en el host, así como las conexiones actualmente activas. El programa nmcli puede administrar redes en cualquier host, ya sea que use una interfaz gráfica de usuario (GUI) o no, por lo que también puede administrar hosts remotos a través de una conexión de shell seguro (SSH). Funciona tanto en conexiones por cable como inalámbricas.
Comenzaré con información básica para usar la herramienta nmcli. Estoy usando un sistema Fedora que configuré como enrutador, ya que un ejemplo con múltiples interfaces de red será más interesante que un host de estación de trabajo simple con una sola interfaz.
Comenzaré con el comando más fácil, nmcli
sin opciones Este simple comando muestra información similar al ahora obsoleto ifconfig
comando, incluidos el nombre y el modelo de la NIC, la dirección de control de acceso a medios (MAC) y la dirección IP (protocolo de Internet), y qué NIC está configurada como la puerta de enlace predeterminada. También muestra la configuración de DNS para cada interfaz.
El comando nmcli requiere privilegios de administrador. La mayoría de las distribuciones recomiendan usar sudo
pero simplemente cambio a la root
usuario.
$ su -
# nmcli
enp4s0: connected to enp4s0
"Realtek RTL8111/8168/8411"
ethernet (r8169), 84:16:F9:04:44:03, hw, mtu 1500
ip4 default, ip6 default
inet4 45.20.209.41/29
route4 0.0.0.0/0
route4 45.20.209.40/29
inet6 2600:1700:7c0:860:8616:f9ff:fe04:4403/64
inet6 fe80::8616:f9ff:fe04:4403/64
route6 2600:1700:7c0:860::/64
route6 ::/0
enp1s0: connected to enp1s0
"Realtek RTL8111/8168/8411"
ethernet (r8169), 84:16:F9:03:E9:89, hw, mtu 1500
inet4 192.168.10.1/24
route4 192.168.10.0/24
inet6 fe80::8616:f9ff:fe03:e989/64
route6 fe80::/64
enp2s0: connected to enp2s0
"Realtek RTL8111/8168/8411"
ethernet (r8169), 84:16:F9:03:FD:85, hw, mtu 1500
inet4 192.168.0.254/24
route4 192.168.0.0/24
inet6 fe80::8616:f9ff:fe03:fd85/64
route6 fe80::/64
eno1: unavailable
"Intel I219-V"
ethernet (e1000e), 04:D9:F5:1C:D5:C5, hw, mtu 1500
lo: unmanaged
"lo"
loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
DNS configuration:
servers: 192.168.0.52 8.8.8.8 8.8.4.4
interface: enp4s0
servers: 192.168.0.52 8.8.8.8
interface: enp1s0
servers: 192.168.0.52 8.8.8.8
interface: enp2s0
Use el comando nmcli device show
para obtener información completa sobre dispositivos conocidos y nmcli connection show
para obtener una descripción general de los perfiles de conexión activos. Consulte las páginas de manual de nmcli(1) y nmcli-examples(7) para obtener detalles de uso completos. También puede ejecutar el comando de ayuda, nmcli -h
, como usuario raíz para ver el nmcli
básico de nivel superior comandos:
# nmcli -h
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
-a, --ask ask for missing parameters
-c, --colors auto|yes|no whether to use colors in output
-e, --escape yes|no escape columns separators in values
-f, --fields <field,...>|all|common specify fields to output
-g, --get-values <field,...>|all|common shortcut for -m tabular -t -f
-h, --help print this help
-m, --mode tabular|multiline output mode
-o, --overview overview mode
-p, --pretty pretty output
-s, --show-secrets allow displaying passwords
-t, --terse terse output
-v, --version show program version
-w, --wait <seconds> set timeout waiting for finishing operations
OBJECT
g[eneral] NetworkManager's general status and operations
n[etworking] overall networking control
r[adio] NetworkManager radio switches
c[onnection] NetworkManager's connections
d[evice] devices managed by NetworkManager
a[gent] NetworkManager secret agent or polkit agent
m[onitor] monitor NetworkManager changes
Tenga en cuenta que los objetos se pueden deletrear o abreviar hasta el primer carácter. Todos estos objetos son únicos, por lo que solo se requiere el primer carácter para especificar cualquier objeto único.
Prueba nmcli g
para ver el estado general.
# nmcli g
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
Esa salida no muestra mucho. También sé que el host, en este caso, no tiene hardware WiFi, por lo que este es un resultado engañoso. No debe usar nmcli g
mando por ese motivo. Los mejores comandos de objetos son c
[conexión] y d
[evice], que son los que uso con más frecuencia.
# nmcli c
NAME UUID TYPE DEVICE
enp4s0 b325fd44-30b3-c744-3fc9-e154b78e8c82 ethernet enp4s0
enp1s0 c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f ethernet enp1s0
enp2s0 8c6fd7b1-ab62-a383-5b96-46e083e04bb1 ethernet enp2s0
enp0s20f0u7 0f5427bb-f8b1-5d51-8f74-ac246b0b00c5 ethernet --
enp1s0 abf4c85b-57cc-4484-4fa9-b4a71689c359 ethernet --
# nmcli d
DEVICE TYPE STATE CONNECTION
enp4s0 ethernet connected enp4s0
enp1s0 ethernet connected enp1s0
enp2s0 ethernet connected enp2s0
eno1 ethernet unavailable --
lo loopback unmanaged --
Aquí hay mucha información realmente interesante. Observe que las dos últimas entradas que usan c
El comando de objeto no tiene entradas en la columna del dispositivo. Este resultado podría significar que no están activos o que no existen o que hay uno o más errores de configuración.
La información adicional que obtenemos usando la d
El comando de objeto ni siquiera muestra el dispositivo enp0s20f0u7. También muestra el dispositivo eno1 (un dispositivo de placa base), que no se mostró usando el c
comando de objeto.
Su salida debería verse más como esta, aunque el nombre del dispositivo será diferente y dependerá de la ubicación específica en el bus PCI al que está conectada la NIC.
# nmcli c
NAME UUID TYPE DEVICE
Wired connection 1 6e6f63b9-6d9e-3d13-a3cd-d54b4ca2c3d2 ethernet enp0s3
# nmcli d
DEVICE TYPE STATE CONNECTION
enp0s3 ethernet connected Wired connection 1
lo loopback unmanaged --
Parece que tengo un par de anomalías para explorar. Primero, quiero saber qué dispositivo enp0s20f0u7 está en la lista de conexiones. Dado que NetworkManager no reconoce este dispositivo en la lista de dispositivos, probablemente haya un archivo de configuración de red en /etc/sysconfig/network-scripts
aunque no exista tal dispositivo de hardware en el host. Revisé ese directorio, encontré el archivo de configuración de la interfaz y mostré el contenido.
# ls -l
total 20
-rw-r--r-- 1 root root 352 Jan 2 2021 ifcfg-eno1
-rw-r--r-- 1 root root 419 Jan 5 2021 ifcfg-enp0s20f0u7
-rw-r--r-- 1 root root 381 Jan 11 2021 ifcfg-enp1s0
-rw-r--r-- 1 root root 507 Jul 27 2020 ifcfg-enp2s0
-rw-r--r-- 1 root root 453 Jul 27 2020 ifcfg-enp4s0
cat ifcfg-enp0s20f0u7
# Interface configuration file for ifcfg-enp0s20f0u7
# This is a USB Gb Ethernet dongle
# This interface is for the wireless routers
# Correct as of 20210105
TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="no"
NAME=enp0s20f0u7
UUID="fa2117dd-6c7a-44e0-9c9d-9c662716a352"
ONBOOT="yes"
HWADDR=8c:ae:4c:ff:8b:3a
IPADDR=192.168.10.1
PREFIX=24
DNS1=192.168.0.52
DNS2=8.8.8.8
Después de mirar este archivo, recordé que había usado un dongle USB Gigabit por un tiempo porque la NIC de la placa base instalada en ese host aparentemente había fallado. Esa fue una solución rápida, y luego instalé una nueva NIC en el bus de la placa base PCIe, para poder eliminar este archivo de configuración de la interfaz. Sin embargo, no lo eliminé; Lo moví a /root
directorio en caso de que lo necesite de nuevo.
Observe los comentarios que utilicé para asegurarme de que mi yo futuro u otro administrador del sistema comprendiera por qué existe este archivo.
La segunda anomalía es por qué la entrada para enp1s0 aparece dos veces. Esto solo puede ocurrir cuando el nombre de la NIC se especifica en más de un archivo de configuración de la interfaz. Así que probé los siguientes pasos y, efectivamente, enp1s0 aparece erróneamente en el ifcfg-eno1
archivo de configuración, así como el ifcfg-enp1s0
archivo.
# grep enp1s0 *
ifcfg-eno1:NAME=enp1s0
ifcfg-enp1s0:# Interface configuration file for enp1s0 / 192.168.10.1
ifcfg-enp1s0:NAME=enp1s0
# cat ifcfg-eno1
## Interface configuration file for eno1 / 192.168.10.1
## This interface is for the wireless routers
## Correct as of 20200727
TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="no"
NAME=enp1s0
ONBOOT="yes"
HWADDR=04:d9:f5:1c:d5:c5
IPADDR=192.168.10.1
PREFIX=24
DNS1=192.168.0.52
DNS2=8.8.8.8
Cambié el NOMBRE a NOMBRE=eno1 y reinicié NetworkManager. Los cambios en los archivos de configuración de la interfaz no se activan hasta que reinicio NetworkManager. Los resultados del dispositivo y la conexión ahora se ven así. Todavía no estoy usando la NIC integrada, lo que probablemente esté bien ahora que eliminé el nombre incorrecto del ifcfg-eno1
archivo de configuración de la interfaz. Eso requerirá tiempo de inactividad para ese enrutador.
# systemctl restart NetworkManager
# nmcli d
DEVICE TYPE STATE CONNECTION
enp4s0 ethernet connected enp4s0
enp1s0 ethernet connected enp1s0
enp2s0 ethernet connected enp2s0
eno1 ethernet unavailable --
lo loopback unmanaged --
# nmcli c
NAME UUID TYPE DEVICE
enp4s0 b325fd44-30b3-c744-3fc9-e154b78e8c82 ethernet enp4s0
enp1s0 c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f ethernet enp1s0
enp2s0 8c6fd7b1-ab62-a383-5b96-46e083e04bb1 ethernet enp2s0
eno1 abf4c85b-57cc-4484-4fa9-b4a71689c359 ethernet --
Otra opción es mostrar solo las conexiones activas. Esta es una buena opción con resultados limpios, pero también puede enmascarar otros problemas si la usas exclusivamente.
# nmcli connection show --active
NAME UUID TYPE DEVICE
enp4s0 b325fd44-30b3-c744-3fc9-e154b78e8c82 ethernet enp4s0
enp1s0 c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f ethernet enp1s0
enp2s0 8c6fd7b1-ab62-a383-5b96-46e083e04bb1 ethernet enp2s0
Habiendo cambiado el nombre del dispositivo en el ifcfg-eno1
archivo al correcto, sospecho que la NIC de la placa base, eno1, volverá a funcionar. Experimentaré con eso la próxima vez que tenga una sesión de mantenimiento en ese host.
¿No es eso más interesante que un host con una sola NIC? Y encontré algunos problemas en el proceso.
El uso de herramientas de NetworkManager para administrar redes se trata en el documento Red Hat Enterprise Linux (RHEL) 8 "Configuración y administración de redes".
Reflexiones finales
Soy fanático de la filosofía de "si no está roto, no lo arregles". Sin embargo, incluso el uso más simple de NetworkManager desde la línea de comandos, viendo el estado actual de los dispositivos y conexiones de la red, me ha mostrado dos anomalías en mis configuraciones anteriores que había pasado por alto. Ahora soy fanático de NetworkManager. Las herramientas anteriores eran buenas, pero NetworkManager es mejor; la información adicional que proporciona es invaluable.
En la parte 2 de esta serie, hablaré sobre la administración de interfaces de red.