Probando IPv6 Parte 1

IPv6Llevamos tiempo oyendo sobre IPv6, de cómo se está agotando el espacio de direcciones de IPv4, y que el cambio será inevitable en los próximos años.

En la actualidad hay pocos ISP que den conectividad IPv6 de forma nativa (Telefónica, are you there?), así que la alternativa que tenemos es usar un tunel 6to4 con un ISP. En el caso que voy a comentar, utilicé SixXs.

Antes de embarcarse en esta cruzada, recomiendo encarecidamente leer el artículo sobre IPv6 de la wikipedia, para entender bien los tipos de direcciones, cómo se forman y cómo se enrutan los paquetes:

Escenario

  • Router flasheado con OpenWRT White Russian (Con Kamikaze también sirve)
  • Tunel IPv6 con un broker (www.sixxs.net)
  • Asignación de subred IPv6 para la LAN

Cualquier otra distribución de linux nos servirá… Los pasos a seguir variarán, pero el fondo es el mismo ;)

Pasos previos

Partimos de la base de que tenemos el router funcionando correctamente, con la IP pública (el modem ADSL/cable haciendo bridge, monopuesto).

El tunel utiliza IPV4 para comunicarse con el otro extremo. El payload del paquete IP es el protocolo 41 (no es UDP ni TCP, sino IPv6). Es decir, encapsula IPv6 en un paquete IPv4. Es fundamental que el operador de ADSL enrute estos paquetes. Telefónica lo hace, por suerte.

Esto es importante por dos razones:

  • Tenemos que abrir el firewall para permitir la entrada de dichos paquetes
  • Tenemos que deshabilitar el conntrack para impedir que eventualmente (si no se usa) el tunel se muera y perdamos conectividad.

Editamos /etc/config/firewall, y añadimos esta línea al principio

accept:proto=41

Para el segundo caso, no he encontrado una forma sencilla de hacerlo sin modificar los scripts de inicio. Editamos /etc/init.d/S35firewall.

Buscamos casi al final del fichero

  iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE

y lo reemplazamos por

  iptables -t nat -A POSTROUTING --protocol ! 41 -o $WAN -j MASQUERADE

Solicitar el tunel

Nos damos de alta en SixXs: https://www.sixxs.net/signup/create/

Este broker trabaja con créditos (ISK). Partimos con 15 créditos. Lo primero que haremos es solicitar un tunel. En mi caso fue un tunel estático, ya que tengo IPv4 fija. La creación del tunel cuesta 5 ISK.

Configurar el tunel

Necesitaremos una versión reciente del paquete aiccu. Podemos descargarla de los backports:

$ cd /tmp
$ wget http://downloads.openwrt.org/backports/0.9/aiccu_20070115-1_mipsel.ipk
$ ipkg install ./aiccu_20070115-1_mipsel.ipk

Asimismo, necesitaremos los siguientes paquetes:

ipkg install kmod-ipv6
ipkg install ip6tables

Configuramos /etc/aiccu.conf:

username XXXX-SIXXS # El NIC Handle que nos han asignado
password XXXXXXXX   # Nuestra clave
protocol tic
server tic.sixxs.net
ipv6_interface sixxs
tunnel_id TXXXXX # El código del tunel asignado
verbose false
daemonize true
automatic true
requiretls false

Renombramos el script de inicio, para que arranque automáticamente

$ cd /etc/init.d
$ mv aiccu S91aiccu

Arrancamos el aiccu, y hacemos las comprobaciones básicas. Suponemos que las red de nuestro tunel es 2001:b18:2000:faba::/64. Nuestra IP será 2001:b18:2000:faba::2/64 y la del PoP (Point of Presence, del ISP que nos de la conectividad) 2001:b18:2000:faba::1/64

$ /etc/init.d/S91aiccu start

$ ping6 ::1   #Ping a la interfaz local
PING ::1 (::1): 56 data bytes
64 bytes from ::1: icmp6_seq=0 ttl=64 time=0.6 ms
64 bytes from ::1: icmp6_seq=1 ttl=64 time=0.5 ms
64 bytes from ::1: icmp6_seq=2 ttl=64 time=0.5 ms
64 bytes from ::1: icmp6_seq=3 ttl=64 time=0.5 ms

--- ::1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.5/0.5/0.6 ms

$ ping6 2001:b18:2000:faba::2   # Nuestra IP en el tunel
PING 2001:b18:2000:faba::2 (2001:b18:2000:faba::2): 56 data bytes
64 bytes from 2001:b18:2000:faba::2: icmp6_seq=0 ttl=64 time=0.9 ms
64 bytes from 2001:b18:2000:faba::2: icmp6_seq=1 ttl=64 time=0.5 ms
64 bytes from 2001:b18:2000:faba::2: icmp6_seq=2 ttl=64 time=0.5 ms
64 bytes from 2001:b18:2000:faba::2: icmp6_seq=3 ttl=64 time=0.5 ms

--- 2001:b18:2000:faba::2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.5/0.6/0.9 ms

$ ping6 2001:b18:2000:faba::1   # La IP del otro extremo del tunel
PING 2001:b18:2000:faba::1 (2001:b18:2000:faba::1): 56 data bytes
64 bytes from 2001:b18:2000:faba::1: icmp6_seq=0 ttl=64 time=122.2 ms
64 bytes from 2001:b18:2000:faba::1: icmp6_seq=1 ttl=64 time=122.1 ms
64 bytes from 2001:b18:2000:faba::1: icmp6_seq=2 ttl=64 time=123.2 ms
64 bytes from 2001:b18:2000:faba::1: icmp6_seq=3 ttl=64 time=122.3 ms

--- 2001:b18:2000:faba::1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 122.1/122.4/123.2 ms

$ ping6 ipv6.google.com     # Ping a google, la prueba definitiva
PING ipv6.google.com(2001:4860:0:1001::68) 56 data bytes
64 bytes from 2001:4860:0:1001::68: icmp_seq=0 ttl=52 time=178 ms
64 bytes from 2001:4860:0:1001::68: icmp_seq=1 ttl=52 time=160 ms
64 bytes from 2001:4860:0:1001::68: icmp_seq=2 ttl=52 time=159 ms
64 bytes from 2001:4860:0:1001::68: icmp_seq=3 ttl=52 time=159 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 159.262/164.303/178.165/8.023 ms, pipe 2

Si esto no funciona, podemos parar el servicio aiccu y realizar un test:

$ /etc/init.d/S91aiccu stop
$ aiccu test

Solicitar una subred

Como comenté, SixXs trabaja a base de créditos. Partimos con 15, y el tunel nos costó 5. Para poder solicitar la subred, necesitamos tener al menos 15 ISK, por lo que tendremos que tener el tunel activo 1 semana para que nos “ingresen” los 5ISK que nos faltan.

La subred que asignan son de 48 bits, esto quiere decir que tenemos 16 bits (64-48) para hacer nuestras propias subredes… Es decir, podríamos direccionar 65536 redes locales, más que suficiente creo yo :)

Conclusión

Si todo ha ido bien, tendremos conectividad IPv6 en el router (solamente). El busybox del openwrt es un poco limitado, así que nos conformaremos con hacer ping6 a diferentes sitios y comprobar que funciona. También podéis hacer conexiones por ssh. Lamentablemente, el telnet solo funciona en IPv4.

En el próximo post veremos cómo configurar el router con la subred que nos hayan asignado, para dotar de conectividad IPv6 a nuestra red local, así como la configuración de los equipos.

Escrito por julianjm el 17/07/2008. |
Tags: , ,

2 Comments »

  1. De telefónica i+d tienes desde hace varios años un tunnel broker.

    Yo lo probé allá por segundo de carrera creo :)

    http://194.179.25.45/

    Comment by Alberto Sagredo SPAIN Mac OS X Safari 525.20.1 — 18 July 2008 @ 9:16

  2. Lo encontré buscando en google, pero no me pareció serio… parece un sitio de phishing la verdad. Incluso perdieron el dominio portalv6.com, que ahora está en un parking de dominios con publicidad… Vaya tela.

    Comment by julianjm SPAIN Linux Mozilla Firefox 3.0 — 18 July 2008 @ 13:00

RSS feed for comments on this post. | TrackBack URI

XHTML ( Puedes usar estas etiquetas): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> .