Ya es oficial, no quedan rangos de IPv4 que puedan ser reservados por nuevas compañías, sólo queda implantar oficialmente y a nivel mundial el protocolo IPv6.
En resumidas cuentas, no es que sólo hayan aumentado el número de IPs disponibles, cambia toda la filosofía y tanto los conceptos como la configuración no son del todo intuitivos.
En cuanto los IPs lo implementen de forma nativa, en principio la mayoría de routers basados en linux ya están preparados para utilizar IPv6 o podrían estarlo simplemente con una actualización de software.
A priori esto no es un problema para usuarios ni la mayoría de ISPs existentes, puesto que tienen sus rangos ya comprados y salvo que se les agoten por ahora pueden ir tirando; sinembargo es un problema para los ISPs nuevos y todo aquel que necesite comprarse un hueco en internet.
Básicamente lo que ha sucedido es que todo el rango de ips versión 4 que va desde 0 – 255 dividido en 4 segmentos: 0.0.0.0 está vendido. Hasta la fecha se había trampeado esta situación con el uso de NAT en las redes locales.
El funcionamiento del NAT es muy simple, se forma un subconjunto de redes, enlazadas entre sí por un enrutador, para los rangos de redes locales se reservan 3 segmentos: 10.0.0.0 (clase A), 172.16.0.0 (clase B) y 192.168.1.0 (clase C), los equipos de la red local tendrán IPs dentro de esos rangos. Cuando quieran acceder a una ip de un rango externo preguntarán al enrutador asignado en la red, el cual tiene 2 tarjetas de red (de ahora en adelante referidas como interfaces) lo que le permite hacer de puente.
Dicho de otro modo, ahora mismo todas las peticiones de cualquier equipo de una red local se ven desde internet como que proceden desde la misma IP:
IPv6 es totalmente nuevo, en todos los sentidos, por un lado las IPs pasan a abarcar de 0 – 65535 dividido en 8 segmentos, es decir, MUCHOS. La forma de representarlo también cambia, se opta por el hexadecimal para simplificar y compactar los números. Además existen muchas formas de escribir la misma IP, recomiendo echar un vistazo a la explicación que está en la wikipedia (sí, para variar este post no será muy técnico por ahora, sólo conceptual ya que este tema podría abarcar varios posts).
La filosofía cambia, como hay tantas IPs disponibles, la idea es que todos los aparatos sean accesibles directamente desde internet, hasta podrás conectarte a la tostadora de tu casa con tu móvil. Desaparece por tanto el concepto de NAT, aunque es posible hacer alguna chapucilla no oficial por ahí (hacer que sólo el router tenga IPv6 y el resto de equipos usen un proxy http a través de él, o bien asignar un rango de IPv6 local y hacer un pseudo-nat).
¡Las pilas de red son paralelas! ¿Qué significa esto? que tener un sistema dual IPv4 e IPv6 significa que ese equipo tiene que tener configurados dos firewalls por separado, uno para cada protocolo. Pensadlo gráficamente como que acabáis de instalar una tarjeta de red más nueva y un cableado paralelo al que ya teníais.
Y hay mucho más, mientras los ISPs no implantan nativamente el protocolo IPv6, se puede utilizar mediante un túnel 6to4. Lo que se hace es pasar el tráfico IPv6 encapsulado bajo el protocolo 41. El primer paso sería habilitarlo en el firewall IPv4:
1 2 |
echo "Habilitando IPV6..." iptables -I INPUT -j ACCEPT --proto 41 |
Para habilitar el túnel depende de si teneis ip estática o dinámica. Si es dinámica tendreis que daros de alta en algun servicio que os permita utilizarlo de túnel, se parece a como se hacía antiguamente con las conexiones PPP de módem, se lanza un cliente que nos crea una interfaz TAP en el equipo. En caso de tener una IPv4 estática y si la tenemos directamente en el equipo porque el router está en modo bridge, podremos crear nosotros de forma nativa el puente 6to4. Es algo complejo entender todos los parámetros y el porqué, hay manuales ya creados por internet, procupro detallar en este post todo lo que no he visto o me ha costado encontrar por ahí. Os pondré como ejemplo mi configuración:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# En /etc/network/interfaces definiríamos algo como sigue: auto tun6to4 iface tun6to4 inet6 v4tunnel address 2002:YYYY:YYYY:1::1 netmask 16 gateway ::192.88.99.1 endpoint any local XXX.XXX.XXX.XXX up ip -6 route add ::/0 dev tun6to4 metric 1 up ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 up ip -6 route add 2000::/3 via 2002:YYYY:YYYY::1 dev tun6to4 metric 1 up ip -6 addr add 2002:YYYY:YYYY::1/16 dev tun6to4 up ip -6 addr add 2002:YYYY:YYYY:1::1/64 dev br0 down ip -6 route flush dev tun6to4 up /etc/network/ipv6rules.sh ttl 255 mtu 1480 # Donde pone XXX.XXX.XXX.XXX es vuestra IPv4 pública, donde ponga YYYY.YYYY es vuestra IPv4 convertida a hexadecimal, el prefijo 2002 en las IPv6 indica que es un formato de compatibilidad y ésto supone que disponemos de un rango de 65535 IPv6 para nosotros solitos, hasta el despertador puede tener IP. ;) |
Con esto se creará una interfaz que automáticamente enrutará el tráfico IPv6 por nosotros. Fijaos en que llamo al script /etc/network/ipv6rules.sh para configurar el firewall IPv6 (en mi caso es ipv6tables, que es nativo del kernel de linux).
Una vez creado y lanzado el túnel de cualquiera de las formas antes indicadas, faltaría instalar un programa que transfiera las rutas al resto de equipos de la red, en el caso de linux se usa radvd. Si no se instala y configura, sólo el equipo con el túnel 6to4 tendrá conectividad IPv6, mientras que si se instala y configura, el resto de equipos sabrán como llegar al siguiente enrutador y ser visibles públicamente, así es cómo soluciona IPv6 el problema del NAT (recuerda al típico: Para salir afuera hay que usar la puerta de la entrada ¡pásalo!).
Si quereis hacer pruebas para verificar si vuestra configuración funciona o si ya teneis habilitado el acceso por IPv6, os recomiendo las siguientes direcciones web:
¡Me olvidaba! Por si habeis pensado en asociar un dominio o subdominio a una IPv6, es posible mediante los DNS actuales, especialmente con bind, sólo hay que crear un registro de tipo AAAA.
Para probar si teneis conexión desde los equipos de la red, además de navegar por páginas web, podéis utilizar la utilidad ping6 para saber si los paquetes llegan:
1 2 3 4 5 6 7 8 9 10 11 |
debian:~# ping6 ipv6.google.com PING ipv6.google.com(2a00:1450:8002::93) 56 data bytes 64 bytes from 2a00:1450:8002::93: icmp_seq=1 ttl=56 time=289 ms 64 bytes from 2a00:1450:8002::93: icmp_seq=2 ttl=56 time=207 ms 64 bytes from 2a00:1450:8002::93: icmp_seq=3 ttl=56 time=216 ms 64 bytes from 2a00:1450:8002::93: icmp_seq=4 ttl=56 time=231 ms ^C --- ipv6.google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 207.244/236.297/289.250/31.796 ms debian:~# |
Y bueno, hay mucho, mucho, por leer, y es bueno estar preparado para que luego no nos coja por sorpresa. 😉
Si teneis cualquier duda planteádmela e intentaré ayudaros hasta donde pueda.
Un saludo.