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.??

Finalmente era por haber forzado la instalación de kmod-batman-adv pese a la dependencia incumplida.
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:

  1. conectarme a la red ad-hoc y sniffearla con wireshark para ver la diferencia entre los originators
  2. 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:

  1. bat0 y wlan0
  2. 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	no		eth0
							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?:

  1. en openwrt a cada reboot debo redeclarar
    batctl ifadd wlan0-1
    batctl gwmode server
    
  2. 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'
Este sitio utiliza cookies.    Leer más