Cómo registrar un gran número de direcciones IP con Debian/Ubuntu | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Cómo registrar un gran número de direcciones IP con Debian/Ubuntu

Un solo servidor a menudo necesita más de una dirección IP. Esta guía explica dos formas de asignar varias direcciones IPv4 a una sola interfaz de red en Debian y Ubuntu:

  • automáticamente, con un script de shell y un servicio systemd, recomendado para rangos grandes;
  • directamente en netplan, recomendado cuando las direcciones deben sobrevivir a una reconfiguración de red además de a un reinicio.

Ambos métodos hacen que la configuración persista tras los reinicios. Lea la nota al final de cada método para elegir el que se ajuste a su caso.

Cuándo necesita varias direcciones IP

Varias cargas de trabajo habituales en un solo servidor requieren más de una dirección pública:

  • Servidores de correo que usan direcciones separadas y registros PTR para aislar la reputación de envío de distintos dominios.
  • Servidores web que requieren direcciones dedicadas para aplicaciones heredadas, aislamiento de clientes o políticas de firewall específicas.
  • Infraestructura de proxy y VPN, donde cada instancia de proxy o cada extremo VPN está vinculado a su propia dirección pública.
  • Contenedores o máquinas virtuales que usan direcciones IP enrutadas.

Los planes VPS de INTROSERV incluyen dos direcciones IPv4 y una subred IPv6 /112 de forma predeterminada. Hay direcciones IPv4 adicionales disponibles en muchas ubicaciones. Consulte la disponibilidad para su región en el configurador de pedidos.

Antes de empezar

Necesita acceso de root y el nombre de la interfaz que llevará las direcciones adicionales. Las versiones modernas de Debian y Ubuntu ya no usan el antiguo nombre eth0, así que no lo dé por hecho. Liste las interfaces junto con sus direcciones actuales e identifique la que ya tiene su dirección principal:

ip -br addr show

La salida muestra entradas como ens3, enp1s0 o eth0 junto a las direcciones ya configuradas en ellas. La interfaz que ya lleva su IP principal es la que debe usar en los pasos siguientes. Los ejemplos aquí usan ens3.

Advertencia: Estos pasos modifican la configuración de red en un servidor al que probablemente accede por SSH. Un error puede cortar su propio acceso. Mantenga una segunda vía de entrada si dispone de ella, como la consola del proveedor o IP-KVM, y prefiera las opciones de aplicación segura que se muestran a continuación.

Crear el script de direcciones

Un script corto añade un rango de direcciones de una sola vez. Créelo en /usr/local/sbin:

nano /usr/local/sbin/extra-ips.sh

Pegue el siguiente script. Sustituya el nombre de la interfaz, el prefijo y el rango por el bloque que se le ha asignado. Las direcciones de abajo usan el rango de documentación de RFC 5737 y son marcadores de posición:

#!/bin/bash set -euo pipefail # Interfaz que llevará las direcciones adicionales. IFACE="ens3" # Prefijo común y el primer y el último valor del octeto de host. # Sustitúyalos por el bloque que se le ha asignado. PREFIX="203.0.113" FIRST=10 LAST=60 # Detenerse pronto con un mensaje claro si el nombre de la interfaz es incorrecto. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Interfaz $IFACE no encontrada. Compruebe el nombre con: ip -br addr show" >&2 exit 1 fi for HOST in $(seq "$FIRST" "$LAST"); do ip addr replace "${PREFIX}.${HOST}/32" dev "$IFACE" done

Info: Las direcciones usan un prefijo /32 a propósito. La interfaz principal ya posee la ruta de su subred, por lo que cada dirección secundaria solo necesita una ruta de host local. Un prefijo /32 evita que el kernel añada una ruta de subred duplicada y mantiene limpia la tabla de enrutamiento. El script usa ip addr replace en lugar de ip addr add para que pueda volver a ejecutarse con seguridad sin generar un error con las direcciones que ya existen.

Haga el script ejecutable. Tenga en cuenta la ruta completa, que era la parte que faltaba en la versión anterior de esta guía:

chmod +x /usr/local/sbin/extra-ips.sh

Hacer que las direcciones persistan con un servicio systemd

Ejecutar el script a mano añade las direcciones solo hasta el siguiente reinicio. Para aplicarlas automáticamente al arrancar, cree un servicio systemd que ejecute el script durante el arranque. Este método funciona igual tanto si el sistema usa netplan, systemd-networkd o el antiguo stack ifupdown.

Cree el archivo de unidad:

nano /etc/systemd/system/extra-ips.service

Añada lo siguiente:

[Unit] Description=Assign additional IP addresses After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/extra-ips.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target

Recargue systemd y active el servicio para que se ejecute ahora y en cada arranque:

systemctl daemon-reload systemctl enable --now extra-ips.service

Confirme que el servicio se ha iniciado correctamente:

systemctl status --no-pager extra-ips.service

Advertencia: Las direcciones añadidas por este script no forman parte de la configuración de netplan ni de systemd-networkd. Un netplan apply posterior, un networkctl reconfigure o cualquier reinicio de red puede eliminarlas. Vuelven en el siguiente reinicio, o de inmediato si ejecuta systemctl restart extra-ips.service. Si las direcciones también deben mantenerse a través de una reconfiguración de red, use en su lugar el método de netplan que se describe a continuación.

Alternativa: definir las direcciones en netplan

En Ubuntu, donde netplan es la opción predeterminada, las direcciones pueden declararse en el propio netplan. El stack de red las trata entonces como direcciones gestionadas, de modo que sobreviven a una reconfiguración. Esto es adecuado para una lista pequeña y fija. Para un rango grande, el servicio systemd de arriba escala mejor, ya que netplan necesita una línea por dirección.

Cuando varios archivos de netplan definen la misma interfaz, sus ajustes pueden sobrescribirse o combinarse de formas inesperadas, lo que puede descartar su dirección principal y cortar el acceso. Editar el archivo de configuración existente suele ser más seguro que crear otro archivo para la misma interfaz. Abra el archivo que ya configura su interfaz, normalmente /etc/netplan/50-cloud-init.yaml o /etc/netplan/00-installer-config.yaml:

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

Conserve todos los ajustes existentes de la interfaz, como dhcp4, la dirección principal, la puerta de enlace y los servidores de nombres. Añada las direcciones adicionales bajo una lista addresses en la misma interfaz. El ejemplo de abajo mantiene DHCP para la dirección principal y añade tres direcciones secundarias:

network: version: 2 ethernets: ens3: dhcp4: true addresses: - 203.0.113.10/32 - 203.0.113.11/32 - 203.0.113.12/32

Las versiones recientes de netplan advierten si el archivo es legible por otros usuarios. Restrinja los permisos para eliminar esa advertencia:

chmod 600 /etc/netplan/50-cloud-init.yaml

Pruebe el cambio con netplan try. Aplica la configuración y la revierte automáticamente al cabo de 120 segundos a menos que la confirme, lo que le protege de perder el acceso remoto:

netplan try

Si la conexión se mantiene y todo se ve correcto, confirme cuando se le pida y luego aplique la configuración de forma permanente:

netplan apply

Verificar el resultado

Liste las direcciones actualmente vinculadas a la interfaz y confirme que las nuevas están presentes:

ip -br addr show ens3

Las direcciones adicionales deberían aparecer ahora en la salida y se restaurarán automáticamente tras cada reinicio.

Eliminar las direcciones

Para eliminar una sola dirección, bórrela de la interfaz:

ip addr del 203.0.113.10/32 dev ens3

Si usó el script y el servicio, detenga la asignación de todo el rango en el arranque desactivando y eliminando el servicio:

systemctl disable --now extra-ips.service rm /etc/systemd/system/extra-ips.service systemctl daemon-reload

Si usó netplan, elimine las líneas adicionales de la lista addresses en el archivo de netplan y luego ejecute netplan apply.

Solución de problemas

Si el servicio no arranca, compruebe su estado y los registros:

systemctl status --no-pager extra-ips.service journalctl -u extra-ips.service

Confirme lo siguiente:

  • el nombre de la interfaz en el script coincide con el nombre real de ip -br addr show;
  • las direcciones pertenecen al bloque que se le ha asignado;
  • el script es ejecutable.

Si usó por error un prefijo /24 en lugar de /32, la tabla de enrutamiento muestra el síntoma como varias rutas de subred duplicadas. Compruébelo con:

ip route

Esta guía se centra en IPv4. Al igual que con IPv4, las direcciones IPv6 secundarias se añaden normalmente como direcciones de host con un prefijo /128, usando el mismo comando ip addr replace, por ejemplo ip addr replace 2001:db8::10/128 dev ens3.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA