Altermesh, BuenosAiresLibre y CompartirEsBueno

index | about | archive | charlas | docs | links

dot | git | img | plt | tty | uml

Migrando de OLSR a Batman-adv

Hace años que tengo el NodoOsiux 1 dentro de la red BuenosAiresLibre 2, pero en el último año estoy apostando a un nuevo modelo de red basado en la experiencia del QuintanaCamp 3 en el cual dió origen a dos redes que vienen creciendo día a día, QuintanaLibre 4 y DeltaLibre 5

CompartirEsBueno es la implementación del modelo de red de Altermundi 6 consolidado en el firmware Altermesh 7.

Podría haber elegido otro nombre, más territorial como por ejemplo: «CaballitoLibre» que es dónde está mi nodo, sin embargo elegí un nombre sin territorio y que promueva exactamente el motivo por el cual es bueno interconectar personas mediantes redes, es decir, la necesidad de «compartir».

Algunos sólo estarán interesados en compartir la salida a internet, otros obtarán por compartir servicios y archivos que están en sus computadoras y no asi en internet.

Si bien técnicamente hay una gran diferencia entre el protocolo de ruteo dinámico utlizado por BAL y Altermesh, es decir OLSR 8 y batman-adv 9 respectivamente, ambos permiten escencialmente lo mismo, unir equipos y es posible tener una red híbrida con éstos y otros protocolos al mismo tiempo, algo de esto se puede apreciar en el gŕafico de mi red actual al final de este artículo.

Los invito a armar sus propias redes e interconectarlas mediante Altermesh.

Hay equipo!

Un requisito indispensable es tener un Router Inalámbrico también conocido como Access Point que sea compatible con el firmware AlterMesh, actualemente están soportados algunos modelos de TP-Link con chipset ar71xx y además algunos modelos de Ubiquiti, en mi caso comencé por los siguientes modelos:

modelo flash ram radio0 radio1
TL-WDR3500ND 10 8mb 128mb 2.4Ghz 5Ghz
TL-MR3020 11 4mb 32mb 2.4Ghz -
TL-WR842ND 12 8mb 32mb 2.4Ghz -

Todos los equipos cuentan con un conector USB que permite utilizar un pendrive para almacenar datos como asi también es posible conectar un dongle como el TL-WN722N para tener una segunda radio para enlazar a otros nodos.

Flasheando AccessPoints

cocinar el firmware

El primer paso es utilizar el chef 13 de Altermundi para «cocinar» una versión de Altermesh, se puede usar la imagen genérica AlterMesh-nodo 14 o crear una propia partiendo de ésta o de alguna otra de las RedesLibres 15 que están haciendo uso del firmware. En mi caso creé el perfil CompartirEsBueno 16, el mismo se puede utilizar tal y como está o incluso tomarlo como base para crear un nuevo perfil de red.

Siempre conviene registrarse en el chef y agregar una llave ssh para que podamos acceder al Router de manera segura. Lo más interesante es que al cocinar un firmware se agrega nuestra llave para que luego podamos acceder a él para administrarlo remotamente y como el mismo firmware se puede utilizar en muchos Routers, entonces podremos tener acceso a todos ellos!

creando la llave ssh

Se puede definir en una sóla línea el tipo rsa, el archivo dónde se almacenará ~/.ssh/llave_rsa y una contraseña cambiame:

ssh-keygen -t rsa -f ~/.ssh/llave_rsa -Pcambiame
Generating public/private rsa key pair.
Your identification has been saved in /home/osiris/.ssh/llave_rsa.
Your public key has been saved in /home/osiris/.ssh/llave_rsa.pub.
The key fingerprint is:
c6:cf:a5:4e:5d:9a:d8:cb:12:4b:9c:66:90:a5:90:67 osiris@inspiron
The key's randomart image is:
+--[ RSA 2048]----+
|       .         |
|      o E .      |
|       + +       |
|       .+        |
|        So .. .  |
|       . oB* +   |
|         +*o=    |
|         oo. .   |
|          ..o    |
+-----------------+
  • OjO: Es posible crear una llave sin contraseña lo cual resulta más cómodo para ingresar al Router pero más incómodo y seguro es usar una contraseña, sino cualquier que se copie nuestra llave (pública y privada) podrá acceder al Router como si fuera root.

Luego es necesario subir el contenido del archivo ~/.ssh/llave_rsa.pub que es nuestra llave pública.

La llave privada se encuentra en ~/.ssh/llave_rsa NO se la debe copiar a nadie! Es conveniente hacer una copiar de seguridad.

descargar el firmware

Una vez cocinado el firmware, hay que descargarlo:

cd ~/altermesh
wget http://chef.mesh.altermundi.net/ls/CompartirEsBueno/r33815/altermesh-ar71xx-generic-tl-MR3020-v1-squashfs-r33815-CompartirEsBueno-nodo-compartir-factory.bin

Si se trata de la primera vez que se realiza la operación se debe elegir una imagen factory, en futuras actualizaciones se debe utilizar una imagen sysupgrade. Obviamente hay que elegir la imagen de acuerdo al modelo de Router que vayamos a flashear.

Es altamente recomendado verificar la integridad del mismo, el hash debe coincidir con el que se encuentra en el archivo md5sums

cd ~/altermesh
md5sum *.bin
24f6dfddbe4c1fbf29e74d3c32f24afc  altermesh-ar71xx-generic-tl-MR3020-v1-squashfs-r33815-CompartirEsBueno-nodo-compartir-factory.bin

actualizar el firmware

Solo basta conectarse al Router mediante un cable UTP e ingresar mediante un navegador a la dirección http://192.168.1.1, generalmente el usuario y password de fábrica es el mismo, la palabra admin. Buscar en el menú system tools la opción upgrade y seleccionar la imagen a subir.

Es necesario renombrar la imagen a un nombre más corto:

cd ~/altermesh
mv altermesh-ar71xx-generic-tl-MR3020-v1-squashfs-r33815-CompartirEsBueno-nodo-compartir-factory.bin compartir-factory.bin

Finalmente subir la imagen y presionar actualizar (este es el momento de cruzar los dedos :-P )

Durante la actualización NO se debe cortar la alimentación del Router como tampoco se debe perder la conexión, por esto recomiendo desactivar el network-manager, para establecer una conexión manual realizar lo siguiente:

sudo ifconfig eth0 192.168.1.22 up

Si todo salió bien, el Router reiniciará en un par de minutos y se podrá visualizar el ESSID de la red (CompartirEsBueno en mi caso). Entonces se puede asociar al equipo mediante el network-manager mediante el mouse o de manera manual:

sudo ifconfig wlan0 up
sudo iwconfig wlan0 essid CompartirEsBueno

conectándose por primera vez

Si mantenemos el cable UTP conectado, ya deberíamos tener acceso al Router, ahora bien, como la idea no es que cualquiera lo administre, es necesario contar con una llave ssh, la misma fue agregada al cocinar el firmware, asi que bastaría acceder mediante ssh al equipo, sólo faltaría saber la dirección IP.

Altermesh cuenta con soporte IPv6 y nuestra notebook/compu también (aunque no lo sepamos) y magicamente cada interfaz de red cuenta con una dirección IPv6 autoasignada que consta de un prefijo + la macaddress de la placa de red.

Es fácil comprobar nuestra dirección IPv6 mediante ifconfig:

ifconfig wlan0 | grep inet6

Seguro contamos con al menos una IPv6 de alcance «Enlace» o Scope link-local en inglés. Esto quiere decir que podemos llegar a cualquier otro equipo con IPv6 por medio de esta interfaz y nuestra IPv6 es aquella que comienza con fe80, en mi caso: fe80::6aa3:c4ff:fecf:b5b4

descubrir routers

Se puede realizar un ping a una dirección especial para obtener respuesta de todos los equipos en la red local que son Routers, normalmente hay un alias ip6-allrouters para ff02:2.

Para las direcciones link-local es necesario indicar cuál es la interfaz de salida (no asi en las IPv6 de alcance global), esto se hace agregando el símbolo % y el nombre de la interfaz, por ejemplo ff02::2%wlan0:

ping6 -c3 ff02::2%wlan0
PING ff02::2%wlan0(ff02::2) 56 data bytes
64 bytes from fe80::a2f3:c1ff:fe9d:2577: icmp_seq=1 ttl=255 time=1.22 ms
64 bytes from fe80::68d3:ecff:fefb:d060: icmp_seq=1 ttl=255 time=10.4 ms (DUP!)
64 bytes from fe80::a2f3:c1ff:fe9d:2577: icmp_seq=2 ttl=255 time=1.48 ms
64 bytes from fe80::68d3:ecff:fefb:d060: icmp_seq=2 ttl=255 time=8.02 ms (DUP!)

--- ff02::2%wlan0 ping statistics ---
3 packets transmitted, 2 received, +2 duplicates, 33% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.229/5.305/10.485/4.043 ms

descubrir nodos

Aquellos equipos que no sean Routers pero si forman parte de la red IPv6 son considerados nodos y responden al alias ip6-allnodes o la dirección ff02::1.

ping6 -c3 ff02::1%wlan0
PING ff02::1%wlan0(ff02::1) 56 data bytes
64 bytes from fe80::6aa3:c4ff:fecf:b5b4: icmp_seq=1 ttl=64 time=0.085 ms
64 bytes from fe80::68d3:ecff:fefb:d060: icmp_seq=1 ttl=64 time=156 ms (DUP!)
64 bytes from fe80::1e4b:d6ff:fed2:f99: icmp_seq=1 ttl=64 time=316 ms (DUP!)
64 bytes from fe80::6aa3:c4ff:fecf:b5b4: icmp_seq=2 ttl=64 time=0.086 ms
64 bytes from fe80::68d3:ecff:fefb:d060: icmp_seq=2 ttl=64 time=9.74 ms (DUP!)
64 bytes from fe80::a2f3:c1ff:fe9d:2577: icmp_seq=1 ttl=64 time=1124 ms (DUP!)
64 bytes from fe80::a2f3:c1ff:fe9d:2577: icmp_seq=2 ttl=64 time=123 ms (DUP!)
64 bytes from fe80::6aa3:c4ff:fecf:b5b4: icmp_seq=3 ttl=64 time=0.088 ms

--- ff02::1%wlan0 ping statistics ---
3 packets transmitted, 3 received, +5 duplicates, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.085/216.376/1124.681/358.855 ms, pipe 2

accediendo por ssh

Al acceder al Router se solicita la contraseña de la llave ssh (si fue establecida) y se visualiza la revisión del firmware, en mi caso r33815 y es un dato a tener en cuenta, a veces algunas funcionalidades están presentes sólo en algunas versiones o en ocasiones no funcionan del todo bien en alguna revisión en particular o incluso en algún modelo de Router.

▶ ssh root@fe80::a2f3:c1ff:fe9d:2577%wlan0
Enter passphrase for key '/home/osiris/.ssh/id_rsa': 

BusyBox v1.19.4 (2013-01-14 16:57:22 ART) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 BARRIER BREAKER (Bleeding Edge, r33815)
 (AlterMesh, maintained by: gui _@_ altermundi.net)
 (Get your own at: http://chef.mesh.altermundi.net)

root@aleosi:~# 

Una vez logueados como root es posible reconfigurar el equipo, conectarse a otras redes e incluso romper todo, asi que a leer un poco antes de tipear y darle enter.

También es posible tirar comandos sin loguearse, por ejemplo si quisieramos saber cuánto espacio hay disponible:

ssh root@fe80::a2f3:c1ff:fe9d:2577%wlan0 'df -h'
Filesystem                Size      Used Available Use% Mounted on
rootfs                    4.5M    660.0K      3.9M  14% /
/dev/root                 2.5M      2.5M         0 100% /rom
tmpfs                    14.3M      1.7M     12.7M  12% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock3            4.5M    660.0K      3.9M  14% /overlay
overlayfs:/overlay        4.5M    660.0K      3.9M  14% /

Bienvenido a IPv6

Uno de los aspectos más interesantes de Altermesh es su manejo de IPv6, no sólo se obtiene una IPv6 pública para el nodo sino que además siendo parte de LibreNet6 17 se puede obtener un rango, en mi caso 2a00:1508:1:f00f::1/64, y entregar IPv6 a cada cliente del nodo y nodos asociados!

Actualmente el dominio aleosi.osiux.com apunta al gateway de la red CompartirEsBueno:

dig +short aleosi.osiux.com aaaa
2a00:1508:1:f00f::1

Y se puede acceder a él desde cualquier equipo del mundo que cuente con IPv6 ya sea nativo o por medio de un tunel.

Instalar tinc y babel

Comprobando un enlace

A pesar de la lluvia, Gacq subió a la terraza del NodoPlazaFlores con un WR842ND (flasheado con Altermesh) y una antena grillada y apuntando hacia mi nodo, se puso a escanear y logró ver mi nodo.

Ni bien me avisó, me dispuse a realizar la misma prueba vía ssh:

iw wlan0 scan | grep -C7 CompartirEsBueno

BSS a0:f3:c1:9d:36:66 (on wlan0)
TSF: 893337984 usec (0d, 00:14:53)
freq: 2412
beacon interval: 100
capability: ESS ShortSlotTime (0x0401)
signal: -78.00 dBm  <---- a mejorar alineando la antena
last seen: 860 ms ago
SSID: CompartirEsBueno  <---- mi nodo
Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0
DS Parameter set: channel 1
TIM: DTIM Count 0 DTIM Period 2 Bitmap Control 0x0 Bitmap[0]0x0
ERP: Barker_Preamble_Mode
Extended supported rates: 24.0 36.0 48.0 54.0
HT capabilities:
Capabilities: 0x11ec

Es sólo una prueba y será necesario alinear correctamente las antenas para mejorar el nivel de señal (-78.00 dBm), pero es una buena noticia que los nodos se hayan visto en el primer intento.

Graficando la red

Ahora hay más de una manera de conectarse a cada equipo y debido a ello se me ocurrió graficar los enlaces IPv4 e IPv6 (globales y de enlace local). Para esto utilicé nwdiag 18 que permite de manera simple y cómoda editar un archivo de texto plano con cada equipo para luego generar el gráfico final.

osiux-network.png

Cual es el próximo paso? [6/10]

  • compartir lo aprendido.
  • actualizar este documento.
  • flashear MR3020.
  • agregar agente altermap a los APs.
  • flashear Ubiquity Bullet.
  • actualizar WR842ND con soporte USB storage.
  • agregarle un WN722N al MR3020 con antena direccional o panel.
  • actualizar versión del WDR3500, actualmente no funciona eth0 ni eth1.
  • conseguir buenas antenas para el WDR3500.
  • enlazar a NodoPlazaFlores y todo aquel que quiera conectarse.

Soporte usb-storare

Es posible agregar un pendrive o un disco externo en formato ext4 directamente el router y usarlo como medio de almacenamiento, sólo es necesario incluir los siguientes paquetes:

kmod-usb-storage
uhttpd
block-mount
kmod-fs-ext4   

ChangeLog

Notas al pie de página: