Configuración de IPv6 en servidores VPS y dedicados
Nivel: Principiante / Intermedio
Tiempo estimado: ~30 minutos
Objetivo: Habilitar y configurar la red IPv6 en un servidor dedicado o VPS para que el servidor sea accesible por IPv6 y todos los servicios de red funcionen correctamente con la nueva dirección.
Introducción
Es probable que su servidor INTROSERV ya tenga una dirección IPv6 asignada; simplemente aún no está configurada. En esta guía de configuración de red IPv6 en un VPS, habilitará IPv6 en un servidor Linux, asignará una dirección IPv6 estática, configurará la puerta de enlace IPv6 en Linux y comprobará la conectividad. La guía abarca Ubuntu (Netplan), Debian (/etc/network/interfaces) y AlmaLinux (nmcli).
¿Qué es IPv6?
IPv6 (Internet Protocol versión 6) es la generación actual del Protocolo de Internet y está diseñado para sustituir a IPv4. Las diferencias prácticas más importantes para los administradores de servidores:
- Una dirección IPv6 tiene 128 bits y se escribe como ocho grupos de cuatro dígitos hexadecimales separados por dos puntos:
2001:db8:85a3::8a2e:370:7334. - Una Global Unicast Address (GUA) es el equivalente IPv6 de una dirección IPv4 pública: es enrutable en Internet. A su VPS se le asignará una.
- Una dirección link-local se asigna automáticamente a cada interfaz compatible con IPv6 (prefijo
fe80::/10). No es enrutable más allá del segmento local, pero es imprescindible para el descubrimiento de vecinos y los protocolos de enrutamiento. - Una subred (prefijo IPv6) define qué parte de la dirección identifica la red. En un VPS típico verá un prefijo
/64o/128. - La puerta de enlace predeterminada (IPv6) es el router al que su servidor envía los paquetes cuando el destino no está en el enlace local. Su proveedor le facilitará esta dirección.
Requisitos previos
Antes de empezar, asegúrese de cumplir las siguientes condiciones:
- Sistema operativo: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12/13 o AlmaLinux/RHEL 8/9/10
- Acceso: acceso sudo o root al servidor por SSH
- Asignación IPv6: una dirección IPv6, un prefijo de subred y una puerta de enlace predeterminada proporcionados por su proveedor de alojamiento. Consúltelos en su panel de control antes de empezar.
- Conocimientos necesarios: manejo seguro de la línea de comandos de Linux y edición básica de archivos de configuración
En INTROSERV puede consultar la dirección IPv6, el prefijo y la puerta de enlace asignados en el Client Area: acceda a su servicio y abra la pestaña Network o IP Addresses. Los planes VPS de INTROSERV suelen recibir un prefijo /112, mientras que los servidores dedicados reciben un prefijo /64. Si no aparece ninguna dirección IPv6, contacte con el soporte de INTROSERV para solicitar la asignación.
Paso 1: Comprobar el estado actual de IPv6
Antes de tocar ninguna configuración, compruebe qué información tiene ya el kernel.
Ejecute:
ip -6 addr show
Salida esperada en un servidor sin configuración IPv6 aplicada todavía:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP inet6 fe80::250:56ff:fe00:1/64 scope link valid_lft forever preferred_lft forever
La dirección fe80:: es la dirección link-local: el kernel la asigna automáticamente, sin importar la configuración. La ausencia de una entrada con scope global indica que aún no hay ninguna Global Unicast Address configurada.
Compruebe también si IPv6 está habilitado en el kernel:
sudo sysctl net.ipv6.conf.all.disable_ipv6
En Debian 13, los usuarios normales no tienen /usr/sbin en su $PATH, por lo que ejecutar sysctl sin sudo devolverá command not found. Además, una instalación mínima de Debian 13 no incluye sudo de forma predeterminada. Deberá cambiar al usuario root (su -), instalar sudo (apt install sudo) y añadir su usuario al grupo sudoers antes de continuar.
Salida esperada:
net.ipv6.conf.all.disable_ipv6 = 0
Un valor 0 significa que IPv6 está habilitado. Si ve 1, IPv6 se ha deshabilitado a nivel de kernel.
Para volver a habilitarlo temporalmente:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
Para que el cambio sea permanente, busque en /etc/sysctl.conf o en los archivos de /etc/sysctl.d/ una línea con net.ipv6.conf.all.disable_ipv6 = 1, elimínela o coméntela y ejecute:
sudo sysctl -p
Paso 2: Averiguar el nombre de la interfaz
Necesita el nombre exacto de su interfaz de red pública antes de editar cualquier archivo de configuración.
Ejecute:
ip -br link
Salida esperada:
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> eth0 UP 00:50:56:00:00:01 <BROADCAST,MULTICAST,UP,LOWER_UP>
La interfaz en estado UP con una dirección MAC es su interfaz principal. Los nombres habituales son eth0, ens3, ens18, ens33, ens160 (habitual en VMware y en kernels modernos) y variantes similares ensXX/enpXsX. Use el nombre exacto que muestre ip -br link en todos los pasos de configuración siguientes.
Paso 3: Configurar una dirección IPv6 estática
El método de configuración depende de su distribución. Ubuntu 18.04 y posteriores usan Netplan; Debian usa /etc/network/interfaces de forma predeterminada; AlmaLinux usa NetworkManager o scripts de interfaz en /etc/sysconfig/network-scripts/.
Reúna los siguientes valores del panel de control de su proveedor antes de continuar:
| Campo | Ejemplo |
|---|---|
| Dirección IPv6 | 2001:db8:1000::10 |
| Longitud del prefijo | 64 |
| Puerta de enlace predeterminada (IPv6) | 2001:db8:1000::1 |
Sustituya estos valores de ejemplo por los reales en todos los pasos siguientes.
3.1 Ubuntu (Netplan)
Ubuntu utiliza la configuración IPv6 de Netplan. Los archivos de configuración se encuentran en /etc/netplan/.
En primer lugar, liste el contenido del directorio /etc/netplan/ para localizar su archivo de configuración:
ls /etc/netplan/
Un nombre de archivo fijo como 00-installer-config.yaml no existe en la mayoría de los VPS. En las imágenes con cloud-init suele llamarse 50-cloud-init.yaml. Use en los pasos siguientes el nombre real que obtuvo con el comando anterior.
Haga una copia de seguridad del archivo existente (sustituya 50-cloud-init.yaml por el nombre real de su archivo):
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
Abra el archivo:
sudo nano /etc/netplan/50-cloud-init.yaml
Añada los bloques addresses y routes bajo su interfaz. Un archivo completo con IPv4 (ya configurada) y la nueva dirección IPv6 estática tiene este aspecto:
network: version: 2 ethernets: eth0: addresses: - 203.0.113.10/24 # existing IPv4 address - 2001:db8:1000::10/64 # new IPv6 address routes: - to: default via: 203.0.113.1 # existing IPv4 gateway - to: default via: 2001:db8:1000::1 # IPv6 default gateway nameservers: addresses: - 8.8.8.8 - 2001:4860:4860::8888 # Google public DNS over IPv6
Si su servidor obtiene la dirección IPv4 mediante DHCP (algo habitual en muchos VPS recién creados), su archivo será ligeramente distinto. No copie sin más la configuración IPv4 estática anterior, o perderá su conexión IPv4 operativa. Este es un ejemplo con dhcp4: true:
network: version: 2 ethernets: eth0: dhcp4: true addresses: - 2001:db8:1000::10/64 # new IPv6 address routes: - to: default via: 2001:db8:1000::1 # IPv6 default gateway nameservers: addresses: - 2001:4860:4860::8888 # Google public DNS over IPv6
Netplan utiliza YAML. La sangría es significativa: use espacios, nunca tabuladores. Una sola línea mal alineada hará que la configuración falle sin avisar o que no se aplique.
Pruebe la configuración antes de aplicarla:
sudo netplan try
netplan try aplica la configuración con un temporizador de 120 segundos. Si no la confirma, se revierte automáticamente, por lo que es seguro ejecutarlo por SSH. Si la salida es correcta, confirme:
# Press Enter when prompted, or type: sudo netplan apply
Utilice siempre netplan try en lugar de netplan apply cuando trabaje por SSH. Si la nueva configuración interrumpe su conexión, la reversión automática le devolverá el acceso.
3.2 Debian (/etc/network/interfaces)
En Debian, la forma clásica de añadir IPv6 a /etc/network/interfaces es incluir un segundo bloque iface para la misma interfaz con la familia inet6.
Haga primero una copia de seguridad:
sudo cp /etc/network/interfaces /etc/network/interfaces.bak
Abra el archivo:
sudo nano /etc/network/interfaces
Su bloque IPv4 existente será similar a este:
auto eth0 iface eth0 inet static address 203.0.113.10 netmask 255.255.255.0 gateway 203.0.113.1
Añada el bloque IPv6 inmediatamente debajo:
iface eth0 inet6 static address 2001:db8:1000::10 netmask 64 gateway 2001:db8:1000::1
No añada una segunda línea auto eth0. La única directiva auto activa tanto el bloque inet como el inet6 cuando se inicializa la interfaz.
Aplique la nueva configuración sin reiniciar el sistema:
sudo ifdown eth0 && sudo ifup eth0
Ejecutar ifdown eth0 por SSH interrumpe su conexión. Ejecute este comando desde la consola serie o web del proveedor, o utilice ifreload -a. Tenga en cuenta que ifreload -a requiere el paquete ifupdown2, que no se incluye en la instalación base de Debian. Instálelo con sudo apt install ifupdown2 para recargar las interfaces sin cortar las sesiones activas.
3.3 AlmaLinux / RHEL (nmcli)
En AlmaLinux y RHEL 8/9, NetworkManager es el gestor predeterminado. Use nmcli para añadir la dirección IPv6 sin editar archivos a mano.
Averigüe el nombre de su conexión:
nmcli connection show
Salida esperada:
NAME UUID TYPE DEVICE eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
Añada la dirección IPv6 estática:
sudo nmcli connection modify eth0 \ ipv6.method manual \ ipv6.addresses "2001:db8:1000::10/64" \ ipv6.gateway "2001:db8:1000::1"
Aplique la configuración sin interrumpir la conexión SSH:
sudo nmcli device reapply eth0
Paso 4: Probar la conectividad IPv6
Una vez aplicada la configuración, compruebe que la dirección está asignada y que el enrutamiento funciona.
4.1 Comprobar que la dirección está asignada
ip -6 addr show eth0
Salida esperada:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP inet6 2001:db8:1000::10/64 scope global valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe00:1/64 scope link valid_lft forever preferred_lft forever
Debería ver su Global Unicast Address con scope global. La dirección link-local (scope link) también estará presente.
4.2 Comprobar la puerta de enlace predeterminada
ip -6 route show
Salida esperada:
2001:db8:1000::/64 dev eth0 proto kernel metric 100 default via 2001:db8:1000::1 dev eth0 proto static metric 100
La línea default via confirma que su puerta de enlace predeterminada IPv6 está correctamente configurada.
4.3 Probar la conectividad IPv6
Para probar la conectividad IPv6 con un host público conocido, use ping6 (o ping -6 en sistemas más recientes):
ping6 -c 4 2606:4700:4700::1111
Salida esperada:
PING 2606:4700:4700::1111(2606:4700:4700::1111) 56 data bytes 64 bytes from 2606:4700:4700::1111: icmp_seq=1 ttl=57 time=1.23 ms 64 bytes from 2606:4700:4700::1111: icmp_seq=2 ttl=57 time=1.19 ms 64 bytes from 2606:4700:4700::1111: icmp_seq=3 ttl=57 time=1.21 ms 64 bytes from 2606:4700:4700::1111: icmp_seq=4 ttl=57 time=1.20 ms
Si ping6 falla pero la dirección está asignada, el problema casi siempre es uno de estos tres: la puerta de enlace predeterminada es incorrecta, el firewall de su proveedor bloquea ICMPv6 o la asignación IPv6 no se ha activado en su lado.
También puede probar la conectividad desde el exterior con una herramienta pública como https://ipv6-test.com. Introduzca la dirección IPv6 de su servidor y ejecute una comprobación de accesibilidad.
4.4 Comprobar la resolución DNS por IPv6
En primer lugar, asegúrese de tener instalada la utilidad dig.
En AlmaLinux 10, dig no se incluye en la instalación base:
sudo dnf install -y bind-utils
En imágenes mínimas de Debian, el paquete también puede faltar:
sudo apt install -y dnsutils
Compruebe que su servidor puede resolver nombres de host mediante el servidor DNS IPv6:
dig AAAA google.com @2001:4860:4860::8888
Una respuesta correcta incluirá una ANSWER SECTION con uno o varios registros AAAA.
Paso 5: Ajustar el firewall para IPv6
Si su servidor ejecuta un firewall de software, debe permitir explícitamente el tráfico IPv6. De forma predeterminada, muchas configuraciones de firewall solo cubren IPv4.
En INTROSERV, todos los puertos están abiertos de forma predeterminada a nivel de red para VPS y servidores dedicados, con un pequeño conjunto de excepciones (los puertos de correo 25, 465, 587, 2525 y el puerto LDAP 389 se filtran para proteger la reputación de las IP). Esto significa que no necesita abrir puertos en un firewall del proveedor para el tráfico web estándar ni para SSH. Sigue siendo su responsabilidad el firewall a nivel de sistema operativo de su servidor. Consulte la guía Seguridad de red y filtrado de puertos para más información.
Ubuntu/Debian (UFW)
En Debian, UFW no está incluido en la instalación base. Instálelo primero si es necesario:
sudo apt install -y ufw
UFW aplica las reglas tanto a IPv4 como a IPv6 cuando IPV6=yes está establecido en su configuración. Compruébelo:
grep IPV6 /etc/default/ufw
Salida esperada:
IPV6=yes
Si muestra IPV6=no, abra el archivo y cámbielo:
sudo nano /etc/default/ufw
A continuación, recargue UFW:
sudo ufw reload
Si UFW aún no se ha activado, ufw reload devolverá Firewall not enabled. No es un problema: las reglas se aplicarán automáticamente cuando active el firewall con sudo ufw enable.
Sus reglas ufw allow existentes (SSH, HTTP, HTTPS) se aplicarán ahora también a IPv6.
AlmaLinux / RHEL (firewalld)
firewalld gestiona IPv6 de forma nativa mediante su modelo de zonas. Si su interfaz está en la zona correcta, el tráfico IPv6 se gestiona automáticamente. Compruébelo:
sudo firewall-cmd --get-active-zones
Para servicios como SSH y HTTPS:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
Si un servicio ya está permitido en la zona, firewall-cmd mostrará Warning: ALREADY_ENABLED. Es normal y no es un error. En AlmaLinux, ssh y dhcpv6-client están permitidos de forma predeterminada en la zona public.
ICMPv6 es imprescindible para que IPv6 funcione correctamente. Se encarga del descubrimiento de vecinos, del descubrimiento de la MTU de la ruta y de los anuncios de router, es decir, los equivalentes IPv6 de ARP. No bloquee ICMPv6 por completo. La mayoría de las herramientas de firewall lo permiten de forma predeterminada; si escribe reglas nftables o ip6tables directamente, permita icmpv6 de forma explícita.
Reversión
Ubuntu (Netplan)
Restaure la copia de seguridad y aplíquela (sustituya 50-cloud-init.yaml por el nombre real de su archivo):
sudo cp /etc/netplan/50-cloud-init.yaml.bak /etc/netplan/50-cloud-init.yaml sudo netplan apply
Debian (/etc/network/interfaces)
Restaure la copia de seguridad:
sudo cp /etc/network/interfaces.bak /etc/network/interfaces sudo ifdown eth0 && sudo ifup eth0
AlmaLinux (nmcli)
Elimine la configuración IPv6 de la conexión:
sudo nmcli connection modify eth0 ipv6.method auto sudo nmcli connection modify eth0 ipv6.addresses "" ipv6.gateway "" sudo nmcli connection modify eth0 ipv6.method ignore sudo nmcli device reapply eth0
NetworkManager no permite establecer ipv6.method ignore mientras existan ipv6.addresses estáticas. Establecer primero el método en auto permite borrar correctamente las direcciones.
Deshabilitar IPv6 en todo el sistema (emergencia)
Si necesita desactivar IPv6 por completo en todas las interfaces:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
Para hacerlo persistente, añada lo siguiente a /etc/sysctl.d/99-disable-ipv6.conf:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
A continuación, ejecute sudo sysctl -p /etc/sysctl.d/99-disable-ipv6.conf.
Solución de problemas
Ping6 falla de inmediato con «Network unreachable»
La puerta de enlace predeterminada (IPv6) falta o es incorrecta. Ejecute ip -6 route show y confirme que existe la entrada default via y que coincide con la puerta de enlace del panel de su proveedor.
La dirección aparece, pero scope es solo link, no global
La dirección se añadió a una interfaz equivocada o el archivo de configuración tiene un error tipográfico en la dirección o el prefijo. Revise con atención la asignación de su proveedor.
Netplan apply devuelve un error de análisis
La sangría YAML es incorrecta. Ejecute cat -A /etc/netplan/50-cloud-init.yaml (o con el nombre real de su archivo) para mostrar los tabuladores (se ven como ^I) y sustitúyalos por espacios.
SSH se corta tras ifdown en Debian
Use la consola web del proveedor o el acceso VNC/IPMI para recuperar el acceso. Restaure /etc/network/interfaces desde la copia de seguridad y ejecute ifup eth0.
UFW sigue bloqueando IPv6 tras establecer IPV6=yes
Las reglas añadidas antes del cambio se guardaron solo para IPv4. Ejecute sudo ufw reset y vuelva a añadir sus reglas; a partir de ahora se aplicarán a ambas familias.
El comando sudo ufw reset es destructivo: restablece todas las reglas del firewall a sus valores predeterminados. Asegúrese de saber qué puertos debe volver a permitir (como SSH) antes de ejecutarlo para no quedarse sin acceso.
Conclusión
Eso es todo. Su servidor INTROSERV ya tiene una dirección IPv6 operativa, una puerta de enlace predeterminada correctamente configurada y un firewall que cubre ambas familias de protocolos. Próximos pasos: solicite un registro PTR a través del Client Area de INTROSERV y actualice los virtual hosts de Nginx o Apache para que escuchen en la nueva dirección IPv6.
Versión del documento: 1.0
Última actualización: mayo de 2026
Responsable: Equipo de documentación técnica