Bueno tenía un 740 haciendo de AP de casa y cliente del vecinio, y el WDR-3500 metido en una ziploc.
Quería hacer mi tarea y sembrar una red libre. Le instalé LibreMesh al 3500 en un 2 por 3.
OpenWRT
El 740 corre un OpenWRT Attitude Adjustment v..
No podía instalarle LibreMesh a este último porque no está dentro de los routers soportados.
Habría que ver incluso si tiene memoria suficiente para todos los paquetes que libremesh usa.
Más bien, partiendo de un OpenWRT puro, intentaré habilitarlo para participar en la malla.
Así también entiendo como funciona, no automágicamente…
Suerte de ingeniería inversa, compararé las listas de paquetes de ambos:
Saco la lista de cada router
$ ssh root@openwrt root@OpenWrt:~# opkg list-installed > /tmp/paquetesOpenWRT root@OpenWrt:~# scp numerico@mi-pc:/tmp/paquetesOWRT ($ exit) $ ssh root@LiMe root@LiMe:~# opkg list-installed > /tmp/paquetesLiMe root@LiMe:~# scp numerico@mi-pc:/tmp/paquetesLiMe
y los comparo
$ cd /tmp $ diff -y paquetesLiMe paquetesOWRT | less
Aquí pueden ver el resultado [[link archivo]]
Ahora, lo que me interesa son los paquetes que LiMe tiene pero OpenWRT no.
Los más importantes me parecieran ser:
kmod-batman-adv alfred batctl bmx6 bmx6-auto-gw-mode lime-proto-batadv lime-proto-bmx6 luci-app-batman-adv luci-app-bmx6
BATMAN, su mayordomo Alfred, batctl (batman control), los recuerdo de DeltaLibre.
B.A.T.M.A.N
BATMAN es el protocolo de ruteo en malla…
Como opera en capa 2, en OpenWRT existe como módulo del kernel, kmod-batman-adv
10.9.1
Por ente intenté instalar este primero pero no está disponible:
root@OpenWrt:~# opkg install kmod-batman-adv
Unknown package 'kmod-batman-adv'. Collected errors: * opkg_install_cmd: Cannot install package kmod-batman-adv.
10.9
De partida no tenía repositorio >>
$ less /etc/opkg.conf
src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09.1/ar71xx/generic/packages
el cual no existe; sí existe 12.09. así que:
root@OpenWrt:~# opkg update
Downloading http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/Packages.gz. Updated list of available packages in /var/opkg-lists/attitude_adjustment.
–force-depends
Ahora sí
root@OpenWrt:~# opkg install kmod-batman-adv
Installing kmod-batman-adv (3.3.8+2012.3.0-3) to root... Downloading http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/kmod-batman-adv_3.3.8+2012.3.0-3_ar71xx.ipk. Collected errors: * satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-batman-adv: * kernel (= 3.3.8-1-d6597ebf6203328d3519ea3c3371a493) * kernel (= 3.3.8-1-d6597ebf6203328d3519ea3c3371a493) * * opkg_install_cmd: Cannot install package kmod-batman-adv.
¡casi! las versiones del kernel son extremadamente cercanas
root@OpenWrt:~# opkg info kernel
Package: kernel Version: 3.3.8-1-885e86ca159438f43cfb97a4fac81c6d
..así que lo fuerzo no más.
root@OpenWrt:~# opkg --force-depends install kmod-batman-adv
y queda instalado.
Con sólo ésto intenté la configuración de acá http://www.open-mesh.org/projects/batman-adv/wiki/Quick-start-guide
ad-hoc up
¡y LiMe registra una feble actividad en la interfaz ad-hoc!
FOTO
un examen de consola
root@millsmess:~# iw dev
Interface wlan0_adhoc ifindex 13 wdev 0x2 addr c0:4a:00:fc:65:66 ssid einworb.lime type IBSS channel 11 (2462 MHz), width: 20 MHz, center1: 2462 MHz
root@millsmess:~# iw dev wlan0_adhoc link
Joined IBSS ca:fe:00:c0:ff:ee (on wlan0_adhoc) SSID: einworb.lime freq: 2462
pero al intentar añadir interfaces a BATMAN con
root@OpenWRT:~# batctl if add wlan0
(o eth0, o wwan…)
v.??
Tuve que reflashear con la versión de OpenWRT, la cual tenía la versión del kernel , que es la que pide exactamente.
UNA VEZ HECHO ESTO, PUDE PASARLE INTERFACES A BATCTL
root@OpenWrt:~# batctl if add wlan0-1 root@OpenWrt:~# batctl if
wlan0-1: active
originators
luego, a pesar que estaban ambos asociados en ad-hoc, y con BATMAN corriendo, no se veían:
estan asociados pero no se reconocen:
root@OpenWrt:~# batctl p C0:4A:00:FC:65:66
PING C0:4A:00:FC:65:66 (c0:4a:00:fc:65:66) 20(48) bytes of data From C0:4A:00:FC:65:66: Destination Host Unreachable (icmp_seq 1) ^C--- C0:4A:00:FC:65:66 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss
porque no toman sus respectivos originators:
root@OpenWrt:~# batctl o
[B.A.T.M.A.N. adv 2012.3.0, MainIF/MAC: wlan0-1/b2:48:7a:97:9c:a7 (bat0)] Originator last-seen (#/255) Nexthop [outgoingIF]: Potential nexthops ... No batman nodes in range ...
A este punto dos alternativas:
- conectarme a la red ad-hoc y sniffearla con wireshark para ver la diferencia entre los originators
- compilar un openwrt con la version exacta y simbolos de debug para batman: una paja, teniendo en cuenta lo de la versión del kernel…
Debian en modo Ad-Hoc
¿como me conecto con mi pc a una red adhoc?
root@mi-pc:/home/nn# iwconfig wlan0 channel 11 essid allaMniK.lime mode ad-hoc root@mi-pc:/home/nn# ifconfig wlan0 up
SIOCSIFFLAGS: Operation not possible due to RF-kill
como vemos no funcionó, no queda asociado:
# iwconfig
lo no wireless extensions. wlan0 IEEE 802.11bgn ESSID:"allaMniK.lime" Mode:Ad-Hoc Frequency:2.462 GHz Cell: Not-Associated Tx-Power=off Retry long limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off
ésto se debe a que mi antena viene soft-blocked* para conectarse en ad-hoc (!)
# rfkill list
0: asus-wlan: Wireless LAN Soft blocked: yes Hard blocked: no
simplemente bajo el desbloqueador rfkill
# rfkill unblock wifi # rfkill list
0: asus-wlan: Wireless LAN Soft blocked: no Hard blocked: no
# reboot # iwconfig
wlan0 IEEE 802.11bgn ESSID:"allaMniK.lime" Mode:Ad-Hoc Frequency:2.462 GHz Cell: CA:FE:00:C0:FF:EE Tx-Power=16 dBm Retry long limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off
wireshark
ahora podemos sniffear con wireshark, y efectivamente vemos que ambos router estan usando la red, pero parecieran hablar lenguajes distintos:
el batman del openwrt envia este tipo de paquetes:
5 3.939280000 b2:48:7a:97:9c:a7 Broadcast BATADV_BATMAN 40 Seq=2473358473
y el de libremesh este:
272 259.673410000 c0:4a:00:fc:65:66 Broadcast BATADV_??? 42
(libremesh ademas establece una conexion udp en el puerto 6240 por ip6… esto sugiere que quizás está intentando otro tipo de conextión, ej. bmx6?)
incluso un par de veces dice:
469 93.300794000 c0:4a:00:fc:65:66 Broadcast BATADV_BATMAN 78 Unsupported
BATMAN PROTOCOL VERSION
todo me hace pensar que simplemente tienen versiones de batman incompatibles
aja, el faq lo dice http://www.open-mesh.org/projects/batman-adv/wiki/Troubleshooting
If ‘batctl o’ does not show the neighbor you expect to see you should verify whether or not all nodes runt he same batman-adv version. Having the same version on all nodes is the safest way to be sure that the versions are compatible. A new release might change the compatibility number to avoid problems when incompatible versions run in the same mesh. Incompatible nodes will simply ignore each other. Consult our compatibility table to find out which release(s) carry which compatibility number.
las versiones son:
root@OpenWrt:~# batctl -v
batctl 2012.3.0 [batman-adv: 2012.3.0] -> COMPAT_VERSION 14
root@millsmess:~# batctl -v
batctl 2014.4.0 [batman-adv: 2014.4.0] -> COMPAT_VERSION 15
ALTERMESH
mi única posibilidad sería usar altermesh en vez de libremesh, si es que usa una versión más antigua, veamos:
root@c04a00fc6566:/# batctl -v
batctl 2012.4.0 [batman-adv: 2012.4.0] -> COMPAT_VERSION 14!!!
altermesh por defecto venía en el canal 1, así que me confundí, pero
con solo cambiar el canal de la antena de millsmess a 11, el que uso en openwrt:
root@OpenWrt:~# batctl o
[B.A.T.M.A.N. adv 2012.3.0, MainIF/MAC: wlan0-1/b2:48:7a:97:9c:a7 (bat0)] Originator last-seen (#/255) Nexthop [outgoingIF]: Potential nexthops ... c2:4a:00:fc:65:67 0.790s (248) c2:4a:00:fc:65:67 [ wlan0-1]: c2:4a:00:fc:65:67 (248)
root@millsmess:~# batctl o
[B.A.T.M.A.N. adv 2012.4.0, MainIF/MAC: wlan0-1/c2:4a:00:fc:65:67 (bat0)] Originator last-seen (#/255) Nexthop [outgoingIF]: Potential nexthops ... b2:48:7a:97:9c:a7 0.450s (201) b2:48:7a:97:9c:a7 [ wlan0-1]: b2:48:7a:97:9c:a7 (201)
DHCP – capa 3
Ahora tengo que ver que hago con el ruteo, o sea la capa 3
gateway
Un gateway es un nodo con salida a internet http://www.open-mesh.org/projects/batman-adv/wiki/Gateways.
entry point
pero antes me parece tengo que definir cuales son los entry points, es decir conexiones de la mesh con otros equipos que no estan en modo ad-hoc, o algo así.
bridge
Hay que definir un bridge (puente) entre bat0 y las interfaces a los que se conectan. En este caso serian los AP de una red libre.
Definiremos entonces esta interfaz puente, y es ésta la que se encargara del ruteo, ya no wlan0 ni bat0 siquiera.
interfaces
en mi caso tengo las interfaces
- mesh (bat0)
- lan (eth0 y wlan0) – es un bridge
- wan (eth1) – no se usa
- wwan (cliente) – sale a internet por 192.168.1.1
lan está forwardeado a wan y wwan, por donde sale
lan es 192.168.2.1 – como es una máscara debe definirse en otro segmento de red que el cliente
bat0 – lan
bat0 debiera asignar dinamicamente este segmento (192.168.2.x/24?)
pero en cierta parte * dice que para hacer entry points hay que definir un puente, y es a este el que asignara, ya no bat0
lan ya es un bridge entre eth0s y wlan0; y es es la red local, que da dhcps 192.168.2.x/24
por ende necesito un bridge entre bat0 y lan.
entre bat0 y wlan0 primero, ojala entre los tres, eth0s tambien.
¿cómo?
tantiemos
root@OpenWrt:~# brctl addbr puente-malla root@OpenWrt:~# brctl addif puente-malla br-lan
brctl: bridge puente-malla: Too many levels of symbolic links
solo 2 niveles, bat0 a br-lan y br-lan a eth0/wlan0
así que solo se puede un nivel
necesitare dos bridges por lo menos, para:
- bat0 y wlan0
- y wwan (no eth0 necesariamente, sino que es él, lan, que está actualmente forwardeado a wan, que incluye wwan, la salida)
la teoria es que al estar ambos linkeados BATMAN los hará funcionar como una sola interfaz, que usará el segmento …2.x/24 – y después le podré incluir eth0 incluso, pelando el cable…
/etc/network/interfaces
le agregué bat0 al bridge lan
root@OpenWrt:~# brctl show
bridge name bridge id STP enabled interfaces br-lan 8000.b0487a979ca5 noeth0 wlan0 bat0
lo hice en /etc/network/interfaces agregándole el ifname bat0 a la interface lan
config interface 'lan' option ifname 'eth0 bat0' option type 'bridge' option proto 'static' option netmask '255.255.255.0' option ipaddr '192.168.2.1'
gateway
lo voy a declarar gateway no más, quizas así el otro nodo le pida ip?
en effet:
root@OpenWRT:# batctl gw_mode server root@OpenWRT:# ping millsmess
PING millsmess.lan (10.254.31.243) 56(84) bytes of data. 64 bytes from millsmess.lan (10.254.31.243): icmp_req=1 ttl=64 time=37.2 ms
CONECTADO A OPENWRT, A VER AL REVES?
root@millsmess:# ping openwrt
PING openwrt.lan (10.254.31.1) 56(84) bytes of data. 64 bytes from OpenWrt.lan (10.254.31.1): icmp_req=1 ttl=64 time=22.7 ms
NÓTESE QUE LOS PUSE EN EL MISMO SEGMENTO DE RED, NO SE SI ESTO ERA NECESARIO
PERO DE QUE TENGO CONEXION EN CAPA 2 LA TENGO, Y SALIDA A INTERNET DEDE LA MESH.
TAREA FINALIZADA.
RESULTADO
BONUS
¿QUÉ TENGO QUE MEJORAR?:
- en openwrt a cada reboot debo redeclarar
batctl ifadd wlan0-1 batctl gwmode server
- en millsmess a cada vez me sobrescribe el essid de la mesh,
probablement por un script de altermesh
añadir interfaz a BATMAN permanentemente
para no tener que darle `batcl if add..` a cada boot:
root@OpenWRt:# vi /etc/config/batman-adv
config 'mesh' 'bat0' option interfaces 'wlan0-1' ..
setear gw_mode server permanentemente
tambien se puede setear en /etc/config/batman-adv
config 'mesh' 'bat0' option 'interfaces' 'mesh wlan0-1' option 'gw_mode' 'server'