Conferencia sobre ipv6, dictada en mayo del 2003
Actualizada Octubre de 2010
mi host ipv6 es (a veces no anda): http://hcaste.broker.freenet6.net/
Introducción
En el 2003 por inquietud personal me incliné al estudio del IPv6. Desde aquel año ya el protocolo ha evolucionado y se está expandiendo. Esta página es una breve introducción para iniciarse y acoplarse a alguno de los distribuidores (Brokers) ya existentes. Tan solo comentaré como confeccionar un túnel TSP.
Cabe destacar que los núcleos GNU/Linux mayores al 2.4.10 soportan en un 100% ipv6 así como algunas aplicaciones ya tienen la posibilidad de conección usando direcciones ipv6 e ipv4, como ser: bind, ssh, apache2, etc.
Si deseas escribirme
puedes hacerlo a horacio9573@hotmail.com
Motivos para cabiar al nuevo protocolo
Se está agotando el espacio de direcciones IPv4, se estima que para el 2012 (como predijo Nostradamus) al 2015 se agotará todo el direccionamiento permitido.
IPv4 posibilita 4.294.967.296 direcciones de red diferentes, IPv6 en cambio admite 340.282.920.938.463.374.607.431.768.211.456 direciones diferentes.
Grandes tablas de encadenamiento en troncales IPv4, con alto grado de complejidad en la red, elevados costes de mantenimiento.
Necesidad de mejorar la calidad en el transporte de datos en tiempo real.
Mayor espacio de direcciones: IPv6 tiene un campo de 128 bits frente a los 32 bits de IPv4.
Seguridad: IPv6 incluye seguridad en sus especificaciones (IPsec por ejemplo).
Aplicaiones a tiempo real: IPv6 incluye campos para etiquetar los fujos de datos de manera tal que los routers puedan establecer prioridades (QoS).
Plug and Play: IPv6 incluye en su mecanismo el plug and play ó autoconfiguración.
Direccionamiento estructurado: La asignación de una dirección sigue criterios establecidos, como ser Unicast, Multicast, etc.
Se decidió asignar comoIPv5 (RFC 1819) al obsoleto protocolo experimental llamado ST-II ó stream protocol version 2. Diseñando para el control de flujo de datos. Este fue abandonado por la IETF en 1995. Por eso el siguiente protocolo debería llamarse IPv6.
Toda dirección
ipv6 se expresa canónicamente en base hexadecimal, cuyas direcciones
binarias de destinos y proviniencia constan de 128 bits, esto permite
un total de 2128-1 direciones legítimas. Si lo comparamos
con el ipv4 el incremento es tal que se puede cubrir todo el universo
conocido con direciones con una desidad de 1 dirección cada
kilómetro cúbico. La forma canónica de expresar una dirección
ipv6 es en 8 grupos de 16 bits escritos en notación hexadecimal
separados por ":", como por ejemplo:
3ffe:0b90:0003:0f17:0000:0000:0000:0002
Se acepta las siguientes abreviaturas de escritura:
Los ceros a la izquierda de cada grupo se omiten, entonces :0003: puede simplicarse como :3:
Bloques contiguos de 16bits de ceros pueden simplificarse por únicavez con ::, entonces la dirección anterior se simplifica como: 3ffe:b90:3:f17::2
Existen solo dos
direcciones resrvadas en ipv6, una es la dirección local ::1
(se están simplicando 31 ceros), esta solo se la puede asociar al
dispositivo "loopback", es similar en ipv4 a la dirección
privada 127.0.0.1, otra es :: (todo cero) que
corresponde a dirección no especificada y no puede usarse como
direción de nada. En cabio no existe la
dirección broadcast, por lo tanto en teoría
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff es legítima, pero no
se usa.
Los campos de direcciones que tienen nombres específicos se denominan prefijos. Los prefijos permiten conocer donde está conectada una determinada dirección, es decir su posible ruta. Las direciones IPv6 estan asociadas a interfaces (eth*, sit*, freenet, lo, etc.) y estas al menos deben tiener una unicast link-local, pero una interfaz puede tener varias direcciones IPv6.
Espacio
de direccionamiento especial en ipv6
Este es un resumen
del espacio de direccionamiento especial usado en ipv6 :
Túneles dinámicos de ipv6 sobre ipv4 (::<dirección ipv4>/96), conocida como direcciones ipv6 compatibles con ipv4, esto permite retrasmitir tráfico ipv6 sobre infraestructura ipv4 (rfc 2893), como por ejemplo ::172.15.20.35/96
Representaciones de direciones ipv4 en ipv6 (::ffff:<direción ipv4>/96), permite que los nodos que solo soportan ipv4 puedan ser anexados a la red ipv6, como ejemplo ::ffff:198.160.1.4/96
Modelo de direccionamiento (RFC 2373)
Unicast: Asociados a una sola interfaz, un paquete enviado a una dirección unicast solo es entregado a la interfaz asociada con dicha dirección. Por ejemplo fe80::21f:d0ff:feb2:cf51/64 está asociado a la interfaz eth1 en mi máquina con dirección MAC 00:1f:d0:b2:cf:51, (ver mas adelante direciones de enlace) o la dirección global 2406:a000:f0ff:fffe::229d/128. (Broker Australia)
Anycast: Identificador asociado a un conjunto de interfaces, en ipv4 se lo conocía como direciones de red. Y puede estar asociado a varias máquinas. Por ejemplo 2001:1318:1001::/48 es un identifador anycast de la red UTN-FRLP. Un paquete enviado a una dirección anycast es entregado a la máquina más próxima desde el punto de vista del tiempo de latencia.
Multicast: Identificador asociado a un conjunto de interfaces y nodos. Un paquete enviado a una dirección multicast es entregado a todas las interfaces asociadas con dicha dirección. Esto es similar al broadcast de ipv4. Por ejemplo ff02::2 a todos los routers sobre la interfaz.
Direciones
unicast locales
Existen dos tipos de direciones unicast locales, por otro lado todo nodo debe por lo menos contener una de ellas, su formato de dirección es n-bits para el prefijo de subred y 128-n bits identificador de la interfaz.
El identificador de interfaz se emplea para identificar interfaces en un enlace y deben ser único en dicho enlace. Los dos tipos de direciones locales son: Enlace local (link-local, ver figura) y sitio (site-local). Las primeras tiene un formato fe80::<id de interfaz>/10 y estan asociadas a una intefaz, y no puden salir de ella ningún paquete que tenga a esta como dirección.
Las segundas tiene un formato fec0::<id-subred><id-interfaz>/10 y estan asociadas a un sitio u organización, son análogas a las redes privadas 192.162.0.0/16, pero con muchos más espacio de direciones. No pueden salir por routers los paquetes IP que lleven esa dirección como destino. Cuando L=1 indica identificador local y L=0 no locales. Tambien se las conoce como ULA o Unique Local Adress. Por ejemplo
3ffe:b90:3::2 (global) ------------> fc00:b90:3::2 (ULA)
Direciones AnyCast (RFC 2526)
Tienen el mismo
rango que las unicast, cuando una direción unicast es asociada a más
de una interfaz se convierte en una dirección anycast. Existen
direciones anycast asociadas a cada subred requeridas para los
ruteadores (subnet router anycast address). Su formato es
<prefijo de red><subred>::/n es decir el
identificador de interfaz es el cero.
Todos los paquetes que contengan esta dirección de destino serán
enviados a dicha subred por los routers. Por ejemplo
2406:a000:f0ff:fffe::/64 aca 2406:a000:f0ff es el identificador de la red y :fffe: corresponde a una subred. fe80::/10 Asociada a toda interfaz local. fec0::/10 Asociada a todo el sitio.
Direciones MultiCast (RFC 2375)
Es una direción que caracteriza a un conjunto de nodos, tiene un formato
Si el bit (flags) T=0 la dirección multicast es permanente y está designada por la ipv6 global address, caso contrario su valor es T=1 y se trata de una dirección temporaria.
El identificador de grupo asocia a un grupo en particular de interfaes, como ejemplo de direcciones:
ff01::101 A
todos los identificadores de tiempo (NTS) con identificado de grupo
101 en ambito del nodo
ff02::101 A todos en el mismo
enlace asociado con la misma interfaz con id-grupo 101
ff01::101
idem pero a toda la internet.
ff15::101 No permanente
asociada al sitio. La direcciones temporales tiene solo sentido a
nivel local.
Existen direciones multicas reservdas son:
ff01::1 Todos los nodos
ff02::1 Todas las interfaces
ff01::2 Todos los routers locales
ff05::2 Todos los routers del sitio
La dirección ff02::1ffxx:xxxx se la llama solicited-node address y obliga a todos los nodos calcular su multicast en fución de la unicast asociada. Para ello se sustituye los 24 bits (los marcados con x) con la dirección original. Por ejemplo la 3ffe:b00:c18:1fff::7f4 se convertirá en ff01::1:ff00:7f4
Ejemplos útiles de redes actualmente usadas:
3ffe::/16 red 6bone global (fuera de servicio desde el 2006)
3ffe:ffff:/32 dirección especial 6bone de prueba (no usada)
2002::/16 redes para direcciones tunel 6to4 globales (RFC 2529)
2001::/16 y 2406::/16 direcciones delegadas a túneles privados.
Direciones unicast globales anexables (RFC 2374)
Uno de los problemas que ipv6 resuleve es la major organización jerárquica del ruteo en redes publicas anexables o agregables (aggregatable public global net), como ejemplo de ello es la dirección unicast de la UTN de la plata, 3ffe:38e1:0100:a001::10. Es una organización basada en tres niveles
Topología pública: Asociada a los proveedores y pasarelas de la red troncal asociada a la internet
Topología de sitio: Propia de la red interna de la orgnización
Identificador de interfaz: Asociado con la interfaz de enlace.
En la siguiente figura se muestra como es cada campo en particular.
Red IPv6 por túnel privado IPv4
Esta será una breve descripción de como poner un servicio ipv6 en una máquina con Debian ó Ubuntu. No será una explicación técnica sino pragmática de como instalar un túnel TSP para poder usar la red IPv6.
El tunel ipv6 de www.freenet.org. está obsoleto a partir del 2006. Actualmente la que da el tunel es uno de estos Broker (gestionadores):
Acrónimos: Statics: ip estática. RDNS: delegación inversa de nombres. TSP: Tunel Setup Protocol. BGP: Border Gatway Protocol ó ruteo BGP. AYIYA: túnel Anything In Anything.
Advertencia!
El puerto 3653 (antes 41) no debe ser filtrado por ningún firewall, sino no se podrá comunicar con el par. Entoces uno debe configurar las correctas políticas tanto en el ipchains, iptables, etc. para que nuestra red sea trasparente a él, o el puerto UDP designado por la interfaz del broker.
El gestionador que yo uso es gogo6/freenet6, antiguamente Hexago-go6, que da de forma gratuita (por ahora) un tunel TSP ipv6-ipv4.
Activar Dispositivo
En núcleos 2.6.xx con xx > 20 basta con ejecutar como super-usuario (ejemplo)
/sbin/ifconfig eth1 inet6 add 2001:5c0:8fff:b::11/64
en los núcleos xx< 21 sit0 no se puede usar para definir una interfaz pues este se usaba como intefaz 6to4. En esos núcleos bastaba con ejecutar
/sbin/ifconfig sit0 up
/sbin/ifconfig eth1 inet6 add 2001:5c0:8fff:b::11/64
se puede activar desde el arranque colocando en /etc/rc.local en los xx>20 (ejemplo)
/sbin/ifconfig eth1 inet6 add 2001:5c0:8fff:b::11/64
route -A inet6 add 2001:5c0:8fff:b::/64 dev eth1
Nota: Esta última instrucción es solo cuando la ruta (Anycast) no se levanta automáticamente.
Luego se puede ver los resultados:
hcaste@azul:~$ ifconfig eth1
eth1 Link encap:Ethernet direcciónHW 00:1f:d0:b2:cf:51
Direc. inet:10.0.0.11 Difus.:10.255.255.255 Másc:255.0.0.0
Dirección inet6: 2001:5c0:8fff:a::11/64 Alcance:Global
Dirección inet6: fe80::21f:d0ff:feb2:cf51/64 Alcance:Enlace
ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST MTU:1500 Métrica:1
Paquetes RX:350540 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:282964 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1000
Bytes RX:379088294 (379.0 MB) TX bytes:40454447 (40.4 MB)
Interrupción:24 Dirección base: 0x2000
hcaste@azul:~$ route -A inet6|grep -w "eth1"
2001:5c0:8fff:a::/64 :: U 256 0 0 eth1
fe80::/64 :: U 256 0 0 eth1
ff00::/8 :: U 256 0 0 eth1
Túnel TSP
Se lo puede instalar de la siguiente forma:
Se pide un par de enlace (pear) a http://gogonet.gogo6.com/ que nos devolverá un nombre de usuario y correo por correo-e.
Se loguea en la cuenta asignada, se llena lo que se pide (no piden la tarjeta de crédito!! por ahora) en http://gogonet.gogo6.com/page/freenet6-services
En http://gogonet.gogo6.com/page/freenet6-home-access se baja el archivo gogoc-1_2-RELEASE.tar.gz (está bajo licencia BSD)
Se debe compilar y instalar el cliente pero con las bibliotecas OpenSSL, libcrypto y libpthread.
No requiere configuración previa
Para compilarlo hay que ejecutar make platform=linux all
Para instalarlo hay que ejecutar make platform=linux installdir=/usr/local/gogoc install
Entonces instala no solo los ejecutables sino el script de configuración y rutas de la interfaz en: "/usr/local/etc/gogoc/template/linux.sh"
El ejecutable está en /usr/local/gogoc/bin y se llama gogoc
Antes de todo hay que configurar nuestro cliente para ello hay que colocar en el archivo gogoc.conf los datos como cliente:
userid=hcaste
passwd=*******
server=authenticated.freenet6.net
host_type=router # solo para GW
prefixlen=48 #solo para GW
if_prefix=eth1 #solo para GW
Nota: Los túneles anónimos solo pueden configurarse como host y no se pueden usar como gateway.
Si todo salió bien debe aperecer lo siguiente: (ejemplo)
hcaste@azul:~$ ifconfig tun
tun Link encap:UNSPEC direcciónHW 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
Dirección inet6: 2001:5c0:1000:b::415d/128 Alcance:Global
ACTIVO PUNTO A PUNTO FUNCIONANDO NOARP MULTICAST MTU:1280 Métrica:1
Paquetes RX:2492 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:2427 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:500
Bytes RX:889154 (889.1 KB) TX bytes:175137 (175.1 KB)
Donde ahora se tiene una unicast global con DNS dado por el gestionador gogo6.
Comprobar que uno está registrado:
hcaste@azul:~$ host hcaste.broker.freenet6.net
hcaste.broker.freenet6.net has address 64.86.88.116
hcaste.broker.freenet6.net has IPv6 address 2001:5c0:1000:b::415d
hcaste@azul:~$ host 2001:5c0:1000:b::415d
d.5.1.4.0.0.0.0.0.0.0.0.0.0.0.0.b.0.0.0.0.0.0.1.0.c.5.0.1.0.0.2.ip6.arpa domain name pointer hcaste.broker.freenet6.net.
Uno no solo tiene ip, sino resolución inversa de nombre que es mantenido por la empresa.
Saludos Horacio