IPv6

De Guifi.net - Wiki Hispano

Icono de esbozo

Este artículo necesita desarrollarse más. Ampliándolo ayudarás a mejorar Guifi.net.
Tal vez puedas ayudarte con los wikis catalán, o inglés si tienen una página equivalente.



falta revisar los links y las negritas

El crecimiento exponencial de Internet, ha hecho que desde los años 80, el agotamiento de las direcciones IPv4 haya sido un tema de preocupación. El agotamiento ya ha llegado y nos encontramos en la era del IPv6.

El 31 de Enero del 2011, la IANA (Internet Assigned Numbers Authority), entidad que se encarga de distribuïr las IPs en Internet, asignó los dos últimos bloques /8 (16 millones de IPs) y el 3 de Febrero finalmente se asignaron los últimos 5 bloques de direcciones disponibles a los cinco registros de Internet (Regional Internet Registries o RIR), que tienen delegada la asignación en las cinco regiones administrativas en que se divide el mundo según Internet. Aquí podemos ver cuando los RIR van a agotar definitivamente las Ipv4 disponibles.

En 1999 se preveía que si la red seguía creciendo al ritmo que lo hacía, el numero de IPs se agotaría antes de encontrar una solución al problema, así que se diseñó NAT (Network Address Translation). El concepto de NAT consiste en utilizar una dirección IP enrutable (o un número limitado de direcciones IP) para conectar todas las máquinas a través de la traducción, en la pasarela de internet, entre la dirección interna (no enrutable) de la máquina que se desea conectar y la dirección IP de la pasarela.

Además, el proceso de traducción de direcciones permite a las compañías asegurar la red interna siempre y cuando oculte la asignación de direcciones internas. Para un observador que se ubica fuera de la red, todos los pedidos parecen provenir de la misma dirección IP.

NAT ha podido parecer un gran invento, también una forma de "tener los ordenadores a salvo del salvaje internet". NAT ha sido adoptado como firewall, pero en realidad no lo es ya que se permite que protocolos como UPNP o conexiones inversas puedan acceder a equipos de detrás del NAT.

Sin embargo, este sistema no está facilitando la tarea a todas aquellas aplicaciones tipo cliente-servidor (que ofrecen servicios dedicados a los usuarios), o permitiendo las cliente-cliente, tal como podría ser VoIP, Televisión Interactiva, juegos on-line, programas P2P, etc. Si somos usuarios de estos servicios seguramente alguna vez habremos tenido que acceder a nuestro router y configurar la redirección de puertos. Con IPv6 ¡esta farragosa tarea desaparece! cada ordenador dispone de una ip global y con este motivo, es posible rutearlo directamente a Internet, así que desde hace ya unos años, los sistemas operativos se toman mucho más en serio el tema de la seguridad y por un buen motivo, un sistema o aplicación que no esté preparado para las redes del futuro, ¡estará condenado a desaparecer!

Además de esto nos encontramos con la realidad del imparable crecimiento de internet, que en los últimos 10 años ha experimentado un crecimiento superior al 600%, día tras día se unen a esta gran red nuevos tipos de dispositivos.

IPv6, el protocolo

Este protocolo empezó a ser diseñado en 1996 por la IETF (Internet Engineering Task Force), organización que desarrolla y promueve estándares sobretodo sobre TCP/IP y protocolos de Internet. Desde entonces IPv6 ha ido evolucionando, pero a diferencia de otros protocolos se decidió no definir versiones, en motivo del farragoso proceso de estandarización de los RFC que hace que muchos estándares se apliquen en la red antes de ser estandarizados, como por ejemplo el polémico 802.11n.

Uno de los cambios que saltan mas a la vista es la notación de las direcciones, que trata de direcciones de 128bits de longitud escritos en 8 grupos de cuatro dígitos hexadecimales:

2001:0db8:85a3:08d3:1319:8a2e:0370:7334

Esto es una dirección IPv6 válida. Usamos el prefijo 2001:0db8: para documentación. Si un grupo de cuatro dígitos es nulo (que tiene el valor 0000), puede ser comprimido, así que estas dos direcciones IPv6 serían en realidad la misma:

2001:0db8:85a3:0000:1319:8a2e:0370:7344 
2001:0db8:85a3::1319:8a2e:0370:7344

Siguiendo esta regla, si más de dos grupos consecutivos son nulos pueden comprimirse como "::". Si la dirección tiene más de una serie de grupos nulos consecutivos, la compresión se puede aplicar en más de uno, así que:

2001:0DB8:0000:0000:0000:0000:1428:57ab 
2001:0DB8:0000:0000:0000::1428:57ab 
2001:0DB8:0:0:0:0:1428:57ab 
2001:0DB8:0::0:1428:57ab 
2001:0DB8::1428:57ab 

Són todas válidas y representan lo mismo, pero

2001::25de::cade 

No es válida porqué no queda claro cuantos grupos nulos hay en cada lado.

Los ceros iniciales en un grupo pueden ser omitidos. Así que:

2001:0DB8:02de::0e13 

Es lo mismo que

2001:DB8:2de::e13

Tipo de direcciones IPv6

  • Multicast (una a muchas): "ff00::/8"
  • Anycast (una a la más cercana): para la réplica de DNS (por ejemplo para hacer peticiones al servidor DNS más cercano topológicamente hablando).
  • Unicast:
    • Globales : equivaldrían a lo que conocemos como IPs públicas en IPv4.
    • Enlace local (link-local): "fe80::/10" Sólo son válidas a nivel 2, serían como las 169.254.0.0/16 en IPv4. No són enrutables en la red IPv6. Más info.
    • Locales únicas (ULA): "fc00::/7" Estas tampoco son enrutables en la red IPv6 y su uso común es para redes privadas virtuales, un ejemplo podría ser el caso de un banco, que tiene sus ordenadores conectados a internet con su IP global, pero el programa de gestión del banco sólo sería accesible desde la ULA. Es habitual pues que un ordenador con IPv6 disponga de varias direcciones IPv6. Más info.
    • IPv4 mapeadas: "::ffff:0:0/96" (en desuso)
    • Compatible IPv4: (desaprobadas)
    • Local de sitio (site-local): (desaprobadas) "fec0::/10" para definir una red interna en un edificio o planta.
    • Loopback: "::1/128" el equivalente a la 127.0.0.1/8

Los rangos de IP

IPv6 está diseñado para que cada máquina tenga asignado un rango en lugar de una única IP. Solo en casos muy concretos se aconseja que un dispositivo electrónico tenga una única IP. El rango mínimo que se debería asignar a una interfaz de red es un /64 (2^64 Ips). De esta forma puede usarse la MAC address del dispositivo físico para generar una IP válida en esos restantes 64 bits. De esta forma, entre otras cosas se gana privacidad, pues ya no será trivial descubrir la IP de una máquina y escanear el rango entero nos podría costar varios años.

Los RIRs recomiendan a las ISP que entreguen a sus clientes un /48, de esta forma el cliente puede asignar hasta 2^16 /64 a sus dispositivos domésticos (nevera, teléfono, tele, enchufe, persiana...)

Asignando un /48 a cada persona del planeta, suponiendo que estas /48 no se devolviesen, se podría asignar un /48 a cada persona del planeta durante 480 años. 
¡Se espera que el protocolo quede obsoleto mucho antes!

Broadcast y ARP

Otro cambio realmente significante es que IPv6 no implemente Broadcast, y por lo tanto no existe broadcast domain. En su lugar se ha extendido y mejorado el funcionamiento de Multicast. Para comunicar los ordenadores directamente conectados (y sin conocer previamente sus Ips) se puede usar la dirección link-local multicast ff02::1. En IPv6 ARP ha sido sustituido por un protocolo mucho más potente, NDP (Neighbor Discovery Protocol) que usa ICPMv6 para sus comunicaciones.

Una de las consecuencias de estos dos cambios es que, por ejemplo, se pueden comunicar dos maquinas conectadas sin necesidad de configurar ninguna IP. Las direcciones link-local (fe80::/10), que se configuran automáticamente en nuestro sistema, nos lo permiten. ssh usuario@ipv6link-local%eth0

Como se puede apreciar la interfaz de red debe ser especificada, ya que si no el kernel no tiene forma de saber hacia donde enviar los paquetes. El ordenador destino verá que la dirección de destinación es su propia IP link-local y aceptará el paquete.

ULA

También funcionaría por las ULA, pero no tiene sentido, ya que aunque no sean enrutables por internet si que pueden serlo dentro de la red local, y en este caso el gateway ya nos enrutaría a la ubicación correcta.

Para añadir una ULA:
ip -6 addr add ULA/64 dev INTERFACE

El enrutamiento estático

El comportamiento de la red en esta versión cambia de forma significativa con la versión anterior, por ejemplo no es usual encontrar configuraciones como la siguiente:

eth0: 192.168.1.1/24
eth1: 192.168.1.10/16

En IPv6 lo habitual es que un mismo rango esté incluido en dos dispositivos de red (uno incluye el otro), el mas pequeño es siempre el que manda. Esta característica fue exportada a IPv4.

2001:0DB8:1006::/64 es mas pequeño que 2001:0DB8:1006:1100::/56

SLACC (Stateless address autoconfiguration)

En IPv6 son los mismos hosts quienes se configuran automáticamente usando el protocolo "Neighbor Discovery Protocol" (NDP) mediante mensajes ICMPv6. En el momento que estos se conectan a la red, envian al router una solicitud de link-local mediante una petición multicast (router solicitation) pidiendo los parámetros de configuración. Entonces los routers responderán con un paquete "router advertisment" que contiene los parámetros de configuración de la red.

La cabecera de IPv6

IPv6 incrementa la longitud de la cabecera IP de 20 a 40 bytes. La cabecera IPv6 contiene dos direcciones de 16 bytes (fuente y destino) precedidas de 8 bytes de control. La reducción de la información de control y la eliminación de opciones de la cabecera tienen como fin optimizar el procesamiento del paquete. Los campos de uso poco frecuente se han eliminado de la cabecera y se han pasado a extensiones de cabecera opcionales.

El campo "cabecera siguiente" o "next header", permite añadir nuevos campos en la cabecera sin tener que actualizar el software o el hardware de todos los dispositivos de la red. Y es que IPv6 se ha diseñado para poder implementar nuevos cambios de forma progresiva sin tener que apagar toda la red para aplicarlos. Más información.

La asignación de IPs

En IPv6 exististe DHCPv6, pero no es la opción recomendada. Para ello tenemos el nuevo protocolo SLAAC. En el router cabecera activamos el RA y los equipos de la red al conectarse a ella ven el anuncio del router y son ellos mismos quienes se aplican la dirección IP a partir de, por ejemplo, su dirección MAC. En sistemas basados en GNU/Linux siempre se asigna dicha IP a partir de la MAC, pero en otros sistemas existen las llamadas direcciones de privacidad, donde se genera la IP de forma aleatoria. Para activar IPv6 privacy en GNU/Linux deberemos activar las "IPv6 Privacy Extensions", como root editamos /etc/sysctl.conf y añadimos estas líneas:

net.ipv6.conf.all.use_tempaddr = 2 
net.ipv6.conf.default.use_tempaddr = 2

Reiniciamos la red (o la maquina si se resiste al cambio) y entonces, si disponemos de un RA en nuestra red, veremos que nos asigna 2 direcciones IPv6, una basada en nuestra MAC y otra aleatoria. Un ejemplo:

wlan0     Link encap:Ethernet  HWaddr 00:21:6a:a5:18:79  
          inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0 
          inet6 addr: 2001:db8:1006:0:221:6aff:fea5:1879/64 Scope:Global 
          inet6 addr: fe80::221:6aff:fea5:1879/64 Scope:Link 
          inet6 addr: 2001:db8:1006:0:2c04:41de:e3bc:ffe/64 Scope:Global 

De esta forma, las peticiones en una página web aparecen como si se hicieran desde la ip privacy:

Nombre del Ordenador:      2001:db8:1006:0:2c04:41de:e3bc:ffe

Una dirección IP vendrá formada pues, en el caso que tengamos una ip /64, los 64 primeros bits vendrán dados por nuestro proveedor, los últimos 64, se generarán “aleatoriamente”. Al igual que en IPv4 pues, podremos usar igualmente DHCP (aunque no sería recomendable) o bien definir una IPv6 de forma manual. La recomendación con IPv6 (y esto es realmente muy importante), seria olvidarse de recordar un montón de direcciones IP y empezar a usar los DNS (Domain Name System), que para esto fueron creados! :)

En los DNS, para asignar una dirección IPv4 usamos el Address Record A, en IPv6 usaremos AAAA, así que al ejecutar una petición de resolución sobre un dominio nos va a devolver las direcciones IPv4 y IPv6 relacionadas. Si nuestra red tiene salida IPv6, la dirección IPv6 será la prioritaria:

$ host guifi.net 
guifi.net has address 109.69.8.5 
guifi.net has IPv6 address 2a00:1508::5

El protocolo de movilidad

En IPv6 se ha desarrollado un conjunto de protocolos y herramientas de movilidad, que permiten "saltar" de red a red sin perder en ningún momento la conectividad. Por ejemplo, gracias a SLAAC los últimos 64 bits de nuestra IP son fijos (basados en la MAC). Así que si sabemos el prefijo (los primeros 64 bits) de la nueva red donde nos vamos a mover, podemos hacerlo sin perder nunca la conexión.

Por ejemplo, estamos en nuestra casa haciendo una llamada telefónica con nuestro móvil conectado a nuestra wifi y de repente salimos a la calle, fuera del alcance de nuestra wifi y pasamos a la red móvil de nuestro operador telefónico. Gracias a este protocolo podremos realizar dicha llamada telefónica sin ningún corte!

Extensión IPSec

IPv4 se diseñó para ser funcional, no seguro; así que con IPv6 se ha dado un paso adelante en este aspecto. Es la razon por la que se ha implementado IPSec en este protocolo. El uso de IPSec no es obligatorio en IPv6, lo que si que es realmente obligatorio es que todos los dispositivos que soporten IPv6 (y esto sería extensivo para las conexiones end2end), también soporten IPSec, dejando a nuestro libre albedrío la decisión de proteger o no nuestras comunicaciones. Más información

Trabajando con IPv6

La primera impresión que tenemos con IPv6 es pensar... ¡qué jaleo! ¡se han vuelto locos! ¡esto es el fin! Pero en realidad migrar una red de IPv4 a IPv6 no es una cosa tan crítica, además de que ambos protocolos pueden convivir perfectamente sin ningún tipo de conflicto! y es que TCP/IP aunque sea el protocolo más extendido no es el único. Posiblemente si analizamos nuestra red y se ha conectado nuestro vecino con su icacharro, podremos ver peticiones del protocolo manzanatalk. Vale que manzanatalk cada vez está más en desuso, pero es el primer protocolo distinto a tcp/ip que nos viene a la cabeza, están otros como netbios, ipx, etc.

Posiblemente nuestro operador de telecomunicaciones no está haciendo su trabajo y en tu casa aún no dispones de IPv6, ¡pero no desesperes! ¡hay opción! Existen los llamados tunnel brokers, que te permiten realizar tuneles 6to4 (sit). Todos los que he probado requerían IPv4 estática, pero parece que existe ya alguno que también permiten IPv4 dinámica. Así que vayamos a ver uno de los mas conocidos, el de hurricane electric, que además te ofrece los comandos para hacer un copy-paste en tu consola y disponer al acto de IPv6 :) Hurricane Electric (tunnelbroker.net) Esta página requiere registro y también IPv4 estática, pero una vez pasamos estos tramites podemos crear un tunel 6to4 realmente estable. Una vez logueados vamos a "Create Regular Tunnel", especificamos nuestra dirección IP (si no la ha localizado), escojemos uno de los servidores y le damos a "Create Tunnel". A continuación nos aparece una página con nuestra configuración IPv6 y en la pestaña example configurations escogemos nuestro sistema operativo (el caso más común Linux-net-tools):

ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::216.66.84.46
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:470:1f14:18b::2/64
route -A inet6 add ::/0 dev sit1

A partir de aquí ya dispondremos de un tunnel IPv6 en nuestra máquina y uno de los siguientes pasos es probar si estamos ya preparados para el mundo IPv6: http://test-ipv6.com/

Una vez tengamos IPv6 podemos realizar algunas pruebas. Dichas pruebas están hechas desde un servidor de giss.tv (giss.delanit.net), así que a partir de aquí las direcciones IPv6 son reales: $ host giss.delanit.net giss.delanit.net is an alias for v-giss.delanit.net. v-giss.delanit.net has address 109.69.9.56 v-giss.delanit.net has IPv6 address 2a00:1508:1000::6d45:938


Configuración IP

Éste servidor tiene en eth0 la IPv4 (pública) 108.69.9.56 y la IPv6 (global) 2a00:1508:1000::6d45:938. En eth1 la IPv4 interna de guifi.net. En la interfaz lo nos fijamos que está la ::1 que equivale a la 127.0.0.1.

# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:18:51:e6:d6:47  
          inet addr:109.69.9.56  Bcast:109.69.9.63  Mask:255.255.255.240 
          inet6 addr: 2a00:1508:1000::6d45:938/64 Scope:Global 
          inet6 addr: fe80::218:51ff:fee6:d647/64 Scope:Link 
          
eth1      Link encap:Ethernet  HWaddr 00:18:51:16:16:17  
          inet addr:10.138.15.131  Bcast:10.138.15.159 Mask:255.255.255.224 
          inet6 addr: fe80::218:51ff:fe16:1617/64 Scope:Link  
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope:Host 
      
# route -6 -n 
Kernel IPv6 routing table 
Destination               Next Hop                   Flag Met Ref Use If 
2a00:1508:1000::/64       ::                         U    256 0     1 eth0 
fe80::/64                 ::                         U    256 0     0 eth0 
fe80::/64                 ::                         U    256 0     0 eth1 
::/0                      2a00:1508:1000::6d45:901   UG   1024 1   312 eth0 
::/0                      ::                         !n   -1  1   830 lo 
::1/128                   ::                         Un   0   1 31179 lo 
2a00:1508:1000::6d45:938/128   ::                    Un   0   1 21440 lo 
fe80::218:51ff:fe16:1617/128   ::                    Un   0   1     0 lo 
fe80::218:51ff:fee6:d647/128   ::                    Un   0   1    74 lo 
ff00::/8                  ::                        256 0     0 eth0 
ff00::/8                  ::                         U    256 0     0 eth1 
::/0                      ::                         !n   -1  1   830 lo 

Al ser un servidor le hemos definido al igual que la IPv4, una IPv6 estática:

[/etc/network/interfaces]
auto lo eth0 
iface lo inet loopback 
iface eth0 inet static 
        address 109.69.9.56 
        netmask 255.255.255.240 
        gateway 109.69.9.49  

iface eth0 inet6 static 
        address 2a00:1508:1000::6d45:938 
        netmask 64 
        up ip r add default via 2a00:1508:1000::6d45:901 dev eth0  
Ping
$ ping6 guifi.net 
PING guifi.net(2a00-1508--5.ip6.guifi.net) 56 data bytes 
64 bytes from v6.guifi.net: icmp_seq=1 ttl=62 time=2.47 ms 
64 bytes from 2a00-1508--5.ip6.guifi.net: icmp_seq=2 ttl=62 time=1.96 ms 
64 bytes from v6.guifi.net: icmp_seq=3 ttl=62 time=2.08 ms  
Traceroute
$ traceroute -6 guifi.net 
traceroute to guifi.net (2a00:1508::5), 30 hops max, 80 byte packets 
 1  2a00:1508:1000::6d45:901 (2a00:1508:1000::6d45:901)  0.183 ms  0.166 ms  0.280 ms 
 2  2a00:1508:ffff:fffb::21 (2a00:1508:ffff:fffb::21)  2.032 ms  2.034 ms  2.029 ms 
 3  v6.guifi.net (2a00:1508::5)  2.438 ms  2.430 ms  2.423 ms  


Si nos fijamos, estamos usando las típicas herramientas de red, pero le estamos añadiento la opción -6.

De momento, como no todo el mundo dispone de IPv6 en sus servidores, dependemos de IPv4 hasta que poco a poco toda la red vaya migrando a IPv6 (algunos proveedores estiman que el proceso no se completará hasta 2030). Muchos, antes de empezar a mirar Ipv6, nos imaginamos que este cambio puede ser una cosa tan crítica como el más que conocido efecto 2000, en la que nos pensábamos que todo dejaría de funcionar. Pero como todo, es bueno estar preparados antes de que nos pille el tren, y lo más importante es informarse de lo que realmente implica este cambio. En mi humilde opinión ¡a mejor! :)

Presentes y futuros usos de un internet basado en IPv6

Al igual que cuando se diseñó IPv4, nadie imaginaba que terminaríamos todos con pequeños dispositivos en nuestros bolsillos con una capacidad computacional de varios cientos de veces de la de aquellos antiguos ordenadores de los años 80. Pero es que en la actualidad somos incapaces de imaginarnos cómo accederemos a internet en el futuro inmediato, con qué dispositivos, cuales serán sus usos... etc. Y es que esta realidad la podemos ver sin tener que ir muchos años atrás. ¿Quién hubiese imaginado hace tan sólo 5 años que lo común sería estar con nuestro teléfono móvil sacando fotos de una cosa que nos gusta en la calle y compartiéndola en tiempo real con cientos de amigos/contactos en la red? Las protestas organizadas simultáneamente a varios puntos del planeta han sido posibles gracias a la evolución de la tecnología.

Cuando tenemos a nuestro alcance la posibilidad de asignar una dirección IP a cualquier dispositivo nos pueden venir a la cabeza algunos de sus usos en modo de ciencia ficción.

Algunos de los usos mas novedosos que se le está dando a IPv6 en la actualidad es en el ámbito de la domótica, casas “inteligentes”, en las cuales podemos controlar con nuestro dispositivo móvil hasta la mas insignificante bombilla. La imaginación se desborda cuando tratamos temas como la seguridad o la reducción de costes energéticos a favor de nuestro bolsillo y del medioambiente.

Otro de los posibles usos que podría tener es por ejemplo para gestionar mucho mejor nuestra agenda. Cada componente electrónico de nuestro coche podría tener su única dirección IP, estar conectado con la base de datos del fabricante y en el momento de que este fallase, el propio coche contactaría con nuestro taller mecánico, pediría la pieza y el coche se coordinaría con nuestra agenda para que, por ejemplo, cuando tengamos que ir a hacer una visita a un cliente, en lugar de aparcar el coche en el párking dejarlo en el taller mecánico más cercano, dónde nos estaría esperando el nuevo recambio.

No tenemos que olvidarnos tampoco de las ventajas que puede aportar IPv6 en el campo de la medicina, para el seguimiento en tiempo real de enfermos los cuales es preciso tener un control exhaustivo de su tratamiento, así como monitorización remota de dispositivos de electromedicina, como los marcapasos, control de la diabétes, etc.

Coches, elementos electrónicos, dispositivos móviles, etc. permanentemente conectados a internet gracias a las nuevas tecnologías móviles como LTE y el diseño de IPv6 de estar permanentemente conectados a cualquier tipo de red sin ningún tipo de corte... Y es que el futuro ya está aquí, es el presente.

Véase también

Enlaces externos

Lecturas recomendadas

http://www.ipv6.es/es-ES/recursos/Paginas/Libros.aspx
http://www.worldipv6launch.org/
http://es.wikipedia.org/wiki/IPv6
http://www.ipv6.com/

Herramientas personales