Una de IPv6, por favor (2): redes privadas en IPv6

, , No Comments
Volvemos con IPv6, después de demasiado tiempo sin decir nada sobre el tema. Hoy, redes privadas. O dicho de otra forma, la respuesta a la pregunta: ¿qué red escojo para mis pruebas?

RFC 1918: redes privadas en IPv4

El RFC 1918 define las redes privadas que todos conocemos. En orden de menor a mayor tamaño, son:

  • 192.168.0.0/16 (65 mil IPs)
  • 172.16.0.0/12 (un millón de IPs)
  • 10.0.0.0/8 (16 millones de IPs)

Los números no son exactos por eso de que trabajamos con 1024 y no con 1000, pero sirven para ilustrar las cantidades de las que estamos hablando.

En IPv6 existieron un tipo de direcciones llamadas site-local, destinadas a las redes de una organización (un site). Pero como explicaba en el anterior artículo sobre IPv6, fueron marcadas como "deprecated" por la dificultad de definir qué era un site. El verdadero equivalente de las redes privadas IPv4 en IPv6 son las unique local addresses (RFC 4193).

Las unique local addresses son direcciones no rutables globalmente en IPv6. Eso significa que un router no las mandará a Internet, sino que las descartará y te mirará extrañado preguntándose por qué le estás enviando esa porquería. Luego le contará al resto de routers lo patoso que eres. Los routers, por definición, son unos cotillas de cuidado.

El espacio asignado para estas direcciones es fc00::/7, que a su vez se divide en dos redes con máscara de 8 bits: fc00::/8 (pendiente de definición, y reservada) y fd00::/8, que es la que podemos usar.

Uso de la red fd00::/8

La red fd00::/8 nos da chorrocientos miles de millones de direcciones IP (millón arriba, millón abajo). Debería llegar para cualquier red privada del mundo. De hecho, toda la red IPv4 cabría varias veces dentro de ésta: en IPv4 podemos usar 2^32 direcciones IP, y en una red IPv6 con máscara de 8 bits podemos usar 2^(128-8)  = 2^120 direcciones IP.

Si siguiéramos las reglas de asignación de IPs que usamos en IPv4, podríamos definir una subred dentro de fd00::/8 para nuestra LAN casera, y asignar secuencialmente las direcciones para nuestros dispositivos. Por ejemplo: fd00::/120 equivaldría a una clase C en IPv4 (máscara 24, 256 IPs); o, si tuviéramos una red corporativa, podríamos usar fd00::/112 para tener las mismas IPs que en una clase B (máscara 16, 65536 IPs). La dirección de red sería la fd00::0, la primera IP sería la fd00::1 y la IP de broadcast sería la fd00::00ff para la máscara 120 y fd00::ffff para la 112. Pero no es así cómo se hace en IPv6.

En IPv4 podíamos dividir cada dirección IP en dos partes: un prefijo (o "identificador de red") y un sufijo (o "identificador de host"). Ejemplo: en la dirección 192.168.1.50, asumiendo que está en una clase C, el prefijo sería 192.168.1 y el sufijo 50. Una dirección IPv6, en cambio, se divide en más partes:

  • Un prefijo de 8 bits (7+1, en realidad)
  • Un identificador global de 40 bits (que podría ser el ISP)
  • Un identificador de red de 16 bits
  • Un identificador de interfaz de 64 bits

El primer campo son las letras "fd", y no podemos tocarlos (nos saldríamos de la red fd00::/8). Éste y el siguiente campo (los primeros 48 bits) forman lo que se llama el "prefijo de rutado". En algunos sitios verás que se le llama identificador de red a los primeros 64 bits, no sólo los 16 que he puesto aquí; y en otros verás que se llama "prefijo de rutado" a esos mismos 64 bits. Tengan el nombre que tengan, son los que se van a usar para rutar el paquete hasta el dispositivo final.

El identificador único del dispositivo final es la parte de "identificador de interfaz". Puede ser generado de varias formas (a partir de la MAC del dispositivo, por ejemplo), y sólo importa que sea único. Podría repetirse en otra red, pero entonces los primeros 64 bits serían distintos y se mantendría su exclusividad.

En una dirección privada como la que buscamos podemos asignar nosotros los identificadores globales y de red. Podemos generarlos aleatoriamente para cada dispositivo, si queremos. El rutado no será un problema: si hemos definido fd00::/8 como nuestra red casera, cualquier cosa que esté ahí valdrá como dirección IP.

Sin embargo, sin darnos cuenta acabamos de responder a la pregunta inicial de "qué red uso". Podemos mantener la fd00::/8 como red local y generar todo menos los primeros 8 bits aleatoriamente, pero sería como usar la red 10.0.0.0/8 para la red de tu casa. Una opción mejor es buscar unos valores que nos gusten para los primeros 64 bits (teniendo en cuenta que los primeros 8 serán "fd"), y usarlos como nuestro "identificador de red". Tendríamos así una red privada con máscara de 64 bits, en la que cada dispositivo sería identificado por 64 bits generados como nos venga en gana.

Un ejemplo

Una ventaja de las direcciones IPv6 es que puedes usar unas pocas letras, lo que permite cierta creatividad. ¿Qué prefijos de red podríamos crear empezando por "fd" y añadiendo 6 bytes más? Para ver qué ha hecho otra gente en casos parecidos, buscad en Google "funny ipv6 addresses".

Personalmente, como soy un tío aburrido, voy a usar fded:dead::/64, porque se parece a "Red Dead" y así no me olvido de ella.

Próximamente: Asignación de direcciones públicas

Las direcciones IPv6 públicas se dividen en las mismas partes que las privadas: 48 bits de rutado, 16 de identificador de red, y 64 de identificador de dispositivo. Los ISPs tendrán asignadas redes con máscaras de 32 bits, y asignarán a sus usuarios redes con máscaras de 48 bits, que podrán dividirlas hasta en 65536 redes con máscara de 64 bits.

Es un lío, pero un lío interesante que queda para el siguiente artículo. Hasta entonces, espero haberte dejado suficiente para que juegues en casa durante un rato.



0 comentarios:

Publicar un comentario