Manual de FreeBSD
Anterior | Capítulo 29. Networking avanzado | Siguiente

# 29.16. IPv6

Texto original de Aaron Kaplan. Reestructurado y ampliado por Tom Rhodes.

IPv6 (también conocido como IPng o IP de nueva generación) es la nueva versión del conocido protocolo de red IP, tambíen llamado IPv4. Como sucede con el resto de los sistemas *BSD FreeBSD proporciona una implementación de referencia que desarrolla el proyecto japonés KAME. FreeBSD dispone de todo lo necesario para experimentar con el nuevo protocolo de red. Esta sección se centra en conseguir configurar y ejecutar correctamente el protocolo IPv6.

Al comienzo de los años 90 la gente comenzó a preocuparse por el rápido consumo del espacio de direcciones de IPv4. Dada la expansión actual de Internet existen dos preocupaciones principales:

- Agotamiento de las direcciones disponibles. Actualmente no se trata del principal problema debido al uso generalizado del del espacio de direccionamiento privado (`10.0.0.0/8`, `192.168.0.0/24`, etc.) junto con NAT.

- El número de entradas de las tablas de rutas comenzaba a ser imposible de manejar. Esto todavia es un problema prioritario.

IPv6 trata de resolver estos problemas y algunos más de la siguiente forma:

- IPv6 posee un espacio de direccionamiento de 128 bits. En otras palabras, en teoría existen 340,282,366,920,938,463,463,374,607,431,768,211,456 direcciones disponibles. Esto significa que existen aproximadamente 6.67 * 10^27 direcciones IPv6 por metro cuadrado disponibles para todo el planeta Tierra.

- Los routers sólo almacenan direcciones de red agregadas así que se reduce el número de entradas para cada tabla de rutas a un promedio de 8192.

Existen además muchas otras caracterísiticas interesantes que IPv6 proporciona, como:

- Autoconfiguración de direcciones (RFC2462)

- Direcciones anycast (una-de-varias)

- Soporte de direcciones multicast predefinido

- IPsec (Seguridad en IP)

- Estructura de la cabecera simplificada

- IP móvil

- Mecanismos de traducción de IPv6 a IPv4 (y viceversa)

Si quiere saber más sobre IPv6 le recomendamos que consulte:

- Resumen de IPv6 en playground.sun.com

- KAME.net

- 6bone.net

## 29.16.1. Conceptos básicos sobre las direcciones IPv6

Existen varios tipos distintos de direcciones IPv6: Unicast, Anycast y Multicast.

Las direcciones unicast son direcciones bien conocidas. Un paquete que se envía a una dirección unicast deberín llega a la interfaz identificada por dicha dirección.

Las direcciones anycast son sintácticamente indistinguibles de las direcciones unicast pero sirven para identificar a un conjunto de interfaces. Un paquete destinado a una dirección anycast llega a la interfaz más cercana (en términos de métrica de routers). Las direcciones anycast sólo se pueden utilizar en routers.

Las direcciones multicast identifican un grupo de interfaces. Un paquete destinado a una dirección multicast llega a todos los los interfaces que se encuentran agrupados bajo dicha dirección.

> Nota: Las direcciones IPv4 de tipo broadcast (normalmente `xxx.xxx.xxx.255`) se expresan en IPv6 mediante direcciones multicast.

Tabla 29-2. Direcciones IPv6 reservadas

Dirección IPv6 | Longitud del Prefijo (Bits) | Descripción | Notas
--- | --- | --- | ---
`::` | 128 bits | sin especificar | como `0.0.0.0` en Pv4
`::1` | 128 bits | dirección de bucle local (loopback) | como las `127.0.0.1` en IPv4
`::00:xx:xx:xx:xx` | 96 bits | direcciónes IPv6 compatibles con IPv4 | Los 32 bits más bajos contienen una dirección IPv4. También se denominan direcciones empotradas.
`::ff:xx:xx:xx:xx` | 96 bits | direcciones IPv6 mapeadas a IPv4 | Los 32 bits más bajos contienen una dirección IPv4. Se usan para representar direcciones IPv4 mediante direcciones IPv6.
`fe80::` - `feb::` | 10 bits | direcciones link-local | equivalentes a la dirección de loopback de IPv4
`fec0::` - `fef::` | 10 bits | direcciones site-local | Equivalentes al direccionamiento privado de IPv4
`ff::` | 8 bits | multicast |
`001` (base 2) | 3 bits | direcciones unicast globales | Todas las direcciones IPv6 globales se asignan a partir de este espacio. Los primeros tres bits siempre son 001.

## 29.16.2. Lectura de las direcciones IPv6

La forma canónica que se utiliza para representar direcciones IPv6 es: `x:x:x:x:x:x:x:x`, donde cada x se considera un valor hexadecimal de 16 Bit. Por ejemplo `FEBC:A574:382B:23C1:AA49:4592:4EFE:9982`

A menudo una dirección posee alguna subcadena de varios ceros consecutivos de forma que se puede abreviar dicha cadena (sólo una vez, para evitar ambigúedades) mediante ::. También se pueden omitir los ceros a la ceros a la izquierda dentro de un valor x. Por ejemplo `fe80::1` se corresponde con la forma canónica `fe80:0000:0000:0000:0000:0000:0000:0001`.

Una tercera forma de escribir direciones IPv6 es utilizando la ya tradicional notación decimal de IPv4 pero sólamente para los 32 bits más bajos de la dirección IPv6. Por ejemplo `2002::10.0.0.1` se correspondería con la representation hexadecimal canónica `2002:0000:0000:0000:0000:0000:0a00:0001` la cual es equivalente también a escribir `2002::a00:1`.

A estas alturas el lector debería ser capaz de comprender lo siguiente:

    # ifconfig

    rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
             inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
             inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
             ether 00:00:21:03:08:e1
             media: Ethernet autoselect (100baseTX )
             status: active

`fe80::200:21ff:fe03:8e1%rl0` es una dirección link-local autoconfigurada. Se construye a partir de la dirección MAC de la tarjeta de red.

Si quiere saber más sobre la estructura de las direcciones IPv6 puede consultar RFC3513.

## 29.16.3. Establecimiento de conectividad

Actualmente existen cuatro formas distintas de conectarse con otras máquinas y redes IPv6:

- Unirse a la red experimental denominada 6bone

- Obtener una red IPv6 a través de nuestro proveedor de acceso a Internet. Consulte a su proveedor de servicios para para más información.

- Encapsulación de IPv6 sobre IPv4 (RFC3068)

- Utilización del port `net/freenet6` si se dispone de una de una conexión de marcación por modem.

Vamos a explicar cómo conectarse al 6bone ya que parece ser la forma más utilizada en la actualidad.

En primer lugar se recomienda consultar el sitio web de 6bone para saber cuál es la conexión del 6bone (físicamente) más próxima. Se debe escribir a la persona responsable de ese nodo y con un poco de suerte dicha persona responderá con con un conjunto de instrucciones y pasos a seguir para establecer la la conexión con ellos y a través de ellos con el resto de los nodos IPv6 que forman parte del 6bone. Normalmente esta conexión se establece usando túneles GRE (gif).

Veamos un ejemplo típico de configuración de un de un túnel gif(4):

    # ifconfig gif0 create
    # ifconfig gif0
    gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
    # ifconfig gif0 tunnel MI_DIRECCIÓn_IPV4  SU_DIRECCIÓn_IPV4
    # ifconfig gif0 inet6 alias DIRECCIÓn_DE-SALIDA_IPv6_DEL_TÚNEL_ASIGNADO

Sustituya las palabras en mayúsculas por la información recibida del nodo 6bone al que nos queremos conectar.

La orden anterior establece el túnel. Compruebe que el túnel funciona correctamente mediante ping(8). Haga un ping6(8) a `ff02::1%gif0`. Deberíamos recibir recibir dos respuestas.

> Nota: Para que el lector no se quede pensando en el significado significado de la dirección `ff02:1%gif0` le podemos decir que se trata de de una dirección IPv6 multicast de tipo link-local. `%gif0` no forma parte del protocolo IPv6 como tal sino que se trata de un detalle de implementación relacionado con las direcciones link-local y se añade para especificar la interfaz de salida que se debe utilizar para enviar los paquetes de ping6(8). Como estamos haciendo ping a una dirección multicast a la que se unen todos los interfaces pertenecientes al mismo enlace debería responder al ping tanto nuestro propio interfaz como el interfaz remoto.

A continuación se configura la ruta por defecto hacia nuestro enlace 6bone; observe que es muy semejante a lo que hay que hacer en IPv4:

    # route add -inet6 default -interface gif0
    # ping6 -n MI_UPLINK

    # traceroute6 www.jp.FreeBSD.org
    (3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets
         1  atnet-meta6  14.147 ms  15.499 ms  24.319 ms
         2  6bone-gw2-ATNET-NT.ipv6.tilab.com  103.408 ms  95.072 ms *
         3  3ffe:1831:0:ffff::4  138.645 ms  134.437 ms  144.257 ms
         4  3ffe:1810:0:6:290:27ff:fe79:7677  282.975 ms  278.666 ms  292.811 ms
         5  3ffe:1800:0:ff00::4  400.131 ms  396.324 ms  394.769 ms
         6  3ffe:1800:0:3:290:27ff:fe14:cdee  394.712 ms  397.19 ms  394.102 ms

Esta captura de pantalla variará dependiendo de la localización de la máquina. Tras seguir estos pasos deberíamos poder alcanzar el sitio IPv6 de www.kame.net y ver la tortuga bailarina, que es una imagen animada que sólo se muestra cuando se accede al servidor web utilizando el protocolo IPv6 (para ellos se encesita utilizar un navegador web que soporte IPv6, IPv6, por ejemplo `www/mozilla` o Konqueror, que forma parte de `x11/kdebase3`, o también con `www/epiphany`.

## 29.16.4. DNS en el mundo IPv6

Existen dos tipos de registros de DNS para IPv6. No obstante el IETF ha declarado los registros A6 y CNAME como registros para uso experimental. Los registros de tipo AAAA son los únicos estandar a día de hoy.

La utilización de registros de tipo AAAA es muy sencilla. Se asocia el nombre de la máquina con la dirección IPv6 de la siguiente forma:

    NOMBREDEMIMÁQUINA AAAA   MIDIRECCIÓNIPv6

De igual forma que en IPv4 se utilizan los registros de tipo A. En caso de no poder administrar su propia zona de DNS se puede pedir esta configuración a su proveedor de servicios. Las versiones actuales de bind (versiones 8.3 y 9) y el port `dns/djbdns` (con el parche de IPv6 correspondiente) soportan los registros de tipo AAAA.

Anterior | Inicio | Siguiente
Línea IP paralela (PLIP) | Subir | ATM en FreeBSD 5.X

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.