Ir al contenido principal

Introducción a las direcciones IPv6

Hace tiempo que se agotaron las direcciones IPv4, pero aún seguimos utilizándolas gracias a NAT, Network Address Translation. NAT se encarga de traducir las direcciones privadas de las redes locales a direcciones de red públicas y viceversa (las direcciones privadas son un rango de direcciones que se reservaron para usarse exclusivamente en redes internas y no son enrutables en Internet). Las direcciones IPv4 utilizan 32 bits y se representan en formato decimal-punto. Es decir, se dividen los 32 bits en 4 bytes y cada uno de estos bytes se pasan a formato decimal. Luego se separan entre sí por medio de un punto. Un ejemplo de dirección IPv4 es 192.168.0.1. El espacio de direcciones máximo utilizando 32 bits es de 2³², y aunque este número nos pueda parecer grande, en la actualidad se encuentra agotado.

La solución consiste en utilizar un espacio de direcciones mayor y para ello se definió el estándar IPv6.

IPv6

Las direcciones IPv6 utilizan 128 bits, esto supone un espacio de direcciones de 2¹²⁸, o lo que es lo mismo, 340 sextillones de direcciones; un número realmente enorme. Para hacernos una idea del tamaño de este número imaginemos que creamos sobre la superficie del planeta una cuadrícula cuyos cuadrados tengan el tamaño de un milímetro cuadrado, pues en cada uno de estos cuadrados cabrían ¡670 mil billones de direcciones!

Con esta enorme cantidad de direcciones, cada dispositivo que esté conectado a Internet podrá tener su propia dirección pública y podrá ser accedido directamente desde Internet sin la necesidad de utilizar NAT y técnicas de aperturas de puertos; tal y como se utilizan hoy en día con IPv4.

Actualmente los sistemas operativos modernos soportan IPv6, pero aún no está en uso en España. Podemos utilizar IPv6 en nuestras redes privadas, pero no podemos acceder a Internet utilizando IPv6 ya que las operadoras de telefonía españolas aún no asignan a los clientes direcciones IPv6  públicas funcionales ni enrutan este tráfico. 

Anatomía de una dirección IPv6

En las direcciones IPv4, los bytes u octetos representados en decimal se separan por medio de puntos. En el caso de las direcciones IPv6 no se utilizan octetos sino hextetos, un hexteto es el nombre no oficial que se le da a un segmento 16 bits. Pero al contrario que en las direcciones IPv4 que se utiliza una representación en decimal, IPv6 utiliza una representación hexadecimal. Cada hexteto se separa del resto por medio del carácter dos puntos.

A continuación se muestra una dirección IPv6:

fe80:8579:4578:456d:ac10:3be7:048c:4ffa

Como se puede apreciar, estas direcciones son más difíciles de memorizar y la idea es que los usuarios no tengan que asignarlas manualmente, sino que se asignen de forma automática ya sea por medio de los routers o de algún servidor DHCP.

En el ejemplo anterior apenas hay ceros, pero es normal encontrar direcciones IPv6 con bastantes ceros como, por ejemplo:

fe80:0000:0000:0000:658a:0000:4600:1001

Estas direcciones se pueden simplificar eliminando ceros para hacer que sean más fáciles de recordar y trabajar con ellas. Dada la dirección anterior, el proceso para simplificarla consiste en dos pasos. El primero consiste en eliminar los ceros de la izquierda de cada hexteto, para el caso anterior la dirección quedaría como:

fe80:0:0:0:658a:0:4600:1001

El segundo paso consiste en eliminar grupos de ceros consecutivos, pero sólo se puede hacer una vez en cada dirección, de modo que la dirección anterior se puede simplificar como:

fe80::658a:0:4600:1001

Nótese que si se eliminan más de un grupo en la misma dirección, sería imposible reconstruir la dirección original ya que podrían resultar varias soluciones posibles.

Tipos de direcciones IPv6

Existen tres tipos de direcciones IPv6, direcciones de Unicast, direcciones de Multicast y direcciones de Anycast. Al contrario, que en IPv4 no tenemos direcciones de Broadcast. A continuación se van a resumir las mismas:

  • Unicast: funciona igual que en IPv4, es decir, cuando se manda un paquete a una dirección de este tipo sólo la recibe el dispositivo que posea esta dirección.
  • Multicast: se ha mejorado con respecto a IPv4, disponiendo de muchas más direcciones de este tipo. Se forman grupos de dispositivo con direcciones de Multicast, de modo que cuando un paquete se envíe a una dirección de Multicast, todos los dispositivos que posean la misma dirección de Multicast recibirán dicho paquete. Con este tipo de direcciones podríamos implementar la funcionalidad de Broadcast de IPv4 con direcciones IPv6; sólo tendremos que incluir a todos los equipos de nuestra red en el mismo grupo de Multicast. De todos modos, IPv6 cuenta con una dirección de Multicast denominada all-nodes con este fin.
  • Anycast: Este concepto no existía en IPv4 y en algunos textos viene traducido como direcciones de "Difusión por proximidad". Consiste en asignar la misma dirección de Unicast a más de un dispositivo e indicarles a los mismos, que están compartiendo dicha dirección. Cuando se envíe un paquete a esta dirección lo recibirá el dispositivo que cuente con esta dirección y que sea más fácil de acceder, por ejemplo, el que esté más próximo. Este tipo de direcciones se usa en los casos que queramos mandar un paquete a cualquier miembro de un grupo, pero no necesitemos que lo reciban todos. Se puede utilizar para balanceo de carga entre routers de una empresa.

Longitud del Prefijo (Máscaras de Subred)

En IPv4 las máscaras se pueden representar de dos formas diferentes:
  • Decimal-Punto: en este formato la máscara se representa igual que las direcciones, por ejemplo,  255.255.255.0.
  • CIDR o Longitud del Prefijo: en este formato la máscara se representa como una barra seguida del número de bits a 1 que contenga la máscara, por ejemplo, /24.
En IPv6 sólo se pueden representar en este último formato. En las redes LAN IPv6 se suele utilizar como longitud de prefijo /64, es decir, quedarían 64 bits para asignación de hosts. Téngase en cuenta que IPv4 sólo tenía 32 bits en total, ¡ahora podremos tener 64 bits para una LAN!

Clasificación de direcciones Unicast IPv6 

Las direcciones Unicast IPv6 las podemos clasificar en los siguientes tipos:
  • Unicast global: son como las direcciones IPv4 públicas, es decir, direcciones accesibles globalmente y por lo tanto únicas.
  • Link-local: FE80::/10. Son direcciones que se asignan a los dispositivos del link-local, es decir, de la misma subred. Estas direcciones no son enrutables fuera del link-local y sólo se pueden acceder desde el mismo. Si a un dispositivo no se le asigna una dirección de este tipo, ya sea manualmente o por DHCP, automáticamente él se generará una. La idea es que se pueda comunicar con otros hosts dentro del link-local. Los dispositivos del link-local utilizan la dirección de link-local del router al que estén conectados como puerta de enlace y no su dirección global. Serían como las direcciones APIPA de IPv4. Sólo que en el caso de IPv4  se generan exclusivamente cuando no hay un servidor DHCP disponible y no se ha asignado manualmente ninguna dirección.
  • Loopback: ::1/128. Hace referencia al propio dispositivo.
  • No especificada: ::/128. No hace referencia a ningún dispositivo en concreto.
  • Local-única: FC07::/7 - FDFF::/7. Estas direcciones no pueden ser enrutables globalmente y serían las equivalentes a las direcciones IPv4 privadas, con algunas diferencias. Se utilizan para dispositivos que no necesiten acceder o ser accedidos desde otras redes.
  • IPv4 integrada: se utilizan para encapsular direcciones IPv4 dentro de direcciones IPv6. Pensadas para el periodo de transición.

Usando IPv6

Aunque los operadores de telefonía en España no nos asignen aún direcciones IPv6 y no podamos navegar con IPv6 por Internet, podemos utilizarlas en nuestras redes locales. Se puede tener instalado lo que se denomina dual-stack, es decir, el protocolo IPv4 y el protocolo IPv6 al mismo tiempo en nuestros dispositivos. El caso es, que aunque no lo sepamos, nuestros ordenadores ya cuentan con este dual-stack desde hace tiempo. En el caso de Linux, desde la terminal podemos teclear ifconfig y comprobar que nuestra tarjeta de red ya cuenta con una dirección IPv6 de tipo link-local. Siempre que no lo hayamos desactivado anteriormente.

Los comandos clásicos de red ya soportan IPv6, algunos requieren una versión modificada como por ejemplo, el comando ping,  que cuenta con su homólogo llamado ping6. Para usarlo tendremos que ejecutarlo del siguiente modo:

$ ping6 fd10::ac09:9931:b24c:4f2a%enp5s0

ping6 requiere que se añada al final de la dirección el carácter '%' seguido del nombre de la interfaz de red que vayamos a utilizar.

A la hora de escribir una dirección IPv6 en la barra de direcciones de un navegador web, habrá que escribirla entre corchetes, por ejemplo,

http://[fd10::ac09:9931:b24c:4f2a]

ya que el carácter dos puntos tiene un significado especial dentro de las URL. Se utiliza para separar las direcciones de los puertos. Si queremos indicar un puerto, no hay problema, lo hacemos como siempre:

http://[fd10::ac09:9931:b24c:4f2a]:8080



Y de momento esto es todo, en un próximo artículo profundizaremos más sobre las direcciones IPv6.


Comentarios

Entradas populares de este blog

Instalando Moodle con Docker

En este blog ya hemos hablado en varios artículos sobre la tecnología de contenedores, pero hasta ahora nos habíamos centrado en LXD . En este artículo vamos a explicar cómo podemos instalar Moodle en menos de un minuto (dependiendo de la velocidad de descarga que se tenga, se puede alargar un poco más) usando contenedores. Acerca de Moodle No voy a explicar que es Moodle ni como instalarlo desde cero, para eso existe en Internet multitud de tutoriales. Lo que sí quiero comentar es que para instalar Moodle hace falta un servidor web con PHP . Además requiere que PHP tenga instalado una serie de componentes adicionales. Por otro lado, necesitamos tener instalado en el servidor un sistema de gestión de bases de datos relacional, ya que Moodle almacena la información en él. Normalmente se utiliza MySQL , MariaDB o PostgreSQL . También debemos crear una base de datos específica para Moodle con su respectivo usuario. Durante la instalación Moodle creará las tablas necesari

Analizando el protocolo HTTP

El objetivo de este artículo es el de explicar de forma práctica el funcionamiento del protocolo HTTP y entender el intercambio de datos que se realiza entre los servidores y los clientes web. Por otro lado, cubre la necesidad de tener un texto en español que sirva de referencia a mis alumnos de Servicios en Red  a la hora de realizar la práctica de clase  HTTP-1 . La idea es ver de forma práctica el funcionamiento interno del protocolo HTTP . Para ello, vamos a utilizar un par de herramientas de la línea de comandos de Linux ( telnet y netcat ), con las que vamos a simular el comportamiento tanto del navegador como del servidor web. HTTP es un protocolo de la capa de aplicación, y como muchos otros protocolos de esta capa, está basado en texto. De hecho, los comandos que envía el navegador al servidor y sus respuestas se pueden leer perfectamente en inglés. Por defecto, HTTP utiliza el puerto 80 TCP y HTTPS  el puerto 443 TCP. Los ejemplos que vamos a ilustrar serán

ZFS, Primera parte

Cuando el año pasado instalé LXD y lo configuré por primera vez, me encontré que podía utilizar, de hecho se recomienda, el sistema de ficheros ZFS para albergar los contenedores. Posteriormente, cuando instalé Proxmox en el servidor de mi departamento, me encontré de nuevo con  ZFS . Anteriormente no le había prestado mucha atención a  ZF S , normalmente utilizo EXT4 o XFS , pero estaba claro que había una estrecha relación entre  ZFS  y los sistemas de virtualización. ZFS  es un sistema de ficheros desarrollado por Sun Microsystems  (creadores también del lenguaje de programación Java ), posteriormente la empresa fue adquirida por Oracle , actuales propietarios. OpenZFS  es la variante libre y posee una licencia de tipo  CDDL , que aunque es software libre, es incompatible con GPL . Por este motivo, el kernel de Linux no lo incorpora de serie. Sin embargo, los usuarios pueden instalarlo sin problemas ya que se encuentra en los repositorios de la mayoría de las distribucione