Un servidor necesita una dirección IP que no cambie: los registros DNS, las reglas de firewall y los clientes que se conectan a él dependen de ella. Cada familia de distribuciones gestiona la red con una herramienta distinta: Netplan en Ubuntu, NetworkManager en Rocky Linux y el resto de la familia RHEL, e ifupdown en Debian. En este tutorial configurarás una IP estática con cada una de ellas, aplicarás los cambios de forma segura para no perder el acceso SSH y comprobarás que la dirección, la puerta de enlace y el DNS funcionan.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, Rocky Linux 9 o Debian 12, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Los datos de red que vas a asignar: dirección IP con su prefijo (por ejemplo /24), puerta de enlace y servidores DNS. En un servidor alojado te los da el proveedor; en una red local, el administrador de la red.
  • Acceso por consola (VNC o consola web del panel) por si un error de configuración deja el servidor sin red. Es la red de seguridad de todo este tutorial.

En los ejemplos se usan direcciones de documentación que debes sustituir por las tuyas:

DatoValor de ejemplo
Interfazeth0
Dirección IP203.0.113.10/24
Puerta de enlace203.0.113.1
DNS1.1.1.1 y 9.9.9.9

Paso 1: Identificar la interfaz y la configuración actual

Antes de cambiar nada, anota cómo está la red ahora. Lista las interfaces y sus direcciones:

ip -brief address
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             203.0.113.10/24 fe80::be24:11ff:fe2a:3b4c/64

La interfaz que te interesa es la que tiene la dirección pública o de la red local (aquí eth0; en tu sistema puede llamarse ens18, enp1s0 o similar). Consulta también la ruta por defecto, que te indica la puerta de enlace actual:

ip route show default
default via 203.0.113.1 dev eth0 proto static

Y los servidores DNS en uso. En Ubuntu, que usa systemd-resolved:

resolvectl status eth0

En Rocky Linux y Debian basta con leer /etc/resolv.conf:

cat /etc/resolv.conf

Guarda estos valores. Si vas a cambiar la IP de un servidor remoto, recuerda que la sesión SSH se cortará en cuanto la IP cambie y tendrás que reconectar a la nueva dirección.

Paso 2: IP estática con Netplan (Ubuntu 24.04)

Netplan lee archivos YAML de /etc/netplan/ y genera la configuración para systemd-networkd (en servidores) o NetworkManager (en escritorios). Lista los archivos existentes:

ls /etc/netplan/
50-cloud-init.yaml

Evitar que cloud-init sobrescriba la configuración

Si el archivo se llama 50-cloud-init.yaml, la red la genera cloud-init al arrancar, como ocurre en la mayoría de VPS. Si cloud-init ya configura correctamente tu IP, solo necesitas este paso cuando vayas a cambiar la configuración a mano (por ejemplo, para añadir una IP adicional). Para que cloud-init no vuelva a escribir la red en el siguiente arranque, desactiva su gestión de red:

sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network: {config: disabled}

Escribir la configuración

Crea tu propio archivo con un número mayor, para que tenga prioridad y quede claro que lo gestionas tú:

sudo nano /etc/netplan/60-static.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      addresses:
        - 203.0.113.10/24
      routes:
        - to: default
          via: 203.0.113.1
      nameservers:
        addresses:
          - 1.1.1.1
          - 9.9.9.9

Algunas claves importantes:

  • addresses admite varias direcciones, incluidas IPv6, cada una con su prefijo.
  • routes con to: default sustituye a la antigua clave gateway4, que está obsoleta y genera un aviso.
  • YAML depende de la indentación: usa siempre espacios, nunca tabuladores.

Si has desactivado cloud-init, mueve su archivo fuera de /etc/netplan/ para que no haya dos configuraciones de la misma interfaz:

sudo mv /etc/netplan/50-cloud-init.yaml /root/50-cloud-init.yaml.bak

Netplan avisa si los archivos son legibles por otros usuarios, porque pueden contener contraseñas de Wi-Fi. Restringe los permisos:

sudo chmod 600 /etc/netplan/60-static.yaml

Aplicar los cambios de forma segura

Valida la sintaxis antes de aplicar:

sudo netplan generate

Si no muestra nada, el YAML es correcto. Ahora aplica la configuración con netplan try, que la activa y espera tu confirmación durante 120 segundos. Si pierdes la conexión y no puedes pulsar Enter, revierte automáticamente a la configuración anterior:

sudo netplan try
Do you want to keep these settings?

Press ENTER before the timeout to accept the new configuration

Changes will revert in 118 seconds

Pulsa Enter para confirmar. Si el cambio de IP implica que tu sesión SSH se corta, netplan try no podrá recibir la confirmación y revertirá. En ese caso, aplica la configuración desde la consola del panel con:

sudo netplan apply

Comprueba el resultado:

ip -brief address show eth0
ip route show default
resolvectl dns eth0
eth0             UP             203.0.113.10/24 fe80::be24:11ff:fe2a:3b4c/64
default via 203.0.113.1 dev eth0 proto static
Link 2 (eth0): 1.1.1.1 9.9.9.9

Paso 3: IP estática con NetworkManager (Rocky Linux 9)

En Rocky Linux, AlmaLinux, RHEL 9 y Fedora la red la gestiona NetworkManager, y la forma recomendada de configurarla en un servidor es nmcli. Desde RHEL 9 los perfiles se guardan como archivos de NetworkManager en /etc/NetworkManager/system-connections/; los antiguos ifcfg-eth0 de network-scripts están obsoletos, así que no los edites a mano.

Localizar la conexión

NetworkManager trabaja con conexiones (perfiles), que no siempre se llaman igual que la interfaz. Lista las conexiones:

nmcli connection show
NAME         UUID                                  TYPE      DEVICE
System eth0  5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0
lo           0f1b9a3c-8c1d-4c6e-9d0f-8c3b1e2f4a5b  loopback  lo

Usa el valor de la columna NAME (aquí System eth0, entre comillas porque tiene un espacio).

Configurar la dirección

Asigna dirección, puerta de enlace y DNS, y cambia el método de auto (DHCP) a manual. Todas las propiedades se pueden pasar en una sola orden:

sudo nmcli connection modify "System eth0" \
  ipv4.method manual \
  ipv4.addresses 203.0.113.10/24 \
  ipv4.gateway 203.0.113.1 \
  ipv4.dns "1.1.1.1 9.9.9.9"

Revisa que los valores se han guardado:

nmcli -g ipv4.method,ipv4.addresses,ipv4.gateway,ipv4.dns connection show "System eth0"
manual
203.0.113.10/24
203.0.113.1
1.1.1.1,9.9.9.9

Aplicar los cambios

Los cambios no se aplican hasta que reactivas la conexión:

sudo nmcli connection up "System eth0"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

Si la IP nueva es distinta de la actual, lanza este comando desde la consola del panel o reconecta a la nueva dirección. Verifica:

ip -brief address show eth0
ip route show default
cat /etc/resolv.conf

Si prefieres una interfaz de menús, sudo nmtui permite hacer los mismos cambios en "Edit a connection". Al terminar, usa "Activate a connection" para desactivarla y activarla de nuevo.

Paso 4: IP estática con ifupdown (Debian 12)

Debian 12 en servidores usa ifupdown, que lee /etc/network/interfaces. Haz una copia de seguridad antes de editarlo:

sudo cp /etc/network/interfaces /etc/network/interfaces.bak

Si tu VPS usa cloud-init, desactiva su gestión de red igual que en el paso 2 creando /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg. En ese caso la configuración de la interfaz puede estar en un archivo dentro de /etc/network/interfaces.d/; revisa su contenido con ls /etc/network/interfaces.d/ y edita o elimina ese archivo para que la interfaz no quede definida dos veces.

Abre el archivo:

sudo nano /etc/network/interfaces

Sustituye el bloque de tu interfaz (normalmente iface eth0 inet dhcp) por uno estático:

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 203.0.113.10/24
    gateway 203.0.113.1

auto eth0 hace que la interfaz se active al arrancar. La dirección se escribe con su prefijo en la línea address, sin necesidad de la antigua línea netmask.

Configurar el DNS

ifupdown no gestiona el DNS por sí solo. En una instalación básica de Debian 12, el archivo /etc/resolv.conf es un archivo normal que puedes editar:

sudo nano /etc/resolv.conf
nameserver 1.1.1.1
nameserver 9.9.9.9

Aplicar los cambios

Reinicia la interfaz. Hazlo en una sola línea para que la sesión SSH no se quede a medias entre el ifdown y el ifup, y preferiblemente desde la consola del panel:

sudo ifdown eth0 && sudo ifup eth0

Comprueba la configuración:

ip -brief address show eth0
ip route show default
eth0             UP             203.0.113.10/24 fe80::be24:11ff:fe2a:3b4c/64
default via 203.0.113.1 dev eth0 onlink

Paso 5: Verificar la conectividad

Con cualquiera de los tres métodos, termina con las mismas comprobaciones. Primero, que llegas a la puerta de enlace:

ping -c 3 203.0.113.1

Después, que sales a Internet usando una IP, sin depender del DNS:

ping -c 3 1.1.1.1
3 packets transmitted, 3 received, 0% packet loss, time 2003ms

Por último, que la resolución de nombres funciona:

getent hosts cubepath.com

Si esta última falla pero las anteriores funcionan, el problema es exclusivamente del DNS. Para comprobar que la configuración sobrevive a un reinicio, reinicia el servidor y repite estas pruebas:

sudo reboot

Solución de problemas

He perdido el acceso SSH tras aplicar los cambios

Entra por la consola del panel. En Ubuntu restaura el archivo de cloud-init (sudo mv /root/50-cloud-init.yaml.bak /etc/netplan/), borra tu 60-static.yaml y ejecuta sudo netplan apply. En Debian restaura /etc/network/interfaces.bak. En Rocky, revisa los valores con nmcli connection show "System eth0" y corrígelos.

netplan muestra Error in network definition o errores de indentación

El YAML está mal indentado o hay tabuladores. Revisa que cada nivel use dos espacios y que las listas empiecen con - . sudo netplan generate indica la línea del error.

La IP se pierde después de reiniciar

Casi siempre es cloud-init regenerando la red en el arranque. Comprueba que existe /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg con network: {config: disabled}.

ping a IPs funciona pero no se resuelven nombres

Revisa el DNS con resolvectl status (Ubuntu) o cat /etc/resolv.conf (Debian, Rocky). Asegúrate de que el firewall permite el tráfico saliente al puerto 53.

RTNETLINK answers: File exists en Debian

La interfaz ya tenía una dirección o ruta asignada. Ejecuta sudo ip address flush dev eth0 desde la consola y vuelve a lanzar sudo ifup eth0.

Conclusión

Has configurado una IP estática con Netplan en Ubuntu 24.04, con nmcli en Rocky Linux 9 y con ifupdown en Debian 12, aplicando los cambios de forma que puedas recuperar el servidor si algo falla, y has verificado puerta de enlace, conectividad y DNS. Como siguientes pasos puedes añadir una segunda dirección a la misma interfaz, configurar también IPv6 o actualizar los registros DNS de tus dominios para que apunten a la nueva IP.