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 único 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 tanto a una reconfiguración de red como 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 mejor se adapte a su caso.

Cuándo necesita varias direcciones IP

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

  • Servidores de correo que utilizan direcciones y registros PTR independientes 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 punto final VPN está vinculado a su propia dirección pública.
  • Contenedores o máquinas virtuales que utilizan direcciones IP enrutadas.

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

Antes de empezar

Necesita acceso root y el nombre de la interfaz que llevará las direcciones adicionales. Las versiones modernas de Debian y Ubuntu ya no utilizan el antiguo nombre eth0, así que no lo dé por hecho. Enumere las interfaces junto con sus direcciones actuales e identifique la que ya contiene 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 se debe usar en los pasos siguientes. Los ejemplos aquí usan ens3.

Warning

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 acceso 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.

Creación del script de direcciones

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

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

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

#!/bin/bash set -euo pipefail # Interface that will carry the additional addresses. IFACE="ens3" # Common prefix and the first and last value of the host octet. # Replace these with the block assigned to you. PREFIX="203.0.113" FIRST=10 LAST=60 # Stop early with a clear message if the interface name is wrong. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Interface $IFACE not found. Check the name with: 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 de forma intencionada. 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 rutas. El script usa ip addr replace en lugar de ip addr add para poder volver a ejecutarse de forma segura sin fallar en 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 manualmente añade las direcciones solo hasta el próximo reinicio. Para aplicarlas automáticamente al arrancar, cree un servicio systemd que ejecute el script durante el arranque. Este método funciona de la misma manera tanto si el sistema usa netplan, systemd-networkd o la pila ifupdown más antigua.

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 habilite 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 inició correctamente:

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

Warning

Las direcciones añadidas por este script no forman parte de la configuración de netplan ni de systemd-networkd. Un posterior netplan apply, un networkctl reconfigure o cualquier reinicio de red puede eliminarlas. Vuelven a aparecer en el siguiente reinicio, o de inmediato si ejecuta systemctl restart extra-ips.service. Si las direcciones también deben permanecer intactas tras 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 el sistema predeterminado, las direcciones pueden declararse directamente en netplan. La pila de red las trata entonces como direcciones gestionadas, por lo que sobreviven a una reconfiguración. Esto resulta adecuado para una lista pequeña y fija. Para un rango grande, el servicio systemd descrito anteriormente 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 forma inesperada, lo que puede eliminar 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, comúnmente /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 siguiente ejemplo 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 puede ser leído por otros usuarios. Restrinja los permisos para eliminar esa advertencia:

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

Pruebe el cambio con netplan try. Este comando aplica la configuración y la revierte automáticamente después 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 parece correcto, confirme cuando se le solicite y, a continuación, aplique la configuración de forma permanente:

netplan apply

Verificación del resultado

Enumere 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 después de cada reinicio.

Eliminación de las direcciones

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

ip addr del 203.0.113.10/32 dev ens3

Si utilizó el script y el servicio, deje de asignar todo el rango al arrancar deshabilitando y eliminando el servicio:

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

Si utilizó 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 se inicia, compruebe su estado y sus 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 obtenido con ip -br addr show;
  • las direcciones pertenecen al bloque asignado a usted;
  • el script es ejecutable.

Si usó por error un prefijo /24 en lugar de /32, la tabla de rutas 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 normalmente se añaden 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