Windows

No todo van a ser letras blancas en consolas negras…

DD-WRT e IPv6

Recientemente he adquirido un router WRT610N para sustituir a mi antiguo WRT54GL. Las razones principales del cambio han sido que el segundo (pese ser uno de los routers mas versátiles del mercado) se queda un poco corto en cuanto a velocidad de red y memoria, siendo el primero una bestia parda con su doble circuiteria WiFi, lo que permite tener dos redes inalámbricas reales que pueden funcionar a diferentes velocidades (lo cual es muy útil, ya que los equipos hoy por hoy suelen funcionar en estándar N, pero los móviles siguen estancados en G), su red alámbrica gigabit y el puerto USB, que permite conectar un dispositivo de almacenamiento para ampliar las posibilidades del producto.

Otra de las razones por las cuales decidí actualizar mi hardware de red fue que quería probar a trabajar de una vez por todas con IPv6.

Hoy por hoy mi proveedor de acceso no ofrece ninguna posibilidad de utilizar IPv6 (como la gran mayoría), pero eso no quita de que nosotros no podamos usar los servicios de túnel que pueden facilitarnos empresas de terceros, como por ejemplo Hurricane Electric.

En mi caso concreto lo primero que hice fue solicitar un túnel con ellos, hay que tener en cuenta que cuando solicitamos dicho túnel ellos comprueban nuestra IP pública a través de un Ping para ver si es alcanzable, por lo que debemos tener habilitada la respuesta ICMP.

Una vez que nos dan el túnel (podemos solicitar hasta 5, pero con uno es suficiente, en el /64 que nos dan tenemos 18.446.744.073.709.551.616 direcciones posibles) nos facilitarán la información necesaria para configurarlo. Lo que realmente nos interesa es la dirección IPv4 del servidor, la dirección IPv6 del cliente y el prefijo enrutado IPv6.

A partir de aquí toca configurar el Router. Yo ya lo tenía preparado con el firmware de dd-wrt. Para no agotarle la memoria interna le conecte un llavero USB de 1GB que tenía por casa y lo utilice como /jffs, de tal forma que todos los scripts y configuraciones extensas los meto en esta ubicación.

Para levantar la red IPv6 utilizo este script al que he llamado hetunnelbroker.sh:

#! /bin/sh -x

# Load Module
insmod ipv6
insmod sit
sleep 5

# Get WAN IP
WANIP="$(ip -4 addr show dev vlan2 | awk '/inet / {print $2}' | cut -d/ -f1)"

# Configure HE Tunnelbroker
SERVER_IPV4_ADDR="209.51.181.2"
CLIENT_IPV6_ADDR="2001:470:bebe:cafe::2/64"
ROUTED_IPV6_ADDR="2001:470:bebe:cafe::/64"

# Write small log
echo "External IP: $WANIP" > /jffs/ipv6/startup.log

# Configure Tunnel if WAN is UP
if [ -n "$WANIP" ]
then

        echo "Configuring tunnel" >> /jffs/ipv6/startup.log

        # Set Public IP in HE Servers (if the user gives the passwd via stdin)
        [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ] && \
         echo "Updating tunnel" >> /jffs/ipv6/startup.log && \
         iptables -I INPUT 1 -p ICMP --icmp-type echo-request -s 66.220.2.74 -j ACCEPT && \
         MD5PASS=`echo -n $2 | md5sum | sed -e 's/  -//g'` && \
         wget 'http://ipv4.tunnelbroker.net/ipv4_end.php?ip='$WANIP'&pass='$MD5PASS'&apikey='$1'&tid='$3 -O - >> \
           /jffs/ipv6/startup.log && \
         iptables -D INPUT 1

        # Add HE tunnel
        ip tunnel add he-ipv6 mode sit remote $SERVER_IPV4_ADDR local $WANIP ttl 255
        ip link set he-ipv6 up
        ip addr add $CLIENT_IPV6_ADDR dev he-ipv6
        ip route add ::/0 dev he-ipv6 metric 1
        ip -6 addr add $ROUTED_IPV6_ADDR dev br0

        # Provide IPv6 Forwarding
        echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

        # Start radvd to provide IPv6 pull to network
        echo -e "\nStarting radvd" >> /jffs/ipv6/startup.log
        radvd -C /jffs/ipv6/radvd.conf
fi

Comentando el funcionamiento del script, lo primero que hace es cargar los módulos necesarios para dar soporte a IPv6. Después almacena en la variable WAN_IP nuestra dirección IPv4 recogiéndola de la interfaz de red que está conectada a internet. Hay que tener en cuenta que en mi caso concreto esta interfaz es vlan2, pero dependiendo del modelo de router que tengamos esto puede variar.

A partir de este punto comienza la configuración que sera personal nuestra en cada caso. En SERVER_IPV4_ADDR pondremos la dirección IPv4 del servidor que nos facilita Hurricane Electric, en CLIENT_IPV6_ADDR la dirección IPv6 del cliente y en ROUTED_IPV6_ADDR el prefijo enrutado IPv6.

Lo siguiente ya son la ejecución de los comandos necesarios para levantar IPv6, si nos fijamos el script escribe un pequeño log en /jffs/ipv6/startup.log. También podemos observar que es capaz de recoger 3 variables de la línea de entrada. Estas variables son la API Key (que aparece como User ID en nuestra página de entrada del Tunnel Broker de Hurricane Electric), nuestra contraseña de acceso y la ID del túnel. Si al llamar al script le pasamos estos valores, será capaz de actualizar nuestra IP pública en Hurricane Electric, de tal forma que si ha cambiado, el túnel seguira activo.

Por último el script levanta radvd (un servicio que advierte a la red de la configuración de prefijo IPv6 que debe de usar) leyendo su configuración de /jffs/ipv6/radvd.conf:

interface br0 {
        MinRtrAdvInterval 3;
        MaxRtrAdvInterval 10;
        AdvLinkMTU 1480;
        AdvSendAdvert on;
        prefix 2001:470:bebe:cafe::/64 {
                AdvOnLink on;
                AdvAutonomous on;
                AdvValidLifetime 86400;
                AdvPreferredLifetime 86400;
        };
};

Aquí lo único que es necesario configurar es el prefix para que coincida con nuestro prefijo enrutado IPv6.

Para que todo esto funcione simplemente tenemos que llamar al script hetunnelbroker.sh desde la lista de comandos de arranque del router. Como comente anteriormente si lo llamamos sin argumentos simplemente levantará el túnel, sin embargo si le pasamos argumentos actualizara nuestra IP. Debemos utilizar una forma u otra dependiendo de si nuestra IP es fija o dinámica.

Una vez levantado el router, ya deberíamos de tener disponible IPv6. Para verificarlo, podemos intentar alcanzar esta misma página por IPv6 en ipv6.entropia.moire.org.

IPv6 y Windows 7.

Si bien, una vez que tenemos todo configurado, funciona correctamente en Windows 7, en la maquina que tengo yo como consola de videojuegos no me gusta el comportamiento por defecto que tiene este Sistema Operativo.

Micro$soft, fiel a sus principios, se pasa por el (póngase lo que se quiera) los estándares definidos para la configuración de IPv6 y en vez de utilizar una IP basada en la MAC de la ethernet, utiliza una basada en un número aleatorio generado. Aunque esto puede resultar interesante para mantener la privacidad, es un infierno si se utilizan DNS locales.

Si queremos deshabilitar esta característica, podemos hacerlo ejecutando los siguientes comandos en una consola cmd:

netsh interface ipv6 set privacy state=disabled store=active
netsh interface ipv6 set privacy state=disabled store=persistent
netsh interface ipv6 set global randomizeidentifiers=disabled store=active
netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent

Una vez hecho esto reiniciamos la maquina y veremos que la interfaz se configurara correctamente usando EUI-64.

Para terminar, si queréis saber un poco mas sobre estos estándares de direccionamiento podéis leer este articulo que, curiosamente, me he encontrado en el TechNet de Micro$oft.

HFS+

Hoy en día es normal utilizar discos duros externos para llevarnos cosillas de un lado a otro, incluso los utilizamos como otro espacio de almacenamiento más como un poco de “cajón desastre”.

También es normal hoy en día que (si somos usuarios asiduos de estos discos) tengamos que conectarlos en diferentes sistemas operativos, porque algún amigo friki usará Linux o algún que otro imprudente utilizará Windows…

Para solucionar el problema de los “múltiples Sistemas Operativos” los fabricantes hacen que miran hacia otro lado y sacan sus discos preformateados en FAT, un formato un tanto antiguo que funciona en todas las plataformas, pero con un montón de limitaciones.

Si bien las limitaciones de FAT están mas o menos controladas (es muy raro ya el usuario que anda con MS-Dos o similar en donde no es posible utilizar FAT32) aún sigue habiendo una en concreto que nos puede hacer la vida bastante complicada, la limitación de 4 GB de tamaño máximo de archivo. Parece un poco tonto no ¿Quien va a crear un archivo mayor de 4 GB?, pues no es tan raro, una imagen de un DVD rellenito ya ocupa mas, y no digamos si el DVD es de doble capa…

Cada día que pasa veo que la gente se hace mas vaga. Antes descargabas archivos grandes de Internet divididos en múltiples ficheros de 1 o 2 GB, pero según han ido aumentando las velocidades de acceso ya nadie se molesta en eso y te pasan un archivo enorme de 6 o 7 GB que, a la hora de almacenarlo en un medio externo de tipo FAT, tienes que recortar en varios pedazos.

El problema viene cuando quieres almacenar eso que estas descargando directamente el el disco externo. Empieza a bajar 1 Gb, luego 2 GB, 3 GB, 4 GB, y se jodió el invento, fallo de acceso que (perdonando la expresión) te cagas en las bragas, y adiós muy buenas.

Entonces, ¿Como solucionamos el petate? Bueno, la solución pasa por utilizar algún sistema de archivos mas actual y, por lo tanto, nativo de alguna plataforma. Pero con eso nos creamos otro problema, al ser un sistema nativo solo va a funcionar (a priori) en su plataforma. Y claro, ahora pensamos, JODER! Si me formateo un disco en Linux (por ej.) y solo lo voy a poder usar en Linux ¿Como hago para llevarle las pelis porno a mi colega imprudente que tiene Windows?

La respuesta está en que, como dije antes, que no se pueda usar a priori no quiere decir que no se pueda usar. Lo que pasa es que los Operativos son muy suyos, y por defecto no traen soporte para nada mas que para lo que a ellos les interesa, pero esto no quiere decir que no podamos usar los sistemas de unos en los otros. ¿Cuál es entonces la mejor opción?

No existe la “solución definitiva”, hay varias y cada una tiene sus pros y sus contras, de los 3 grandes tipos de sistemas de archivo (ext3 de Linux, HFS+ de MacOS y NTFS de Windows) podríamos usar cualquiera, con su complicación en el sistema operativo vecino. Por ej, si usamos ext3 nos funcionará de maravilla en Linux, en Windows tendremos que utilizar Ext2 IFS y en MacOS la cosa se complica bastante al no haber una implementación sencilla del sistema.

Desde la aparición de FUSE el utilizar como salida el sistema de archivos NTFS nativo de Windows se esta convirtiendo en algo “estandarizado” para compartir archivos entre plataformas. En Windows funciona correctamente (bueno, es Windows…) y en MacOS y Linux funciona con FUSE y NTFS-3G de forma muy sencilla. Pero entonces ¿A que viene el título de HFS+?

HFS+ es el sistema de archivos nativo de MacOS, en esencia es parecido a los otros dos (soporta permisos, nombres de archivo kilométricos, etc…) por lo que es un remedio mas a todo este lío, ¿Por qué elegirlo?

Bueno, en estos momentos HFS+ (sin Journaling) esta soportado de forma nativa en MacOS y Linux, lo cual es una ventaja, ya que no tenemos que instalar nada para utilizarlo en estas plataformas. Además si formateamos un disco externo con HFS+ podremos usarlo con Time Machine y así hacer copias de seguridad fáciles en nuestro MacOS. En Windows tendremos que instalar un programa como HFSExplorer, con licencia GPL, o MacDrive, de pago (aunque buscando un poco podremos encontrarlo en forma “baratita”) pero con la ventaja de hacer que los discos funcionen también de forma nativa en el operativo, como si se tratasen de NTFS.

En conclusión, si usamos asiduamente MacOS, sin duda HFS+ es la mejor elección para nuestros dispositivos externos ya que es muy fácil de usar y de las tres alternativas presentadas es la que menos requiere a la hora de portarla a otros operativos y con la ventaja de que podremos utilizar Time Machine.

Como dato final decir que a la hora de formatear nuestro disco externo desde MacOS usando la “Utilidad de Discos” debemos escoger Mac OS Plus (mayús./minús.) para que nos cree el sistema sin Journaling y así no tener problemas a la hora de utilizarlo desde Linux. En el caso de que se nos active el Journaling (o que ya tengamos formateado el disco y no queramos borrarlo) podemos hacerlo desde la misma utilidad haciendo click en el menú archivo mientras mantenemos pulsada la tecla opción (alt, para los amigos) y seleccionando “Desactivar registro”.

Nota: En ocasiones el disco puede tener Journaling habilitado y resistirse a deshabilitarlo, en ese caso tendremos que hacer la jugada de forma manual con comandos. Para ello basta con utilizar diskutil de la siguiente forma:

  1. Con el disco conectado hacemos un “mount” a secas (en caso de estar montado) o un “diskutil list” para saber cual es el dispositivo (en mi caso aparece como /dev/disk2s3)
  2. Si esta montado (aparece en el escritorio), desmontamos el dispositivo con la orden: diskutil umount /dev/disk2s3
  3. Y le deshabilitamos el journaling con: sudo diskutil disableJournal force /dev/disk2s3

Y con esto quedaría listo.