13 de Enero, 2011

Servicios en IPv6

IPv6 tested

No recuerdo qué leía anoche sobre IPv6 que volví a darle vueltas al tema, entre las típicas noticias de que se nos acaban las direcciones IPv4 (que como la pana, siempre vuelve), y el clásico artículo de D. J. Bernstein (The IPv6 mess), parece que le he perdido interés desde que monté usebox.net con IPv6.

Lo de siempre, ¿quién usa IPv6? Pero además, ¿para qué? Si no hay apenas contenidos en el nuevo sistema (pero no novato, en 2006 ya llevaban 10 años en pruebas).

Como bien dice Bernestein, antes de que sea interesante cambiar a los clientes al nuevo sistema, es necesario que los servicios ya estén funcionando. Bien, hasta anoche... este servidor no tenía ningún servicio en IPv6 :P.

No me había parado a pensar en este tema desde que cambiara de proveedor, y el caso es que sí tengo soporte completo, con lo que me lancé a la aventura sin pensar demasiado lo que podía tardar en dejarlo todo a punto. Sorpresa: apenas 5 minutos (relativo, para escribir esta anotación he tardado mucho más).

Activar servicios en IPV6 en Ubuntu 10.04.1 LTS

Tengo varios servicios en el servidor y, por deformación profesional, estaba todo configurado exclusivamente en IPv4. El motivo es sencillo, y resume una de mis recomendaciones de seguridad para administradores despistados™:

Si no usas un servicio, desactívalo.

Simple y efectivo. Cada servicio está escuchando en la dirección IP que toca, y por lo tanto he tenido que revisar los servicios uno a uno.

Configuración de la dirección

Mi proveedor me da más direcciones IPv6 de las que nunca podré gastar (264 direcciones), y ahora mismo voy a usar una para todos los servicios.

Partiendo del rango que me indican en el panel de control, configuro la nueva IP a mano:

# ifconfig eth0 inet6 add 2001:41D0:2:10::/56

Es posible que tengamos una dirección IPv6 ya configurada, pero del tipo link-local (basada en la MAC de la tarjeta de red), y que no podremos usar hacia Internet (solo funciona localmente). Nuestra nueva dirección aparecerá en la salida de ifconfig como Scope:Global y es del tipo aggregatable-global-unicast.

Podemos comprobar las rutas con route -A inet6, pero para mi son incomprensibles. Simplemente he hecho un ping6 a la puerta de enlace que me ha indicado el proveedor, pero también podemos probar algo como:

# ping6 -c 1 ipv6.google.com
PING ipv6.google.com(2a00:1450:8002::68) 56 data bytes
64 bytes from 2a00:1450:8002::68: icmp_seq=1 ttl=56 time=13.5 ms

--- ipv6.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 13.598/13.598/13.598/0.000 ms

He marcado en negrita la IP que ha respondido, con lo que todo parece correcto (podemos resolver nombres de dominio en IPv6, y aparentemente tenemos conectividad con Google).

Ya solo queda añadir en /etc/network/interfaces algo como:

iface eth0 inet6 static
        address 2001:41D0:2:10::
        netmask 56

DNS (Bind 9)

Lo primero que hay que hacer es conseguir que se nos pueda encontrar con IPv6. En mi caso activar el soporte IPv6 fue necesario, editando /etc/bind/named.conf.options:

options {
        // aquí hay más cosas que no intesan en
        // en este momento...
        listen-on-v6 { any; };
};

Como he dicho antes, tenía desactivado el servicio en IPv6 :P

Luego, en nuestra zona (usebox.net en este ejemplo), crearemos un registro AAAA equivalente a cada registro A, pero con la nueva IP. Por ejemplo:

mail.usebox.net.        A       80.121.211.104
mail.usebox.net.        AAAA    2001:41d0:2:10::

Reiniciamos el servicio para que recargue la nueva configuración (sobretodo si no teníamos IPv6 activado), y comprobamos con dig:

# dig mail.usebox.net AAAA | grep -A 2 ";; ANSWER"
;; ANSWER SECTION:
mail.usebox.net.	86400	IN	AAAA	2001:41d0:2:10::

Con esto tendremos nuestro servidor accesible con los mismos nombres, pero mediante IPv6.

Otros servicios en IPv6

En mi servidor cuento con diferentes servicios (entrega y recogida de correo con Postfix y Dovecot, SSH con OpenSSH, web con Cherokee, y el mencionado DNS), y cada uno tiene sus particularidades para activar el soporte IPv6, pero no es nada complicado. Un vistazo rápido al manual es la solución.

La única pega que me he encontrado en con el paquete iptables-persistent, que no lleva soporte.

Lo he solucionado fácilmente, creando un fichero /etc/iptables/rules6 y modificando /etc/init.d/iptables-persistent dejando la parte del start tal como:

start)
    if [ -f /etc/iptables/rules ]; then
        iptables-restore </etc/iptables/rules
    fi
    if [ -f /etc/iptables/rules6 ]; then
        ip6tables-restore </etc/iptables/rules6
    fi
    ;;

Podemos usar como base nuestro fichero rules de IPv4, convirtiéndolo como sea conveniente (en mi caso solo tuve que eliminar algunas direcciones bloqueadas que eran, evidentemente, de IPv4 :P).

Conclusiones

Espero no haber metido la pata, porque tengo pendiente ponerme al día con IPv6, y que tire la primera piedra quien no haya dicho esto mismo alguna vez ;). Pero lo digo en serio, la salida de route en IPv6 es lo suficientemente marciana como considerar la amenaza completamente real :D.

Como es bastante probable que no tengamos conectividad IPv6 en casa, puede ser bastante útil usar un servicio como IPv6-Test, que nos permite verificar si nuestra web se está sirviendo con el nuevo protocolo.

El soporte de IPv6 en Linux es de primera, y no supone apenas esfuerzo ofrecer los mismos servicios que estamos dando en IPv4, así que no hay excusa para no aportar nuestro granito de arena al proceso de renovación (y de paso aprendemos cosas por el camino).

Anotación por Juan J. Martínez, clasificada en: linux, ubuntu, ipv6, networking, software libre.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: