Hay muchos casos en los que podemos querer establecer una IP estática para una interfaz de red. En RHEL 8 / CentOS 8, las conexiones de red son administradas por el demonio NetworkManager, por lo que en este tutorial vemos cómo podemos realizar dicha tarea editando un archivo de interfaz directamente, usando una utilidad de línea de comando, nmcli
, o a través de una interfaz de usuario de texto, nmtui
.
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | RHEL 8 / CentOS 8 |
Software | Todo el software mencionado en este tutorial está incluido en una instalación mínima de RHEL 8 o CentOS 8. |
Otro | Permiso para ejecutar el comando con privilegios de root. |
Convenciones | # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Introducción
En Red Hat Enterprise Linux 8, las interfaces de red son administradas por NetworkManager
daemon, por lo que para cambiar la configuración de una interfaz de red debemos interactuar de alguna manera con ella. En este tutorial, veremos cómo podemos configurar una dirección IP estática, una puerta de enlace y un servidor dns para una NIC utilizando tres métodos diferentes.
Identificando nuestra interfaz
Lo primero que queremos hacer es encontrar la interfaz que queremos modificar. Para listar todas las interfaces en nuestro sistema, podemos usar ip addr
comando:
$ ip addr
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.122.189/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
valid_lft 3004sec preferred_lft 3004sec
inet6 fe80::9ab6:ba48:1ddd:a8e1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
</broadcast,multicast,up,lower_up></loopback,up,lower_up>
En el resultado anterior, que es el resultado de ejecutar el comando en mi máquina virtualizada rhel8, podemos ver dos interfaces:lo
y enp1s0
. La primera es una interfaz “virtual”, que es utilizada por el sistema para “hablar” consigo mismo. La segunda es la que nos interesa, y actualmente su dirección IPv4 es 192.168.122.189:queremos cambiarla.
Método 1:modificar manualmente el archivo de configuración de la interfaz
Para cada interfaz de red administrada por el demonio NetworkManager, se crea un archivo de configuración dentro de /etc/sysconfig/network-scripts
directorio. El nombre del archivo está compuesto por ifcfg-
prefijo más el nombre de la interfaz. Si inspeccionamos el archivo relacionado con nuestra NIC, podemos ver su configuración real:
$ cat /etc/sysconfig/network-scrIPts/ifcfg-enp1s0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp1s0"
UUID="d5f41bf4-de0a-43b3-b633-7e2ec6212e58"
DEVICE="enp1s0"
ONBOOT="yes"
El BOOTPROTO
la opción está establecida en dhcp
:la opción establece el protocolo que se utilizará en el arranque para establecer la dirección IP de la interfaz. Las posibles opciones a utilizar son:
- ninguno:no se debe utilizar ningún protocolo
- bootp:usa el protocolo bootp
- dhcp:utiliza el protocolo dhcp
Como queremos establecer una dirección IPv4 estática, queremos cambiar el valor de BOOTPROTO a none
y configurar nuestra IP, prefijo de ruta, puerta de enlace y servidor dns de forma estática. Podemos lograr esto usando respectivamente el IPADDR
, PREFIX
, GATEWAY
y DNS
opciones Dado que se pueden especificar muchos servidores dns, el DNS
La opción debe ser reportada junto con un número progresivo, a partir de 1. Después de las modificaciones necesarias, nuestro archivo debería verse
así:
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp1s0"
UUID="d5f41bf4-de0a-43b3-b633-7e2ec6212e58"
DEVICE="enp1s0"
ONBOOT="yes"
IPADDR=192.168.122.66
PREFIX=24
GATEWAY=192.168.122.1
DNS1=192.168.122.1
Establecemos nuestra IP estática en 192.168.122.66
y configure tanto nuestra puerta de enlace como el servidor dns en 192.168.122.1
. Ahora, para que nuestros cambios sean efectivos, debemos bajar y volver a subir la interfaz de red. Tenga en cuenta que esto interrumpirá las conexiones ssh existentes a través de dicha interfaz:
$ sudo nmcli connection down enp1s0 && sudo nmcli connection up enp1s0
Ejecutando ip addr
comando nuevamente podemos verificar que la IP ha cambiado:
IP addr|grep enp1s0|grep inet
inet 192.168.122.66/24 brd 192.168.122.255 scope global noprefix
Método 2:usar nmcli
Nmcli
es una herramienta de línea de comandos utilizada para controlar NetworkManager. Al usarlo podemos, entre otras cosas, cambiar la configuración de red para una interfaz específica. En nuestro caso debemos usar nmcli con la connection
subcomando con modify
o el edit
acción. El primero nos permite cambiar la configuración directamente, mientras que el segundo lanza el shell nmcli, donde podemos operar de forma interactiva.
Usando nmcli directamente
Para cambiar la dirección IP de la interfaz “enp1s0” con un comando directo nmcli, ejecutamos:
$ sudo nmcli connection modify enp1s0 IPv4.address 192.168.122.66/24
Tenga en cuenta que especificamos el prefijo de enrutamiento junto con la IP usando el llamado CIDR
notación (Enrutamiento entre dominios de clases). Usamos una sintaxis similar para cambiar la puerta de enlace y la configuración de dns:
$ sudo nmcli connection modify enp1s0 IPv4.gateway 192.168.122.1
$ sudo nmcli connection modify enp1s0 IPv4.dns 192.168.122.1
Finalmente, configuramos el método en manual
para evitar el uso de cualquier otro protocolo de arranque para la interfaz. Este comando establece la opción BOOTPROTO en ninguno en el archivo de configuración de la interfaz:
$ sudo nmcli connection modify enp1s0 IPv4.method manual
Uso de shell nmcli
Como mencionamos anteriormente, también podemos usar un método interactivo para realizar los mismos cambios. Para ingresar al nmcli shell
usamos el edit
acción, seguida del nombre de la interfaz que queremos editar:
$ sudo nmcli connection edit enp1s0
===| nmcli interactive connection editor |===
Editing existing '802-3-ethernet' connection: 'enp1s0'
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [.]' for detailed property descrIPtion.
You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, IPv4, IPv6, tc, proxy
nmcli>
El cursor parpadeante nos dice que el shell está aceptando comandos:podemos escribir help
para obtener una lista de los disponibles, print
para ver todas las propiedades de la conexión o describe
seguido de una configuración y una de sus propiedades (representadas con una notación de punto), para obtener una descripción de este último. Por ejemplo:
nmcli>
nmcli> describe IPv4.address
=== [addresses] ===
[NM property descrIPtion]
Array of IP addresses.
[nmcli specific descrIPtion]
Enter a list of IPv4 addresses formatted as:
IP[/prefix], IP[/prefix],...
Missing prefix is regarded as prefix of 32.
Example: 192.168.1.5/24, 10.0.0.11/24
Para cambiar la dirección de nuestra interfaz:
nmcli> set IPv4.address 192.168.122.66/24
El mismo principio se usa para cambiar las otras propiedades:
nmcli> set IPv4.gateway 192.168.122.1
nmcli> set IPv4.dns 192.168.122.1
nmcli> set IPv4.method manual
Para guardar las modificaciones que hicimos, necesitamos emitir un último comando:
nmcli> save
Connection 'enp1s0' (d5f41bf4-de0a-43b3-b633-7e2ec6212e58) successfully updated.
Para salir del intérprete de comandos nmcli simplemente escriba quit
y presiona enter:
nmcli> quit
Nuevamente, para que los cambios sean efectivos, debemos volver a cargar la interfaz con el mismo comando que usamos antes.
Método 3:usando nmtui
Además de cambiar los parámetros de una interfaz de red modificando su archivo manualmente o usando la utilidad nmcli, también podemos controlar NetworkManager usando una interfaz de usuario de texto. Para lanzarlo simplemente invocamos nmtui
en nuestra terminal:
$ sudo nmtui
La interfaz de usuario de texto nmtui
Seleccionamos Edit a connection
y luego el nombre de la interfaz que queremos manipular; luego procedemos a cambiar los valores deseados. Por ejemplo:
Edición de la configuración de conexión con nmtui
Una vez que estemos satisfechos, seleccionamos OK
y pulsamos enter:volveremos al menú de selección de interfaz. Esta vez seleccionamos back
y luego elige quit
salir. Para aplicar la configuración necesitamos volver a cargar la interfaz de conexión:
$ sudo nmcli connection down enp1s0 && sudo nmcli connection up enp1s0
Conclusiones
En este tutorial vimos tres métodos que podemos usar para configurar una dirección IP estática en Red Hat Enterprise Linux 8. Vemos qué opciones debemos cambiar y qué debemos agregar en el archivo de configuración de la interfaz al editarlo manualmente, y cómo realizar la mismos cambios usando nmcli y nmtui, que son respectivamente una utilidad de línea de comandos y una interfaz de usuario de texto:ambos se usan para controlar el demonio NetworkManager.