CONFIGURACIONES AVANZADAS DE UN USR2450 bajo LinuxAP

 

Este documento esta basado en las recopilaciones y  experiencias propias del autor. Están hechas para la distribución de LinuxAP del 13-09-2002 que es la versión estable que se esta utilizando actualmente. El autor declina cualquier responsabilidad derivada de la aplicación de este tutorial. La distribución total o parcial  de este documento con fines comerciales  esta expresamente prohibida en cualquier medio o soporte sin la autorización por escrito del autor.

Configuración de una red simple de 2 AP con WDS
(reconocimiento automatico)

Una de las particularidades con mayor atractivo de  LinuxAP es la posibilidad de crear redes inalámbricas uniendo  distintos  Puntos de Acceso a través del éter. Esto se consigue mediante un protocolo llamado WDS (Wireless Distribution System). Este sistema nos permite hacer “bridging”, es decir, puentes, a Nivel 2 entre todos los puntos de acceso de una red definida, quedando claro que todos los puntos de acceso deben estar capacitados para trabajar en este formato de paquetes. Esta claro que la implementación de este protocolo en LinuxAP sobre la base física del USR2450 conlleva muchas ventajas al no necesitar para nada un PC adicional enganchado al AP, es decir, nuestro LinuxAP es capaz, por el solo, de gestionar las tramas y redirigirlas de forma inteligente hacia su destino. ¿Como hacerlo? Vamos a ello….
Partimos de la base de que, en teoría, nuestro LinuxAP, versión 13-09-2002, viene preparado para funcionar automáticamente en la configuración “AP/Bridge” (runlevel3) en este formato. De hecho, si damos un vistazo a wlan0 desde el terminal RS232 haciendo:
# cd etc/rw
# cat wlan0
nos muestra un parámetro para la configuración del WDS

#
# wlan0
#
SSID=www.olotwireless.net
# S/B one of 1,6,11
CHANNEL=11
wep=
# Only for RL/3
NWDS=0

Este parámetro es el que nos determinara hasta que nivel deseamos que interactue nuestra red, es decir, dependiendo del numero de AP asociados deberá tener un valor u otro. ¿Cómo se determina ese valor?. Vamos a ver un ejemplo.
Imaginémonos una red básica de 3 AP “en línea”:
AP A <wireless link> AP B <wireless link> AP
AP A solo enlaza con AP B, solo necesitara un valor NWDS=1
AP B enlaza con AP A y AP C, necesitara un valor NWDS=2
AP C solo enlaza con AP B, necesitara un valor NWDS=1
 
Si AP A y AP C pueden ver a otro AP, aparte de AP B, los tres necesitaran NWDS=2
 
 
Como podéis ver, el valor de NWDS variara en función de la topología de nuestra red.
 
Aparte de este valor debemos tener en cuenta unos cuantos datos más en la configuración de nuestros AP en modo WDS
 
1.-Todos deben estar en el mismo canal. (después ya veremos que no es del todo cierto!)
2.-Todos deben tener el mismo ESSID (Grupo de trabajo)
3.-Si se utiliza WEP (encriptación) todos deben tener la misma.
4.-Todos deben estar configurados de la misma forma (AP/Bridge).
5.-Todos deben estar en el mismo rango de IP.
 
Teniendo en cuenta simplemente estos datos el poner en funcionamiento nuestra red WDS debería ser “coser y cantar”… pero no….
Por desgracia, como suele ocurrir en estos casos, Murphy se encarga de enredarlo todo, y, como ya vimos en el ejemplo de configuración del
AP/Router, uno puede volverse loco intentando descubrir porque no funcionan las cosas… hasta que descubre el porque te has pasado mil horas
cambiando cosas y el invento sigue sin funcionar.
 
Y así es…
 
En este caso nuestra versión Viernes 13 tiene un segundo “bug”… descubierto por Bruno Lopes y reflejado aquí:
 
http://lists.instant802.com/pipermail/openap-dev/2002-September/001301.html
y que impide que nuestro LinuxAP funcione como es debido. Como podéis ver en el documento de Bruno esta el parche para, en sucesivas compilaciones, solucionar este “pequeño” inconveniente. así que, los que tengáis por mano el tema de compilar y reflashear ya tenéis con que entreteneros. El resto de “mortales” vamos a intentar solucionar el problema, provisionalmente, de la mejor manera posible.
 
Y como no, vamos a echar mano del rc.tweak .¿Os acordáis de el?...ya nos sirvió para solucionar el “bug” del modo AP/Router y, de nuevo, aquí, nos va a permitir ver funcionar nuestra red de LinuxAP en modo WDS.
 
El propio Bruno Lopes nos ofrecía en otro mensaje la solución:
 
http://lists.instant802.com/pipermail/openap-dev/2002-September/001315.html
Y esta consiste en agregar a nuestro rc.tweak estas líneas que corrigen el “bug”:
Hacemos:
 
# cd
# cd etc/rw

# vi rc.tweak
 
tecleamos:
 
“i”
 
y escribimos:

 
#!/bin/sh
if [ `cat /etc/rw/runlevel` -ne 2 ]
then
  echo -e "\n. /etc/rw/wlan0\n" > /etc/rw/netcfg
 /etc/rc.d/init.d/br0 restart
  prism2_param wlan0 other_ap_policy 1
fi
 
salimos con:
 
:wq
 
y guardamos con:
 
save_config
 
Con esto debería de funcionar…. Pero… ay!... nuevos problemas!.
Una de las limitaciones con las que nos encontramos a la hora de configurar nuestro LinuxAP es el escaso espacio “libre” (16K) del que disponemos para editar nuestras configuraciones , sin olvidarnos lo que pueda necesitar nuestro LinuxAP para “arrancar”.
 
así pues, si intentáis arrancar vuestro LinuxAP tal y como teníais en el ejemplo de configuración como AP/Bridge, y las modificaciones añadidas que acabamos de implementar, no solo no os arrancara, sino que vuestro “netcfg” acabara hecho unos “zorros”… tal que así:
 
# cd
#cd etc/rw
# cat netcfg
 
. /etc/rw/wlan0
 
Horror!!... ¿Qué ha pasado con nuestro netcfg?
Pues fácil… si observáis el arranque de vuestro LinuxAP veréis que cuando intenta ejecutar el rc.tweak le falta “oxigeno”, es decir… buffer… y borra lo primero que pilla (en este caso el netcfg) para tener el espacio suficiente para acabar de arrancar.
Alguno dirá… bueno, puesto que parece ser que “redirige” la llamada hacia wlan0… le metemos allí el netcfg y a correr…. Nanai… sigue sin funcionar “cargándose” de nuevo lo que pille mas cerca al arrancar. Vamos pues a optimizar (dentro de lo posible) nuestro arranque para que no nos ocurra lo comentado.
 
Lo primero que vamos a quitar va a ser todo el texto “sobrero” de los docs que va a leer runlevel3 al arrancar, es decir, básicamente, el netcfg y el wlan0. El udhcpd.conf no lo usa… así que, si vais a dejar esta configuración “para siempre” podéis borrarlo también (nosotros no lo hemos hecho).
así pues, nuestro netcfg debería tener un aspecto similar a este:
 
p_dhcp=disabled
p_address=10.34.121.151
p_netmask=255.255.255.0
p_broadcast=10.34.121.255
 
y nuestro wlan0 a este:
 
SSID=www.olotwireless.net
CHANNEL=11
wep=
NWDS=1
 
Bien, con esto ya evitamos que nos de la “lata” inmediatamente, aunque algunas veces aun nos puede borrar el netcfg al arrancar!!
así que vamos a ver que podemos hacer más.
Si recordáis, al arrancar en modo AP/Bridge, nos habilitaba el servidor de http y el de telnet… así que, si no vais a usarlos, vamos a desactivarlos desde el propio rc.tweak, así que añadiremos, antes del script que nos habilitara el WDS:
 
/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/telnetd stop
 
con lo que nuestro rc.tweak nos quedara así:
 
#!/bin/ash
/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/telnetd stop
if [ `cat /etc/rw/runlevel` -ne 2 ]
then
  echo -e "\n. /etc/rw/wlan0\n" > /etc/rw/netcfg
  /etc/rc.d/init.d/br0 restart
  prism2_param wlan0 other_ap_policy 1
fi
 
 
Tambien es aconsejable borrar el contenido de udhcpd.leases si habeis estado antes usando el servidor DHCP.
Bien, ahora ya parece que lo tenemos todo a punto. Vamos a arrancar nuestro AP. Acordaros, si habéis estado “toqueteando”, que debéis tener vuestro LinuxAP en el runlevel 3.
A ver que vemos:
 
 
alios biosless Linux bootloader V2                                 
 
- Bank 0: 2048K organized as 1024K (10 rows by 10 columns) by 16 bits, EDO                                                                         
- Bank 1: 2048K organized as 1024K (10 rows by 10 columns) by 16 bits, EDO                                                                         
- Bank 2: no DRAM detected                         
- Bank 3: no DRAM detected                         
- Total DRAM detected: 4096 kbytes                                 
- loading configuration 1                        
- kernel args: console=ttyS0,4800n8                                  
 
- scanning bootsect.o                    
- scanning setup.o                  
- updating setup values                      
- copying compressed kernel into RAM.......                                          
- starting kernel                
 
Linux version 2.4.17 (root@benchbox.ksmith.com) (gcc                                                     
lease)) #1 Fri Sep 13 01:05:42 MST 2002                                      
BIOS-provided physical RAM map:                              
 BIOS-88: 0000000000000000 - 000000000009f000 (usable)                                                      
 BIOS-88: 0000000000100000 - 0000000000460000 (usable)                                                     
On node 0 totalpages: 1120                         
zone(0): 1120 pages.                   
zone(1): 0 pages.                
zone(2): 0 pages.                
Kernel command line: console=ttyS0,4800n8                                        
Initializing CPU#0                 
Calibrating delay loop... 16.48 BogoMIPS                                       
Memory: 2884k/4480k available (735k kernel code, 1208k reserved, 148k data, 48k                                                                              
init, 0k highmem)                
Checking if this processor honours the WP bit even in                                                   
kmem_create: Forcing size word alignment - names_cache                                                     
Dentry-cache hash table entries: 1024 (order: 1, 8192 bytes)                                                           
Inode-cache hash table entries: 512 (order: 0, 4096 bytes)                                                         
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)                                                         
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)                                                           
Page-cache hash table entries: 2048 (order: 1, 8192 bytes)                                                         
CPU: AMD 02/0a stepping 04                          
Checking 'hlt' instruction... OK.                                
POSIX conformance testing by UNIFIX                                  
Linux NET4.0 for Linux 2.4                         
Based upon Swansea University Computer                                       
Initializing RT netlink socket                             
Starting kswapd              
register_swap_method: method blkdev                                  
register_swap_method: method blkdev file                                        
Serial driver version 5.05c (2001-07-08) with no serial options enabled                                                                      
ttyS00 at 0x03f8 (irq = 4) is a 16550A                                     
block: 64 slots per queue, batch=16                                  
ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)                                                  
Last modified Nov 1, 2000 by Paul Gortmaker                                          
NE*000 ethercard probe at 0x200: 02 02 02 02 05 02                                                 
eth0: NE2000 found at 0x200, using IRQ 14.                                         
physmap flash device: 0x100000 at 0x1000000                                          
2nd physmap flash device: 0x200000 at 0x2000000                                              
Found: Macronix MX29F800T - 8bit access                                      
number of JEDEC chips: 1                       
NET4: Linux TCP/IP 1.0 for NET4.0                                 
IP Protocols: ICMP, UDP, TCP                           
IP: routing cache hash table of 512 buckets, 4Kbytes                                                   
TCP: Hash tables configured (established 512 bind 512)                                                      
ip_conntrack (35 buckets, 280 max)                                 
ip_tables: (c)2000 Netfilter core team                                     
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.                                                   
NET4: Ethernet Bridge 008 for NET4.0                                   
VFS: Mounted root (cramfs filesystem) readonly.                                              
Freeing unused kernel m                     
serial console detectedDisabling virtual terminals.                                                     
console=/dev/console                   
init startedBusyBox v0.60.3-pre (2002.09.13-08:10+0000) multi-call binary                                                                            
Entering runlevel S                  
10.sysinit:          
 
 
                        Welcome to Linux Instant802                                                  
 
re-mounting root filesystem in rw mode                                      
mounting proc filesystem                       
mounting var filesystem                      
20.configfs:           
2+0 records in             
2+0 records out              
netcfg     
rc.tweak       
resolv.conf          
runlevel       
telnetd.hosts            
udhcpd.conf          
udhcpd.leases            
wlan0    
loaded saved config.                   
Done.    
Entering runlevel 3                  
10.wlan:       
Starting wlan0: Using /lib/modules/2.4.17/pcmcia/pcmcia_core.o                                                             
Linux PCMCIA Card Services 3.1.28                                
  kernel build: 2.4.17 #1 Fri Sep 13 01:05:42 MST 2002                                                      
  optionsnone               
Using /lib/modules/2.4.17/pcmcia/i82365.o                                        
Intel PCIC probe:                
  Intel i82365sl A step ISA-to-PCMCIA at port 0x3e0 ofs 0x00                                                            
    host opts [0]: none                      
    ISA irqs (default) = 3,5,7,9,10,11,12,15 polling interval = 1000 ms                                                                      
Using /lib/modules/2.4.17/pcmcia/ds.o                                    
Using /lib/modules/2.4.17/pcmcia/hostap_cs.o                                           
hostap_cs: hostap_cs.c 0.0.0 2002-05-19 (SSH Comm                                              
 Malinen)        
hostap_cs: (c) SSH Communications Security Corp <jkm@ssh.com>                                                            
Jan  1 00:00:11 cardmgr[58]: starting, version i                                               
Jan  1 00:00:11 cardmgr[58]: watching 1 sockets                                               
Jan  1 00:00:12 cs: memory probe 0x0d0000-0x0dffff:cardmgr[58]: ini clean.                                                                         
tializing socket 0                 
Jan  1 00:00:12 cardmgr[58]: socket 0: PRISM2 IEEE 802.11 PC-CARD                                                                
cs: IO port probe 0x0100-0x04ff: clean.                                      
cs: IO port probe 0x0800-0x08ff: clean.                                       
cs: IO port probe 0x0c00-0x0cff: clean.                                      
hostap_cs: index 0x01: Vcc 5.0, irq 3, io 0x0100-0x013f                                                      
hostap_cs: Registered netdevice wlan0                                     
wlan0: NIC: id=0x8008 v1.0.0                           
wlan0: PRI: id=0x15 v0.3.0                         
wlan0: STA: id=0x1f v1.3.4                         
Jan  1 00:00:13 cardmgr[58]: executing: './network start wlan0'                                                               
Jan  1 00:00:13 cardmgr[58]: + ./network: No such file or directory                                                                  
Jan  1 00:00:13 cardmgr[58]: start cmd exited with status 127                                                             
Jan  1 00:00:13 cardmgr[58]: exiting                                   
Done.    
20.secondary:            
30.br0:      
Starting BRIDGING services:                          
device wlan0 entered promiscuous mode                                    
device eth0 entered promiscuous mode                                   
br0: port 2(eth0) entering listening                                  
br0: port 1(wlan0) entering listening state                                           
br0: port 2(eth0) entering learning state                                        
br0: port 1(wlan0) entering learning state                                         
br0: port 2(eth0) entering forwarding state                                           
br0: topology change detected, propagating                                         
br0: port 1(wlan0) entering forwarding state                                           
br0: topology change detected, propagating                                          
40.primary:          
Starting bridge interface.                         
42.route:        
45.netswap:          
50.tcpsrv:         
Set date && start logging.                         
60.telnetd:          
Starting telnetd daemon.                       
70.httpd:        
Starting httpd daemon.                     
98.tweak:        
Stopping httpd daemon.                     
Terminated         
Stopping telnetd daemon.                       
Terminated          
Restarting BRIDGING services:                            
Shutting down BRIDGING services:                               
br0: port 2(eth0) entering disabled state                                        
br0: port 1(wlan0) entering disabled state                                          
br0: port 1(wlan0) entering disabled state                                         
device wlan0 left promiscuous mode                                 
br0: port 2(eth0) entering disabled state                                         
device eth0 left promiscuous mode                                
Starting BRIDGING services:
device wlan0 entered promiscuous mode
device wlan0wds0 entered promiscuous mode
device eth0 entered promiscuous mode
br0: port 3(eth0) entering listening state
br0: port 2(wlan0wds0) entering listening state
br0: port 1(wlan0) entering listening state
br0: port 3(eth0) entering learning state
br0: port 2(wlan0wds0) entering learning state
br0: port 1(wlan0) entering learning state
br0: port 3(eth0) entering forwarding state
br0: topology change detected, propagating
br0: port 2(wlan0wds0) entering forwarding state
br0: topology change detected, propagating
br0: port 1(wlan0) entering forwarding state
br0: topology change detected, propagating
 
Please press Enter to activate this console.
 
 
BusyBox v0.60.3-pre (2002.09.13-08:10+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
 
#
 
Si os fijáis, ejecuta dos veces la parte del script correspondiente al WDS, la primera, por la configuración por defecto:
 
30.br0:      
Starting BRIDGING services:                          
device wlan0 entered promiscuous mode                                    
device eth0 entered promiscuous mode                                   
br0: port 2(eth0) entering listening                                  
br0: port 1(wlan0) entering listening state                                          
br0: port 2(eth0) entering learning state                                        
br0: port 1(wlan0) entering learning state                                         
br0: port 2(eth0) entering forwarding state                                          
br0: topology change detected, propagating                                         
br0: port 1(wlan0) entering forwarding state                                           
br0: topology change detected, propagating                                         
40.primary:          
Starting bridge interface.
 
Y la segunda, fruto del trabajo del rc.tweak, deshabilita primero los servidores de http y telnet, y luego deshabilita el Bridging y vuelve a ejecutarlo correctamente.
 
 
98.tweak:        
Stopping httpd daemon.                     
Terminated         
Stopping telnetd daemon.                       
Terminated         
Restarting BRIDGING services:                            
Shutting down BRIDGING services:                               
br0: port 2(eth0) entering disabled state                                        
br0: port 1(wlan0) entering disabled state                                         
br0: port 1(wlan0) entering disabled state                                         
device wlan0 left promiscuous mode                                 
br0: port 2(eth0) entering disabled state                                         
device eth0 left promiscuous mode                                
Starting BRIDGING services:
device wlan0 entered promiscuous mode
device wlan0wds0 entered promiscuous mode
device eth0 entered promiscuous mode
br0: port 3(eth0) entering listening state
br0: port 2(wlan0wds0) entering listening state
br0: port 1(wlan0) entering listening state
br0: port 3(eth0) entering learning state
br0: port 2(wlan0wds0) entering learning state
br0: port 1(wlan0) entering learning state
br0: port 3(eth0) entering forwarding state
br0: topology change detected, propagating
br0: port 2(wlan0wds0) entering forwarding state
br0: topology change detected, propagating
br0: port 1(wlan0) entering forwarding state
br0: topology change detected, propagating
 
En el otro AP de nuestra red tenemos que hacer lo mismo, es decir, la misma configuración, pero, lo único que cambiaremos será la IP, que, recordad, debe de ser del mismo rango….PERO NO LA MISMA!!!
 
En nuestro ejemplo, para