Introducción a IPv6: CCNAv7 ITN Mod 12

Spread the love

A continuación les voy a escribir una breve introducción a IPv6, ya tendremos tiempo de profundizar en sus procedimientos de operación más adelante. Me sorprendí un poco porque, aunque he escrito sobre el tema, es primera vez que hago una introducción formal y sistemática al tema. Disfrutenlo.

Introducción: por qué IPv6

La verdad, el tema de por qué usar la nueva versión del protocolo de IP está un poco trillada. En esencia las razones están más en una serie de defectos en el diseño de IPv4 y el agotamiento del direccionamiento público (si no sabe por qué especifico público, lee mis últimas dos publicaciones). Cuáles son esos defectos en el diseño de IPv4?

  • La división del espacio de direccionamiento en clases: A, B y C. Las clases A y B son redes demasiado grandes y conllevan a una distribución ineficiente del espacio. Adicionalmente, el direccionamiento público de IPv4 sólo ocupa direcciones cuyo primer octeto vaya desde 1 hasta 223, el espacio restante son muchísimas direcciones IP de propósito especial o no utilizable!
  • El mismo defecto anterior, derivó a un problema ya un poco olvidado que fue la saturación de las tablas de enrutamiento de Internet, dado que en principio no se podían resumir las redes y tocó inventarse una técnica que ahora se comprende como lo correcto que es CIDR y VLSM.
  • Cuando se concede la posibilidad de usar direccionamiento privado (ciertas subredes que se pueden usar sin previo permiso), también aparece NAT como una técnica para permitir que éstas redes puedan acceder a Internet a pesar de no tener direcciones IP únicas globalmente. NAT genera una seria de problemas: rompe el principio de que la IP identifica univocamente un nodo (rompe algunas apps), problemas de trazabilidad del tráfico y diagnóstico de fallas, entre otros problemas.

Éstos problemas, combinados con el agotamiento del espacio de direccionamiento público disponible y el advenimiento de necesidades mucho más intensas sobre el acceso a internet llevan al desarrollo de IPv6 cuya capacidad es demasiado grande. IPv6 no sólo tiene una gran capacidad de direccionamiento, ésta nueva versión se ha diseñado teniendo en cuenta todos los defectos corregidos de la versión anterior (la v5 fue un experimento).

La coexistencia de ambos protocolos se conoce como Dual Stack, lo cual significa que un nodo de internet debe soportar ambos protocolos, detectar cuándo cierto tráfico viene empaquetado uno u otro y pasarlo al Stack correspondiente. Ésta es la solución ideal a futuro y es lo que se debe hacer actualmente. En ciertas situaciones excepcionales, puede ser que haya infraestructura que no soporte IPv6 o islas de IPv6 que se tengan que comunicar antes de que la transición completa a dual stack o a IPv6 nativo se termine, para éstos casos se usarán tecnologías como tunneling (empaquetar un protocolo dentro de otro, por ejemplo 6to4) o translation (también conocido como NAT64), es decir, convertir los encabezados y direcciones en el borde de una red al protocolo destino.

Las direcciones IPV6

Una dirección en ésta nueva versión tiene 128 bits, es decir, 4 veces la cantidad de bits que tiene una IPv4. Como la dirección es tan grande, es necesario representarla en un formato más corto, una de las soluciones fue escribir dígitos hexadecimales en vez de decimales: una IPv6 son 8 hextetos (8×16 bits) separados por dos puntos en vez de punto, p. ej: 0001:0002:0003:0004:0005:0006:0007:0008. La unidad básica de la dirección se le llamaría Hexteto, es decir, 16 bits, representados en 4 dígitos hexadecimales: ABCD es un hexteto válido, curiosamente, CAFE, ACAD, BEBE :), también, por obvias razones, la máscara como tal sólo se escribe en el formato de prefijo, es decir, con un / inicial, por ejemplo /64. Adicionalmente, los hosts tendrán unas reglas muy simples para que una IP de éstas se pueda escribir incluso más corta:

  • Dentro de un hexteto se pueden omitir los ceros iniciales: :00AA: = :AA:
  • Cualquier hexteto que sea sólo ceros, se puede escribir como un sólo 0: :0000: = :0:
  • Cuando existan varios hextetos consecutivos de sólo ceros, se pueden escribir como un espacio sin contenido solamente una vez en la IP: 2001:0:0:1234:0:0:1:2 = 2001::1234:0:0:1:2. Noten que aunque la dirección inicial tenía dos grupos de ceros consecutivos, sólo se puede «vaciar» uno de ellos (cualquiera de los dos es posible). La idea es que si se invierten las primeras dos reglas, se sabe cuántos dígitos faltan, pero si existen dos espacios vacíos, no es posible determinar cuántos dígitos faltan.

Adicional a la compresión mencionada, IPv6 cambia mucho en la forma de usar las direcciones. Por ejemplo, ya no existe el broadcast. Cuando uno lleva tiempo en redes IPv4, éste es un concepto un poco difícil de digerir porque hay muchos procesos que uno no se imagina cómo funcionan sin usar broadcast, pero ya tendremos tiempo de verlo. Todo el broadcast se reemplaza por multicast y éste se convierte en una tecnología clave para el éxito de IPv6. Adicionalmente, aparece un «nuevo» tipo de comunicación llamado Anycast. Hasta ahora no les he mencionado éste tipo de comunicación porque no es tan común en IPv4, pero en IPv6 es nativo. Anycast significa que varios nodos puden tener la misma dirección IPv6, pero los routers sólo envían tráfico al nodo que esté más cercano al origen del mismo, es decir, si un usuario de Amazon en México envía tráfico a cierta IP (de anycast), los routers llevan ese tráfico a un server en México o Estados Unidos, pero si un usuario de Amazon en Francia hace lo mismo, hacia la misma dirección, los routers envían el tráfico a un server en Europa.

Las direcciones de multicast siempre comienzan con 1100, actualmente se usan el prefijo FF para indicar direcciones de Multicast. Las direcciones que comiencen con 001x serán direcciones globales, lo que en IPv4 llamábamos direccionamiento público. El prefijo público implica que toda dirección que comience con un dígito 2 o 3 sería una dirección pública. Esa es una elección para limitar el acceso al direccionamiento y no una decisión técnica, cuando se asignen direcciones que comiencen con 2 y con 3 se usarán los dígitos siguientes.

Direcciones IPv6 de unicast

Una de las características más notables de esta versión del protocolo, es lo que equivaldría a la porción de host en IPv4, conocida como interface ID en IPv6, siempre será de 64 bits. Eso deja 64 bits para distribuir segmentos especiales, direccionamiento público y subredes. Aunque eso es sólo el doble de los bits de una dirección IPv4, en realidad representa un número muchísimas veces mayor a los 4 mil millones de posibles direcciones IPv4 que podríamos numerar (sin las restricciones de Clases).

Entre las direcciones Unicast, tenemos dos tipos:

  • Global Unicast Address (GUA)
  • Link-local Address (LLA)

Las direcciones LLA son unas direcciones especiales que todo nodo va a tener automáticamente, el prefijo sería FCxx::/7 o FDxx::/7, de acá deducimos algo muy interesante y clave en IPv6: todas las interfaces deben tener más de una IPv6! En IPv4 una IP identificaba de manera única una interfaz y de hecho, el principio es que identificar aun nodo completo, ahora una IP no identifica un nodo sino una interfaz y por defecto cada interfaz tendrá por lo menos una IPv6 (LLA) más las direcciones de las redes a las cuales pertenezcan y las direcciones de multicast que necesiten. Las direcciones LLA son un mecanismo de comunicación punto a punto que ayuda a no desperdiciar direcciones y facilitar la comunicación inmediata entre nodos, se usa intensivamente. La configuración de una IPv6 global es igual a la de una IPv4, sólo que se usa el comando ipv6 address <address> <prefix> en vez de ip address <ip> <mask> reemplazando la máscara por el prefijo y sobre todo, cada dirección que introduzcan (incluso equivocadas) queda en la interfaz (en ipv4 un comando ip address reemplaza la configuración anterior).

Direccionamiento automático en IPv6

IPv6 es mucho más versátil que IPv4, una de las evidencias es cómo es el direccionamiento dinámico. Existen varias alternativas de direccionamiento dinámico en IPv6, una la ejecuta el propio protocolo ayudandose de su propia versión de ICMPv6, específicamente de los mensajes RS/RA (router solicitation/advertisement en inglés). Este método de autoconfiguración se le llama SLAAC (statless address autoconfiguration). Cuando un host se conecta a la red envía un RS usando su dirección LLA, si existe un router configurado para responder éstas solicitudes, éste (o estos) responden con un RA que contiene el prefijo de la red (entre otras cosas) y el host usa algún método para completar los últimos 64 bits, normlamente usa una técnica llamada EUI-64. A éste método se le llama statless o sin estado, porque el router sólo envía respuestas a solicitudes de direcciones pero no lleva el control de cuántas IPs existen en la red ni por cuánto tiempo se van a usar. Adicionalmente, un router no envía información adicional como sí lo hace un DHCP.

El otro método de autoconfiguración es DHCPv6, en éste caso, el propio router puede indicarle a los nodos que deben solicitar las direcciones por DHCP (gran diferencia co IPv4), pero aún así el router puede asignar la IP, sólo que el DHCP lleva el control de los nodos, el tiempo de asignación y parámetros adicionales de configuración.

EUI-64: completar una IPv6

Una técnica muy común para crear una dirección en ésta versión, es EUI-64. Una interfaz ethernet siempre tiene su MAC, la cual tiene 48 bits, por lo que no se puede usar directamente como idnetificador de la misma en la dirección IPv6: le faltan 16 bits. Para completar el interface ID, se insertan 16 bits especiales en el medio de la MAC. Los 16 bits son FFFE y se establece el 7o bit en la dirección resultante en uno para identificar que ésta dirección fue resultado de éste proceso.

Éste es el mecanismo típico para crear las direcciones LLA, que como he dicho, se usa intensivamente, sin embargo, dado que no todas las interfaces tienen direcciones MAC, a veces simplemente se genera una secuencia aleatoria de 64 bits. Entonces, una dirección LLA consiste usualmente en el prefijo FFxx::<EUI-64 ID>, por ejemplo FE80::7279:B3FF:FE92:3640 (la mac sería: 70:79:B3:92:36:40)

Conclusiones y siguientes publicaciones





Ésta fue una brevísima introducción a IPv6, el tema es ámplio y requerá mucho tiempo para dominarlo. De todas formas, espero que haya sido muy digerible la información que les proporcioné. Si quieren leer más, les recomiendo una publicación que hice hace varios años ya sobre el tema de subneteo en IPv6 con base en un artículo que leí en inglés.

En la siguiente publicación seguiré con las ayudas de CCNAv7, el tema es ICMP de IPv4 y 6. Adicionalmente veremos cómo hacer un diagnóstico básico usando las utilidades que usan éste importante protocolo: ping y traceroute. Si les gustó el contenido por favor comenten y compartan.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.