109.2 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
109 Fundamentos de redes |
Objetivo: |
109.2 Configuración de red persistente |
Lección: |
1 de 2 |
Introducción
En cualquier red TCP/IP, cada nodo debe configurar su adaptador de red para que coincida con los requisitos de la red, de lo contrario no podrán comunicarse entre sí. Por lo tanto, el administrador del sistema debe proporcionar la configuración básica para que el sistema operativo sea capaz de configurar la interfaz de red adecuada, así como de identificarse a sí mismo y las características básicas de la red cada vez que se inicie.
Las configuraciones de red son agnósticas con respecto a los sistemas operativos, pero estos últimos tienen sus propios métodos para almacenar y aplicar estas configuraciones. Los sistemas Linux confían en las configuraciones almacenadas en archivos de texto plano bajo el directorio /etc
para hacer aparecer la conectividad de red durante el arranque. Merece la pena conocer cómo se utilizan estos archivos para evitar la pérdida de conectividad debido a una mala configuración local.
La interfaz de red
Interfaz de red es el término con el que el sistema operativo se refiere al canal de comunicación configurado para trabajar con el hardware de red conectado al sistema, como un dispositivo Ethernet o Wi-Fi. La excepción a esto es la interfaz loopback, que el sistema operativo utiliza cuando necesita establecer una conexión consigo mismo, pero el propósito principal de una interfaz de red es proporcionar una ruta a través de la cual se pueden enviar datos locales y recibir datos remotos. A menos que la interfaz de red esté correctamente configurada, el sistema operativo no podrá comunicarse con otras máquinas de la red.
En la mayoría de los casos, la configuración correcta de la interfaz se define por defecto o se personaliza durante la instalación del sistema operativo. Sin embargo, a menudo es necesario revisar o incluso modificar estos ajustes cuando la comunicación no funciona correctamente o cuando el comportamiento de la interfaz requiere una personalización.
Hay muchos comandos de Linux para listar qué interfaces de red están presentes en el sistema, pero no todos están disponibles en todas las distribuciones. El comando ip
, es parte del conjunto básico de herramientas de red incluidas en todas las distribuciones de Linux y puede ser utilizado para listar las interfaces de red. El comando completo para mostrar las interfaces es ip link show
:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp3s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:8d:2b:5b brd ff:ff:ff:ff:ff:ff
Si está disponible, también se puede utilizar el comando nmcli device
:
$ nmcli device DEVICE TYPE STATE CONNECTION enp3s5 ethernet connected Gigabit Powerline Adapter lo loopback unmanaged --
Los comandos mostrados en los ejemplos no modifican ninguna configuración del sistema, por lo que pueden ser ejecutados por un usuario sin privilegios. Ambos comandos listan dos interfaces de red: lo
(la interfaz loopback) y enp3s5
(una interfaz ethernet).
Las computadoras de mesa y las portátiles con Linux suelen tener dos o tres interfaces de red predefinidas, una para la interfaz virtual de bucle invertido y las otras asignadas al hardware de red por el sistema. Los servidores y dispositivos de red con Linux, en cambio, pueden tener decenas de interfaces de red, pero los mismos principios se aplican a todos ellos. La abstracción proporcionada por el sistema operativo permite configurar las interfaces de red utilizando los mismos métodos, independientemente del hardware subyacente. Sin embargo, conocer los detalles sobre el hardware subyacente de una interfaz puede ser útil para entender mejor lo que ocurre cuando la comunicación no funciona como se espera. En un sistema en el que hay muchas interfaces de red disponibles, podría no ser obvio cuál corresponde a wi-fi y al ethernet. Por esta razón, Linux utiliza una convención de nomenclatura de interfaces que ayuda a identificar qué interfaz de red corresponde a cada dispositivo y puerto.
Nombres de interfaces
Las antiguas distribuciones de Linux nombraban las interfaces de red ethernet como eth0
, eth1
, etc., numeradas según el orden en que el kernel identifica los dispositivos. Las interfaces inalámbricas se llamaban wlan0
, wlan1
, etc. Sin embargo, esta convención de nomenclatura, no aclara qué puerto ethernet específico coincide con la interfaz eth0
, por ejemplo. Dependiendo de cómo se detectara el hardware, era incluso posible que dos interfaces de red intercambiaran sus nombres después de un reinicio.
Para superar esta ambigüedad, los sistemas Linux más recientes emplean una convención de nomenclatura predecible para las interfaces de red, estableciendo una relación más estrecha entre el nombre de la interfaz y la conexión de hardware subyacente.
En las distribuciones de Linux que utilizan el esquema de nomenclatura systemd, todos los nombres de interfaz comienzan con un prefijo de dos caracteres que significa el tipo de interfaz:
en
-
Ethernet
ib
-
InfiniBand
sl
-
Serial line IP (slip)
wl
-
Wireless local area network (WLAN)
ww
-
Wireless wide area network (WWAN)
De mayor a menor prioridad, el sistema operativo utiliza las siguientes reglas para nombrar y numerar las interfaces de red:
-
Nombra la interfaz según el índice proporcionado por la BIOS o por el firmware de los dispositivos integrados, por ejemplo,
eno1
. -
Designa la interfaz según el índice de la ranura PCI express, tal y como lo indica la BIOS o el firmware, por ejemplo
ens1
. -
Nombra la interfaz según su dirección en el bus correspondiente, por ejemplo
enp3s5
. -
Designa la interfaz con la dirección MAC de la misma, por ejemplo
enx78e7d1ea46da
. -
Nombra la interfaz utilizando la convención heredada, por ejemplo
eth0
.
Es correcto suponer, que la interfaz de red enp3s5
se denominó así porque no se ajustaba a los dos primeros métodos de denominación, por lo que se utilizó en su lugar su dirección en el bus y la ranura correspondientes. La dirección del dispositivo 03:05.0
, encontrada en la salida del comando lspci
, revela el dispositivo asociado:
$ lspci | fgrep Ethernet 03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
Las interfaces de red son creadas por el propio kernel de Linux, pero hay muchos comandos que se pueden utilizar para interactuar con ellas. Normalmente, la configuración se realiza de forma automática y no es necesario cambiar la configuración manualmente. Sin embargo, con el nombre de la interfaz, es posible indicarle al kernel cómo proceder para configurarla si es necesario.
Gestión de interfaces
A lo largo de los años, se han desarrollado varios programas para interactuar con las características de red proporcionadas por el núcleo de Linux. Aunque el antiguo comando ifconfig
todavía se puede utilizar para realizar configuraciones y consultas simples de las interfaces, ahora está obsoleto debido a su limitado soporte de las interfaces que no son Ethernet. El comando ifconfig
fue sustituido por el comando ip
, que es capaz de gestionar muchos otros aspectos de las interfaces TCP/IP, como rutas y túneles.
Las muchas capacidades del comando ip
pueden ser excesivas para la mayoría de las tareas ordinarias, por lo que existen comandos auxiliares para facilitar la activación y configuración de las interfaces de red. Los comandos ifup
y ifdown
pueden utilizarse para configurar las interfaces de red basándose en las definiciones de las interfaces que se encuentran en el fichero /etc/network/interfaces
. Aunque pueden ser invocados manualmente, estos comandos se ejecutan normalmente de forma automática durante el arranque del sistema.
Todas las interfaces de red gestionadas por ifup
y ifdown
deben estar listadas en el fichero /etc/network/interfaces
. El formato utilizado en el fichero es sencillo: las líneas que comienzan con la palabra auto
se utilizan para identificar las interfaces físicas que se van a activar cuando se ejecute ifup
con la opción -a
. El nombre de la interfaz debe seguir a la palabra auto
en la misma línea. Todas las interfaces marcadas como auto
se activan en el momento del arranque, en el orden en que aparecen en la lista.
Warning
|
Los métodos de configuración de red utilizados por |
La configuración real de la interfaz se escribe en otra línea, empezando por la palabra iface
, seguida del nombre de la interfaz, el nombre de la familia de direcciones que utiliza la interfaz y el nombre del método utilizado para configurar la interfaz. El siguiente ejemplo muestra un fichero de configuración básico para las interfaces lo
(loopback) y enp3s5
:
auto lo iface lo inet loopback auto enp3s5 iface enp3s5 inet dhcp
La familia de direcciones debe ser inet
para redes TCP/IP, pero también hay soporte para redes IPX (ipx
), y redes IPv6 (inet6
). Las interfaces Loopback utilizan el método de configuración loopback
. Con el método dhcp
, la interfaz utilizará la configuración IP proporcionada por el servidor DHCP de la red. Los ajustes de la configuración de ejemplo permiten la ejecución del comando ifup
utilizando el nombre de la interfaz enp3s5
como argumento:
# ifup enp3s5 Internet Systems Consortium DHCP Client 4.4.1 Copyright 2004-2018 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on Socket/fallback DHCPDISCOVER on enp3s5 to 255.255.255.255 port 67 interval 4 DHCPOFFER of 10.90.170.158 from 10.90.170.1 DHCPREQUEST for 10.90.170.158 on enp3s5 to 255.255.255.255 port 67 DHCPACK of 10.90.170.158 from 10.90.170.1 bound to 10.90.170.158 -- renewal in 1616 seconds.
En este ejemplo, el método elegido para la interfaz enp3s5
fue dhcp
, por lo que el comando ifup
llamó a un programa cliente DHCP para obtener la configuración IP del servidor DHCP. Del mismo modo, el comando ifdown enp3s5
se puede utilizar para apagar la interfaz.
En redes sin servidor DHCP, se puede utilizar el método static
en su lugar y proporcionar la configuración IP manualmente en /etc/network/interfaces
. Por ejemplo:
iface enp3s5 inet static address 192.168.1.2/24 gateway 192.168.1.1
Las interfaces que utilizan el método static
no necesitan una directiva auto
correspondiente, ya que se activan siempre que se detecta el hardware de la red.
Si la misma interfaz tiene más de una entrada iface
, entonces todas las direcciones y opciones configuradas se aplicarán al abrir esa interfaz. Esto es útil para configurar tanto direcciones IPv4 como IPv6 en la misma interfaz, así como para configurar múltiples direcciones del mismo tipo en una sola interfaz.
Nombres locales y remotos
Una configuración TCP/IP que funcione es sólo el primer paso hacia la plena usabilidad de la red. Además de poder identificar los nodos de la red por sus números IP, el sistema debe ser capaz de identificarlos con nombres más fáciles de entender por los seres humanos.
El nombre con el que se identifica el sistema es personalizable y es una buena práctica definirlo, incluso si la máquina no está destinada a unirse a una red. El nombre local suele coincidir con el nombre de red de la máquina, pero esto no es necesariamente cierto siempre. Si el fichero /etc/hostname
existe, el sistema operativo utilizará el contenido de la primera línea como nombre local, que a partir de entonces se llamará simplemente hostname. Las líneas que comienzan con #
dentro de /etc/hostname
son ignoradas.
El fichero /etc/hostname
puede editarse directamente, pero el nombre de la máquina también puede definirse con el comando hostnamectl
. Cuando se suministra con el subcomando set-hostname
, el comando hostnamectl
tomará el nombre dado como argumento y lo escribirá en /etc/hostname
:
# hostnamectl set-hostname storage # cat /etc/hostname storage
El nombre de host definido en /etc/hostname
es el nombre de host estático, es decir, el nombre que se utiliza para inicializar el nombre de host del sistema en el arranque. El nombre de host estático puede ser una cadena de forma libre de hasta 64 caracteres. Sin embargo, se recomienda que conste sólo de caracteres ASCII en minúsculas y sin espacios ni puntos. También debe limitarse al formato permitido para las etiquetas de nombres de dominio DNS, aunque esto no es un requisito estricto.
El comando hostnamectl
puede establecer otros dos tipos de nombres de host además del nombre de host estático:
- Pretty hostname
-
A diferencia del nombre de host estático, este otro nombre puede incluir todo tipo de caracteres especiales. Se puede utilizar para establecer un nombre más descriptivo para el equipo, por ejemplo, “LAN Shared Storage”:
# hostnamectl --pretty set-hostname "LAN Shared Storage"
- Transient hostname
-
Se utiliza cuando el nombre de host estático no está establecido o cuando es el nombre
localhost
por defecto. El nombre de host transitorio es normalmente el nombre establecido junto con otras configuraciones automáticas, pero también puede ser modificado por el comandohostnamectl
, por ejemplo# hostnamectl --transient set-hostname generic-host
Si no se utiliza la opción --pretty
ni --transient
, los tres tipos de nombres de host se establecerán con el nombre dado. Para establecer el nombre de host estático, pero no los "pretty" y "transient", se debe utilizar la opción --static
. En todos los casos, sólo el nombre de host estático se almacena en el fichero /etc/hostname
. El comando hostnamectl
también se puede utilizar para mostrar varios bits de información descriptiva y de identidad sobre el sistema en ejecución:
$ hostnamectl status Static hostname: storage Pretty hostname: LAN Shared Storage Transient hostname: generic-host Icon name: computer-server Chassis: server Machine ID: d91962a957f749bbaf16da3c9c86e093 Boot ID: 8c11dcab9c3d4f5aa53f4f4e8fdc6318 Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-8-amd64 Architecture: x86-64
Esta es la acción por defecto del comando hostnamectl
, por lo que el subcomando status
puede ser omitido.
En cuanto al nombre de los nodos de la red remota, hay dos formas básicas que el sistema operativo puede implementar para hacer coincidir nombres y números IP: utilizar una fuente local o utilizar un servidor remoto para traducir los nombres en números IP y viceversa. Los métodos pueden ser complementarios entre sí y su orden de prioridad se define en el archivo de configuración Name Service Switch: /etc/nsswitch.conf
. Este fichero es utilizado por el sistema y las aplicaciones para determinar no sólo las fuentes de coincidencias nombre-IP, sino también las fuentes de las que puede obtener información de servicios de nombres en una serie de categorías, llamadas bases de datos.
La base de datos hosts lleva la cuenta del mapeo entre nombres de host y direcciones IPs. La línea dentro de /etc/nsswitch.conf
que comienza con hosts
define los servicios responsables de proporcionar las asociaciones para ello:
hosts: files dns
En esta entrada de ejemplo, files
y dns
son los nombres de servicio que especifican cómo funcionará el proceso de búsqueda de nombres de host. En primer lugar, el sistema buscará coincidencias en los archivos locales, y luego preguntará al servicio DNS por las coincidencias.
El archivo local para la base de datos de hosts es /etc/hosts
, un simple archivo de texto que asocia direcciones IP con nombres de host, una línea por dirección IP, por ejemplo:
127.0.0.1 localhost
El número de IP 127.0.0.1 es la dirección por defecto de la interfaz loopback, de ahí su asociación con el nombre localhost.
También es posible vincular alias opcionales a la misma IP. Los alias pueden proporcionar ortografías alternativas, nombres de host más cortos y deben añadirse al final de la línea, por ejemplo:
192.168.1.10 foo.mydomain.org foo
Las reglas de formato para el archivo /etc/hosts
son:
-
Los campos de la entrada están separados por cualquier número de espacios en blanco y/o caracteres de tabulación.
-
El texto desde un carácter
#
hasta el final de la línea es un comentario y se ignora. -
Los nombres de host sólo pueden contener caracteres alfanuméricos, signos menos y puntos.
-
Los nombres de host deben comenzar con un carácter alfabético y terminar con un carácter alfanumérico.
Las direcciones IPv6 también pueden añadirse a /etc/hosts
. La siguiente entrada se refiere a la dirección IPv6 loopback:
::1 localhost ip6-localhost ip6-loopback
Tras la especificación del servicio files
, la especificación dns
indica al sistema que solicite a un servicio DNS la asociación nombre/IP deseada. El conjunto de rutinas responsables de este método se llama resolver y su fichero de configuración es /etc/resolv.conf
. El siguiente ejemplo muestra un /etc/resolv.conf
genérico que contiene entradas para los servidores DNS públicos de Google:
nameserver 8.8.4.4 nameserver 8.8.8.8
Como se muestra en el ejemplo, la palabra clave nameserver
indica la dirección IP del servidor DNS. Sólo se requiere un servidor de nombres, pero se pueden indicar hasta tres servidores de nombres. Los complementarios se utilizarán como reserva. Si no hay entradas de servidor de nombres, el comportamiento por defecto es utilizar el servidor de nombres de la máquina local.
El resolvedor puede configurarse para añadir automáticamente el dominio a los nombres antes de consultarlos en el servidor de nombres. Por ejemplo:
nameserver 8.8.4.4 nameserver 8.8.8.8 domain mydomain.org search mydomain.net mydomain.com
La entrada dominio
establece midominio.org
como nombre de dominio local, por lo que las consultas de nombres dentro de este dominio podrán utilizar nombres cortos relativos al dominio local. La entrada search
tiene un propósito similar, pero acepta una lista de dominios para probar cuando se proporciona un nombre corto. Por defecto, sólo contiene el nombre del dominio local.
Ejercicios guiados
-
¿Qué comandos se pueden utilizar para enumerar los adaptadores de red presentes en el sistema?
-
¿Cuál es el tipo de adaptador de red cuyo nombre de interfaz es
wlo1
? -
¿Qué papel juega el archivo
/etc/network/interfaces
durante el arranque? -
¿Qué entrada en
/etc/network/interfaces
configura la interfazeno1
para obtener su configuración IP con DHCP?
Ejercicios de exploración
-
¿Cómo podría usarse el comando
hostnamectl
para cambiar sólo el nombre de host estático de la máquina local afirewall
? -
¿Qué detalles, además de los nombres de host, pueden ser modificados por el comando
hostnamectl
? -
¿Qué entrada en
/etc/hosts
asocia los nombresfirewall
yrouter
con la IP10.8.0.1
? -
¿Cómo se podría modificar el archivo
/etc/resolv.conf
para enviar todas las peticiones DNS a1.1.1.1
?
Resumen
Esta lección cubre cómo hacer cambios persistentes en la configuración de la red local usando archivos y comandos estándar de Linux. Linux espera que las configuraciones TCP/IP estén en lugares específicos y puede ser necesario cambiarlas cuando las configuraciones por defecto no son apropiadas. La lección pasa por los siguientes temas:
-
Cómo identifica Linux las interfaces de red.
-
La activación de interfaces durante el arranque y la configuración IP básica.
-
Cómo el sistema operativo asocia los nombres con los hosts.
Los conceptos, comandos y procedimientos abordados fueron:
-
Convenciones de nomenclatura de interfaces.
-
Listado de interfaces de red con
ip
ynmcli
. -
Activación de interfaces con
ifup
yifdown
. -
El comando
hostnamectl
y el archivo/etc/hostname
. -
Archivos
/etc/nsswitch.conf
,/etc/hosts
y/etc/resolv.conf
.
Respuestas a los ejercicios guiados
-
¿Qué comandos se pueden utilizar para enumerar los adaptadores de red presentes en el sistema?
Comandos
ip link show
,nmcli device
y el legadoifconfig
. -
¿Cuál es el tipo de adaptador de red cuyo nombre de interfaz es
wlo1
?El nombre comienza con
wl
, por lo que es un adaptador de LAN inalámbrica. -
¿Qué papel juega el archivo
/etc/network/interfaces
durante el arranque?Tiene las configuraciones utilizadas por el comando
ifup
para activar las interfaces correspondientes durante el arranque. -
¿Qué entrada en
/etc/network/interfaces
configura la interfazeno1
para obtener su configuración IP con DHCP?La línea
iface eno1 inet dhcp
.
Respuestas a los ejercicios de exploración
-
¿Cómo podría usarse el comando
hostnamectl
para cambiar sólo el nombre de host estático de la máquina local afirewall
?Con la opción
--static
:hostnamectl --static set-hostname firewall
. -
¿Qué detalles, además de los nombres de host, pueden ser modificados por el comando
hostnamectl
?hostnamectl
también puede establecer el icono por defecto de la máquina local, su tipo de chasis, la ubicación y el entorno de despliegue. -
¿Qué entrada en
/etc/hosts
asocia los nombresfirewall
yrouter
con la IP10.8.0.1
?La línea
10.8.0.1 firewall router
. -
¿Cómo se podría modificar el archivo
/etc/resolv.conf
para enviar todas las peticiones DNS a1.1.1.1
?Utilizando
nameserver 1.1.1.1
como su única entrada de servidor de nombres.