Habilite IPv6 en mi primer servidor IRC en 2008. En aquel momento, casi nadie tenia conectividad IPv6 nativa — los usuarios que se conectaban por IPv6 usaban tuneles 6to4 o Teredo. La adopcion era tan baja que durante meses solo un usuario se conecto por IPv6, y era yo mismo haciendo pruebas. Hoy, dependiendo del pais, entre el 30% y el 50% de los usuarios de Internet tienen IPv6 nativo. Seguir sin ofrecerlo es dejar fuera a una parte creciente de tu audiencia.
Estado de IPv6 en IRC
La adopcion de IPv6 en redes IRC es desigual. Las redes grandes (Libera.Chat, OFTC, EFnet) soportan IPv6 desde hace anos. Muchas redes pequenas y medianas no lo han habilitado porque "funciona sin el" o porque su hosting no ofrece IPv6. Ambas razones son cada vez menos validas.
Todos los IRCds modernos soportan IPv6 nativamente. UnrealIRCd, InspIRCd, Ergo, ngIRCd — todos tienen soporte dual-stack. Los clientes IRC tambien: irssi, WeeChat, HexChat, mIRC (desde la version 7). El protocolo IRC no necesita cambios para funcionar sobre IPv6 — es agnostico de la capa de red.
Lo que si cambia es la gestion de hosts y bans. Una direccion IPv6 es fundamentalmente diferente de una IPv4 en longitud y estructura. Los patrones de ban, el cloaking, y los limites de clones por IP necesitan adaptarse.
Por que ofrecer IPv6
La razon practica: usuarios en redes solo-IPv6 (cada vez mas comunes en moviles y en ciertos ISPs) no pueden conectar a un servidor solo-IPv4. Si tu servidor no escucha en IPv6, esos usuarios simplemente no existen para ti.
La razon tecnica: IPv6 ofrece un espacio de direcciones enorme. Cada usuario tiene su propia IP unica, sin NAT. Esto simplifica la gestion de bans — en IPv4, un ban de IP puede afectar a decenas de usuarios detras del mismo NAT. En IPv6, el ban es preciso.
La razon de reputacion: una red IRC seria en 2025 ofrece TLS e IPv6. No hacerlo transmite dejadez tecnica. Los usuarios tecnicos — que son el core de IRC — notan estas cosas.
Configurar listeners dual-stack
# === UnrealIRCd ===
# Listener IPv4 + IPv6 (dual-stack):
listen {
ip *; /* Escucha en todas las interfaces IPv4 e IPv6 */
port 6697;
options { tls; };
};
# Listener solo IPv4:
listen {
ip 0.0.0.0;
port 6697;
options { tls; };
};
# Listener solo IPv6:
listen {
ip ::;
port 6697;
options { tls; };
};
# Listeners separados (recomendado para control granular):
listen {
ip 0.0.0.0;
port 6697;
options { tls; };
};
listen {
ip ::;
port 6697;
options { tls; };
};
# === InspIRCd ===
# === Verificar que escucha en IPv6 ===
ss -tlnp | grep 6697
# Deberias ver lineas con :: (IPv6) y 0.0.0.0 (IPv4)
# O *:6697 si es dual-stack
En Linux, el comportamiento dual-stack depende del sysctl net.ipv6.bindv6only. Si esta en 0 (default en la mayoria de distros), un socket IPv6 acepta conexiones IPv4 tambien (via IPv4-mapped addresses). Si esta en 1, necesitas sockets separados para IPv4 e IPv6. La forma mas segura es crear listeners separados para cada protocolo — asi no dependes del comportamiento del sistema.
ip -6 addr show. Si no la tiene, contacta a tu proveedor de hosting. La mayoria de proveedores modernos la ofrecen gratuitamente.DNS: registros AAAA
Para que los clientes encuentren tu servidor por IPv6, necesitas registros AAAA en tu DNS ademas de los A (IPv4):
# Registros DNS:
; IPv4
irc.tudominio.com. IN A 1.2.3.4
; IPv6
irc.tudominio.com. IN AAAA 2001:db8::1
# Si tienes multiples servidores, DNS round-robin:
irc.tudominio.com. IN A 1.2.3.4
irc.tudominio.com. IN A 5.6.7.8
irc.tudominio.com. IN AAAA 2001:db8::1
irc.tudominio.com. IN AAAA 2001:db8::2
# Verificar:
dig irc.tudominio.com A
dig irc.tudominio.com AAAA
# Probar conexion IPv6:
irssi -c irc.tudominio.com -p 6697 -tls
# irssi selecciona automaticamente IPv4 o IPv6 segun disponibilidad
Los clientes IRC modernos intentan IPv6 primero si tienen conectividad y el DNS devuelve un registro AAAA. Si la conexion IPv6 falla, caen a IPv4 (Happy Eyeballs / RFC 8305). Esto significa que puedes anadir registros AAAA sin riesgo — los usuarios sin IPv6 seguiran conectando por IPv4 como siempre.
Cloaking con IPv6
El cloaking (host masking) con IPv6 requiere atencion especial. Una direccion IPv6 completa es larga (2001:0db8:85a3:0000:0000:8a2e:0370:7334) y contiene informacion sobre la subred del usuario.
# Sin cloaking, el host del usuario muestra:
# nick!user@2001:db8:85a3::8a2e:370:7334
# Con cloaking (UnrealIRCd):
set {
cloak-method ip;
cloak-keys {
"clave-secreta-1";
"clave-secreta-2";
"clave-secreta-3";
};
};
# Resultado: nick!user@h37F2A1.v6.tudominio.com
# InspIRCd:
# Resultado: nick!user@user-2a1f3b.v6.tudominio.com
El punto critico es la granularidad. En IPv4, un cloak suele ocultar los ultimos octetos de la IP. En IPv6, tienes 128 bits. La mayoria de los ISPs asignan un /64 o /48 a cada cliente. El cloaking debe ocultar al menos los ultimos 64 bits (el identificador de interfaz) para proteger la privacidad, pero puede preservar hash del prefijo de red para que los bans por rango sigan funcionando.
Problemas especificos de IPv6
- Bans por rango: En IPv4, baneas
*!*@192.168.1.*y afectas a una subred. En IPv6, el equivalente seria*!*@2001:db8:85a3:*pero la longitud del prefijo varia. Algunos IRCds soportan notacion CIDR para bans IPv6:*!*@2001:db8:85a3::/48. Otros no. - Limites de clones: En IPv4, limitas clones por IP individual. En IPv6, cada dispositivo tiene su propia /128. Un usuario con un /48 puede generar 2^80 IPs unicas sin clonar. Solucion: limitar clones por prefijo /64 o /48 en vez de por IP individual.
- DNSBL: La mayoria de las DNSBL soportan consultas IPv6, pero la cobertura es menor que para IPv4. DroneBL y EFnet RBL soportan IPv6. Verifica que tu IRCd envie consultas DNSBL para conexiones IPv6.
- Logging: Las IPs IPv6 en logs son largas y dificiles de leer. Algunos parsers de logs que asumen formato IPv4 se rompen. Verifica que tus herramientas de analisis de logs manejan IPv6 correctamente.
# UnrealIRCd — limitar clones por rango IPv6:
set {
max-unknown-connections-per-ip 3;
/* Para IPv6, UnrealIRCd agrupa por /64 automaticamente */
/* Configurable con: */
connthrottle {
/* ... */
};
};
# Ban CIDR en UnrealIRCd:
/ZLINE *@2001:db8:85a3::/48 3600 Abuso desde este rango
# Ban CIDR en InspIRCd (con modulo cidr):
/ZLINE *@2001:db8:85a3::/48 3600 :Abuso desde este rango
2001:db8:: — ese es el rango de documentacion (RFC 3849) y no es routable en Internet real. Usa las direcciones IPv6 reales de tu servidor.Preguntas frecuentes
Puedo ofrecer solo IPv6 sin IPv4?
Tecnicamente si. En la practica, una parte significativa de los usuarios de IRC todavia no tiene IPv6 nativo. Ofrecer solo IPv6 excluiria a esos usuarios. Lo recomendado es dual-stack: IPv4 + IPv6 simultaneamente. Cuando la adopcion IPv6 sea mayoritaria (quiza en 5-10 anos), podras considerar desactivar IPv4.
IPv6 es mas seguro que IPv4 para IRC?
No inherentemente. El cifrado TLS es independiente de IPv4/IPv6 — funciona igual en ambos. La unica ventaja de seguridad indirecta es que IPv6 elimina NAT, lo que hace los bans mas precisos. Pero tambien facilita que un atacante genere millones de IPs unicas, complicando las defensas basadas en IP.
Mi hosting no ofrece IPv6. Que hago?
Cambia de hosting. En 2025, cualquier proveedor serio ofrece IPv6. Si no puedes cambiar, puedes usar un tunel IPv6 (Hurricane Electric ofrece tuneles gratuitos en tunnelbroker.net), pero la latencia adicional no es ideal para IRC. La solucion correcta es un hosting que soporte IPv6 nativamente.