Hoy en día la mayor parte de los usuarios accedemos a Internet utilizando el protocolo IPv4, ya que utilizamos una conexión a un Proveedor de Servicios de Internet (ISP) que nos proporciona una dirección IPv4 pública y el acceso a un router conectado a esta red. Para acceder a Internet IPv6 de forma nativa hace falta exactamente lo mismo, un ISP que nos proporcione una dirección global IPv6 (o mejor aún un segmento de direcciones globales), aunque actualmente esto es poco frecuente ya que hay pocos ISP que den acceso nativo a IPv6 (http://www.sixxs.net/faq/connectivity/?faq=native).
En esta entrada se explica una de las formas que hay actualmente para conectarse a Internet IPv6 a través de una dirección IPv4 pública utilizando un mecanismo que se denomina 6to4, además se verá cómo configurar todos los equipos de la red local con una dirección IPv6 pública formando lo que se denomina una isla IPv6 y conectarlos a Internet IPv6 a través de radvd. Todo el desarrollo se va a realizar en Debian GN/Linux y se supone cierta familiaridad con la termininología de IPv6, para una introducción a la carcaterísticas de las direcciones IPv6 véase Direccionamiento IPv6 básico de este mismo blog.
¿Qué es 6to4?
Hay varios mecanismos de conexión a Internet IPv6 desde un equipo conectado a Internet IPv4 y aunque tienen algunas diferencias se basan fundamentalmente en encapsular un datagrama IPv6 dentro de un datagrama IPv4 y enviarlo a un equipo conectado a las dos redes que lo «suelte» en Internet IPv6. Para entender el funcionamiento de 6to4 es necesario explicar previamente los elementos que intervienen:
- A toda dirección IPv4 le corresponde un segmento /48 de direcciones IPv6 con el siguiente formato: 2002:XXXX:YYYY:/48 donde XXXX:YYYY son los 32 bits de la dirección IPv4 en formato hexadecimal. Por ejemplo, a la dirección IPv4 pública 80.22.1.14 le corresponde el segmento de direcciones IPv6 2002:5016:10e/48, dentro del cual puede crear 2^16 subredes con 2^64 equipos en cada subred (!). Todas las direcciones IPv6 con el prefijo 2002::/16 se conocen como direcciones 6to4.
- La dirección 192.88.99.1 es una dirección IPv4 reservada para los encaminadores que pasan los datagramas entre Internet IPv4 e Internet IPv6 (6to4 relay routers). Esta dirección además es anycast, por lo que existen varios encaminadores repartidos por el mundo que realizan esta función de retransmisión entre las dos redes.
- Existe una dirección IPv6 reservada para los mismos encaminadores para realizar el proceso inverso y que es la 2002:c058:6301:: (dirección 6to4 asociada a la 192.88.99.1)
Describamos de forma breve el proceso de conexión a un equipo de Internet IPv6 utilizando 6to4, tomando como ejemplo un equipo con la dirección IPv4 pública 80.22.1.14 que se conecta al servidor web http://www.kame.net (accesible tanto desde Internet IPv4 como de Internet IPv6, en el segundo caso veremos la «dancing kame») y que se presenta en la siguiente imagen:
- A la dirección 80.22.1.14 le corresponde el segmento de direcciones 6to4 2002:5016:10e/48, en particular se le asocia la primera dirección de este segmento 2002:5016:10e::1/128
- Para hacer una consulta al servidor web de http://www.kame.net en IPv6, se realiza una consulta DNS tipo AAAA, que nos da como resultado la dirección 2001:200:0:8002:203:47ff:fea5:3085
- Se construye un datagrama IPv6 con destino a la dirección anterior, pero se encapsula dentro de un datagrama IPv4 con destino a la dirección 192.88.99.1
- Se envía el datagrama a través de Internet IPv4 hasta el encaminador de retransmisión 6to4 (6to4 relay router) más cercano en términos de enrutamiento
- Cuando el datagrama llega al encaminador 6to4, éste lo desencapsula, comprueba la dirección IPv6 se destino y se lo envía a ésta
- El servidor de http://www.kame.net recibe la petición desde la dirección 2002:5588:4fd9::1/128 y responde a la misma
- El datagrama llega al encaminador de retransmisión 6to4 más cercano, ya que por el prefijo 2002::/16 se sabe que se trata de una dirección 6to4.
- El encaminador de retransmisión 6to4 recibe el datagrama IPv6 con destino a 2002:5588:4fd9::1/128 y lo encapsula dentro de un datagrama IPv4 con destino a la dirección 80.22.1.14
- El datagrama llega a la dirección 80.22.1.14 que puede ver la respuesta del servidor web http://www.kame.net
Configuración 6to4 en Debian
Conectar un equipo con Debian a Internet IPv6 mediante el mecanismo 6to4 es tan sencillo como añadir un nuevo elemento en el fichero /etc/network/interfaces (wiki.debian.org/DebianIPv6), en el caso del ejemplo anterior sería:
auto tun6to4 iface tun6to4 inet6 v4tunnel address 2002:5016:10e::1 netmask 16 gateway ::192.88.99.1 endpoint any local 80.22.1.14
Si levantamos ahora el dispositivo tun6to4, Internet IPv6 será accesible a través del mecanismo 6to4:
# ifup tun6to4 $ ping6 ipv6.google.com PING ipv6.google.com(2a00:1450:8001::68) 56 data bytes 64 bytes from 2a00:1450:8001::68: icmp_seq=1 ttl=56 time=106 ms 64 bytes from 2a00:1450:8001::68: icmp_seq=2 ttl=56 time=99.5 ms 64 bytes from 2a00:1450:8001::68: icmp_seq=3 ttl=56 time=102 ms
Conexión a Internet IPv6 de toda la red local
Una de las ventajas más llamativas de utilizar 6to4 es que con cada dirección IPv4 pública es posible formar hasta 2^16 subredes con 2^64 hosts en cada una, teniendo todos los hosts direcciones IPv6 globales. Además utilizando ICMPv6 es posible que los equipos de la red local se configuren de forma automática, para lo que es necesario instalar en el equipo que actuará como router de la red local un programa denominado Router ADVertisement Daemon o radvd. Siguiendo con el caso anterior, supondremos que el equipo con dirección IP pública 80.22.1.14 es la puerta de enlace de la red local de direcciones privadas 192.168.1.0/24, por lo que actuará ahora como encaminador IPv6 de acuerdo con el siguiente esquema:
Instalamos en el equipo que va a actuar como encaminador el paquete radvd:
# aptitude install radvd
Editamos el fichero /etc/radvd.conf de la siguiente manera y lo modificamos para que tenga el siguiente contenido:
interface eth0 { AdvSendAdvert on; prefix 2002:5016:10e::/64 { AdvAutonomous on; AdvOnLink on; AdvRouterAddr on; }; };
A continuación, configuramos la dirección IPv6 de la interfaz eth0 del equipo que va a actuar como router en el fichero /etc/network/interfaces:
auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 iface eth0 inet6 static address 2002:5016:10e::1 netmask 64
Bajamos y volvemos a levantar la interfaz de red para que se aplique la nueva configuración:
# ifdown eth0 # ifup eth0
Activamos el bit de forward en IPv6 añadiendo la siguiente línea al fichero /etc/sysctl.conf:
net.ipv6.conf.all.forwarding=1
# sysctl -p
Es necesario cargar manualmente el módulo ipv6 en el arranque para que el bit de forward de IPv6 se pueda activar al inicar la máquina de nuevo, por lo que hacemos:
# echo "ipv6" >> /etc/modules
Ahora se puede iniciar el demonio radvd encargado de facilitar la información de red IPv6 en la red local:
# /etc/init.d/radvd start
Y partir de ese momento cualquier equipo que se conecte a la red local se configurará de forma automática con una dirección IPv6 global con acceso a Internet IPv6. La dirección IPv6 de cada equipo (lo que se denomina una dirección stateless) se compondrá de un prefijo de 64 bits con la información de la red que facilita radvd más una identificación única del host de 64 bits que se obtiene de la dirección MAC de la interfaz de red.
ip6tables
La gran ventaja anterior también tiene el problema de que toda la red local es completamente accesible desde Internet IPv6, por lo que es recomendable inicialmente denegar el acceso a todos los paquetes que no sean respuesta a una petición nuestra, para lo que se utiliza el equivalente a iptables en IPv6, que se denomina ip6tables.
Terminar
Muy buena explicación.
No entiendo bien esta parte: El servidor de http://www.kame.net recibe la petición desde la dirección 2002:5588:4fd9::1/128 y responde a la misma, podrías aclararme a quien pertenece esa dirección?
Por lo demás está genial el post.
Un saludo.
Me gustaMe gusta
2002:5588:4fd9::1/128 es la dirección en Internet IPv6 de los 6to4 relay routers, es la dirección 6to4 correspondiente a la dirección Ipv4 192.88.99.1, bueno realmente es la primera dirección de todo el rango de direcciones asociadas.
Me gustaMe gusta
Hola, interesante esto, pero una consulta yo con esta configuración puedo acceder a la Internet a servidores ipv4 e ipv6 ??
Me gustaMe gusta
Exactamente Cristóbal, tienes una dirección IPv4 que te permite acceder a Internet IPv4 y mediante un servidor remoto acceder a Internet IPv6.
Me gustaMe gusta
Muy interesante, pero esa ipv6 2002:5588:4fd9::1/128 que ciertamente es una ipv6 tipo 6to4
(ya que empieza por 2002), y mapea a IPv4 contra 192.88.99.1
¿Donde está realmente?… ¿Es un host real o es un host dummy?…
¡Perdon!
¡Acabo de encontrar la respuesta (creo) haciendo un whois, un ping y un traceroute!
Se trata de un rango IPv4/8 reservado por la IANA para el tema 6to4, y en mi caso (conecto con IPv4 a traves de un adsl de telefonica) el traceroute no me da informacion mas que de nodos intermedios, pero sospecho que cada proveedor de acceso tiene un host 192.88.99.1 en
su propia red local para estos trasiegos ipv6 en modo 6to4…
El caso es que responde a ping4, y a whois como
6TO4-RELAY-ANYCAST-IANA-RESERVED
internete
1234567
PD: Corrijame si me equivoco, por favor Señor Molina.
Me gustaMe gusta
Los routers para hacer relay 6to4 deben tener una interfaz de red conectada a Internet IPv4 con dirección 192.88.99.1 y otra conectada a Internet IPv6 con dirección 2002:5588:4fd9::1/128, precisamente el estar conectados a ambas redes es lo que permite que se utilicen para acceder a Internet IPv6 desde un equipo conectado sólo a Internet IPv4.
Hay bastantes routers de este tipo distribuidos por el mundo y todos comparten la dirección anycast 192.88.99.1, de manera que cada usuario se conecta al más cercano en términos de enrutamiento, estos routers pertenecen a diferentes entidades públicas o proveedores de servicios, como es habitual en los equipos que forman la estructura de Internet.
Me gustaMe gusta
Muy buena, muy sencilla y muy clara tu explicación.
Gracias.
Me gustaMe gusta