Cuidados en el desarrollo de aplicaciones compatibles con IPv6
Introducción
Se ha dicho muchas veces que los IP se están agotando, pero ahora si es efectivo, y de hecho ya se agotaron para Estados Unidos y Canadá. Paulatinamente se verá un aumento en el uso de IPv6 a niver corporativo y personal, por lo que prontamente será requisito para cualquier desarrollo de software.
Ya debemos contemplar en el desarrollo de nuestra aplicaciones y/o servicios su compatibilidad con IPv6, más aun cuando se trata de aplicaciones con orientación de Internet de las Cosas (IoT).
Cuando configuramos una aplicación con una conexión remota utilizando su nombre DNS, dejamos en manos del Sistema Operativo decidir si utilizará IPv6 o IPv4. Por lo general intenta primero con IPv6, y si falla intenta con IPv4.
Podemos en algunos casos requerir exlusivamente del uso de IPv6, con lo cual la aplicación deberá reconocer y aceptar
Para el caso de los Servicios contamos con conexiones entrantes, para registrar o validarlas debemos contemplar IPv6 además de IPv4 en ambientes Dual Stack.
Principales Cuidados
Selección de librería de Sockets
Muchos lenguajes proveen de librerías para el uso de Sockets IP, por lo cual habrá que identificar la librería disponible para el uso de IPv6 y verificar los cambios que requiere en la programación.
Veremos en el caso de Perl, se cambia el uso de la librería IO::Socket::INET por IO::Socket::IP, la cual es totalmente compatible, por lo que muchas veces solo basta con el reemplazo de la librería. Igualmente se recomuenda actualizar Perl a la versión 5.14. Veamos el ejemplo que dado en la documentación de la librería:
#!/usr/bin/perl
#
#
use IO::Socket::IP;
my $sock = IO::Socket::IP->new(
PeerHost => "www.google.com",
PeerPort => "http",
Type => SOCK_STREAM,
) or die "Cannot construct socket - $@";
my $familyname = ( $sock->sockdomain == PF_INET6 ) ? "IPv6" :
( $sock->sockdomain == PF_INET ) ? "IPv4" :
"unknown";
printf "Connected to google via %s\n", $familyname;
El script genera una conexión hacia el puerto http (80) de www.google.com. El sistema operativo brindará la conexión por medio de IPv6 o IPv4, al utilizar un nombre, se intenta primero con IPv6 y luego con IPv4. Finalmente se imprime por pantalla la versión de IP utilizada.
En el caso de JavaScript, utilizando ajax o websockets, no se requiere de ningún cambio al referir el servidor por su nombre, solo tener el cuidado cuando se utiliza un IP directamente, donde la URL IPv6 debe ser dada de la forma http://[2001:db8:3213::7]:80 (como se usa en un navegador), o ws://[2001:db8:3213::7]:1771 para websocket.
Validaciones
Podemos comenzar por validar el formato del IPv6, tanto al servicio que queremos conectar o para el cliente que origina la conexión, deberemos contemplar caracteres de 0 al 9, 'a' a la 'f' y el caracter ':' (dos puntos) en un máximo de 8 grupos de a 4 dígitos (hexadecimanles) separados por un máximo de 7 caracteres ':', donde solo una vez pueden haber 2 juntos. Es bastante probable que la librería a utilizar se encargue de la validación sintáctica del IP.
Para el caso de validaciones de seguridad para aceptar una conexión entrante, podemos tomar en cuenta:
- La red local utiliza un prefijo de 64 bits, por lo general
- la secuencia '::' debemos reemplazarla por '0000:' las veces que se requiera para completar los 8 grupos, por ejemplo dependiendo de la cantidad total de caracteres ':' en el IP, para luego eliminar los ':' que queden al comienzo o final:
- 7: Reemplazar '::' por ':0000:'
- 6: Reemplazar '::' por ':0000:0000:'
- 5: Reemplazar '::' por ':0000:0000:0000:'
- 4: Reemplazar '::' por ':0000:0000:0000:0000:'
- 3: Reemplazar '::' por ':0000:0000:0000:0000:0000:'
- 2: Reemplazar '::' por ':0000:0000:0000:0000:0000:0000:'
- Si el IP resultante termina con ':', agregar 0000 al final
- Si el IP resultante comienza con ':', agregar 0000 al comienzo
- Existe un caso especial cuando solo se tiene "::" sin dígitos adicionales, que representa la ruta default que corresponde a '0000:0000:0000:0000:0000:0000:0000:0000'
- La red de nuestra empresa/organización debiera estar contenida en un único prefijo, que será entre 32 y 64 bits.
Registro
Si nuestra aplicación guarda registro de los IP de origen de las conexiones en una base de datos, deberemos considerar un tamaño a lo menos de 39 caracteres (32 dígitos hexadecimales y 7 separadores ':')
Generado por Sistema y almacenado en cache
Wyzer Luis Hernán de la Barra |
|
Teléfono: | +56995451689 |
WhatsApp: | +56995451689 |
E-Mail: | info@wyzer.cl |
Web: | www.wyzer.cl |