GNU/Linux >> Tutoriales Linux >  >> Linux

Comience con NetworkManager en Linux

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.


Linux
  1. Introducción a los cortafuegos de Linux

  2. ¿Cómo empezaste con Linux?

  3. Primeros pasos con PostgreSQL en Linux

  4. Cómo comenzar con Deepin Terminal en Ubuntu Linux

  5. Conexión de Linux Mint a la red WiFi

Comience con GNUPlot

Primeros pasos con GIT en Linux

Primeros pasos con el sistema operativo Linux

Tutorial de Podman:comience a usar Podman

Network Manager en Linux con ejemplos

Cómo comenzar con Arch Linux