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> APAP A solo enlaza con AP B, solo necesitara un valor NWDS=1AP B enlaza con AP A y AP C, necesitara un valor NWDS=2AP C solo enlaza con AP B, necesitara un valor NWDS=1Si AP A y AP C pueden ver a otro AP, aparte de AP B, los tres necesitaran NWDS=2Como 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 WDS1.-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í: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:Y esta consiste en agregar a nuestro rc.tweak estas líneas que corrigen el “bug”:Hacemos:# cd# cd etc/rw
# vi rc.tweaktecleamos:“i”y escribimos:
#!/bin/shif [ `cat /etc/rw/runlevel` -ne 2 ]thenecho -e "\n. /etc/rw/wlan0\n" > /etc/rw/netcfg/etc/rc.d/init.d/br0 restartprism2_param wlan0 other_ap_policy 1fi
salimos con::wqy guardamos con:save_configCon 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/wlan0Horror!!... ¿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=disabledp_address=10.34.121.151p_netmask=255.255.255.0p_broadcast=10.34.121.255y nuestro wlan0 a este:SSID=www.olotwireless.netCHANNEL=11wep=NWDS=1Bien, 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 stopcon lo que nuestro rc.tweak nos quedara así:#!/bin/ash/etc/rc.d/init.d/httpd stop/etc/rc.d/init.d/telnetd stopif [ `cat /etc/rw/runlevel` -ne 2 ]thenecho -e "\n. /etc/rw/wlan0\n" > /etc/rw/netcfg/etc/rc.d/init.d/br0 restartprism2_param wlan0 other_ap_policy 1fiTambien 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 kernelLinux version 2.4.17 (root@benchbox.ksmith.com) (gcclease)) #1 Fri Sep 13 01:05:42 MST 2002BIOS-provided physical RAM map:BIOS-88: 0000000000000000 - 000000000009f000 (usable)BIOS-88: 0000000000100000 - 0000000000460000 (usable)On node 0 totalpages: 1120zone(0): 1120 pages.zone(1): 0 pages.zone(2): 0 pages.Kernel command line: console=ttyS0,4800n8Initializing CPU#0Calibrating delay loop... 16.48 BogoMIPSMemory: 2884k/4480k available (735k kernel code, 1208k reserved, 148k data, 48kinit, 0k highmem)Checking if this processor honours the WP bit even inkmem_create: Forcing size word alignment - names_cacheDentry-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 04Checking 'hlt' instruction... OK.POSIX conformance testing by UNIFIXLinux NET4.0 for Linux 2.4Based upon Swansea University ComputerInitializing RT netlink socketStarting kswapdregister_swap_method: method blkdevregister_swap_method: method blkdev fileSerial driver version 5.05c (2001-07-08) with no serial options enabledttyS00 at 0x03f8 (irq = 4) is a 16550Ablock: 64 slots per queue, batch=16ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)Last modified Nov 1, 2000 by Paul GortmakerNE*000 ethercard probe at 0x200: 02 02 02 02 05 02eth0: NE2000 found at 0x200, using IRQ 14.physmap flash device: 0x100000 at 0x10000002nd physmap flash device: 0x200000 at 0x2000000Found: Macronix MX29F800T - 8bit accessnumber of JEDEC chips: 1NET4: Linux TCP/IP 1.0 for NET4.0IP Protocols: ICMP, UDP, TCPIP: routing cache hash table of 512 buckets, 4KbytesTCP: Hash tables configured (established 512 bind 512)ip_conntrack (35 buckets, 280 max)ip_tables: (c)2000 Netfilter core teamNET4: Unix domain sockets 1.0/SMP for Linux NET4.0.NET4: Ethernet Bridge 008 for NET4.0VFS: Mounted root (cramfs filesystem) readonly.Freeing unused kernel mserial console detected. Disabling virtual terminals.console=/dev/consoleinit started: BusyBox v0.60.3-pre (2002.09.13-08:10+0000) multi-call binaryEntering runlevel S10.sysinit:Welcome to Linux Instant802re-mounting root filesystem in rw modemounting proc filesystemmounting var filesystem20.configfs:2+0 records in2+0 records outnetcfgrc.tweakresolv.confrunleveltelnetd.hostsudhcpd.confudhcpd.leaseswlan0loaded saved config.Done.Entering runlevel 310.wlan:Starting wlan0: Using /lib/modules/2.4.17/pcmcia/pcmcia_core.oLinux PCMCIA Card Services 3.1.28kernel build: 2.4.17 #1 Fri Sep 13 01:05:42 MST 2002options: noneUsing /lib/modules/2.4.17/pcmcia/i82365.oIntel PCIC probe:Intel i82365sl A step ISA-to-PCMCIA at port 0x3e0 ofs 0x00host opts [0]: noneISA irqs (default) = 3,5,7,9,10,11,12,15 polling interval = 1000 msUsing /lib/modules/2.4.17/pcmcia/ds.oUsing /lib/modules/2.4.17/pcmcia/hostap_cs.ohostap_cs: hostap_cs.c 0.0.0 2002-05-19 (SSH CommMalinen)hostap_cs: (c) SSH Communications Security Corp <jkm@ssh.com>Jan 1 00:00:11 cardmgr[58]: starting, version iJan 1 00:00:11 cardmgr[58]: watching 1 socketsJan 1 00:00:12 cs: memory probe 0x0d0000-0x0dffff:cardmgr[58]: ini clean.tializing socket 0Jan 1 00:00:12 cardmgr[58]: socket 0: PRISM2 IEEE 802.11 PC-CARDcs: 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-0x013fhostap_cs: Registered netdevice wlan0wlan0: NIC: id=0x8008 v1.0.0wlan0: PRI: id=0x15 v0.3.0wlan0: STA: id=0x1f v1.3.4Jan 1 00:00:13 cardmgr[58]: executing: './network start wlan0'Jan 1 00:00:13 cardmgr[58]: + ./network: No such file or directoryJan 1 00:00:13 cardmgr[58]: start cmd exited with status 127Jan 1 00:00:13 cardmgr[58]: exitingDone.20.secondary:30.br0:Starting BRIDGING services:device wlan0 entered promiscuous modedevice eth0 entered promiscuous modebr0: port 2(eth0) entering listeningbr0: port 1(wlan0) entering listening statebr0: port 2(eth0) entering learning statebr0: port 1(wlan0) entering learning statebr0: port 2(eth0) entering forwarding statebr0: topology change detected, propagatingbr0: port 1(wlan0) entering forwarding statebr0: topology change detected, propagating40.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.TerminatedStopping telnetd daemon.TerminatedRestarting BRIDGING services:Shutting down BRIDGING services:br0: port 2(eth0) entering disabled statebr0: port 1(wlan0) entering disabled statebr0: port 1(wlan0) entering disabled statedevice wlan0 left promiscuous modebr0: port 2(eth0) entering disabled statedevice eth0 left promiscuous modeStarting BRIDGING services:device wlan0 entered promiscuous modedevice wlan0wds0 entered promiscuous modedevice eth0 entered promiscuous modebr0: port 3(eth0) entering listening statebr0: port 2(wlan0wds0) entering listening statebr0: port 1(wlan0) entering listening statebr0: port 3(eth0) entering learning statebr0: port 2(wlan0wds0) entering learning statebr0: port 1(wlan0) entering learning statebr0: port 3(eth0) entering forwarding statebr0: topology change detected, propagatingbr0: port 2(wlan0wds0) entering forwarding statebr0: topology change detected, propagatingbr0: port 1(wlan0) entering forwarding statebr0: topology change detected, propagatingPlease 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 modedevice eth0 entered promiscuous modebr0: port 2(eth0) entering listeningbr0: port 1(wlan0) entering listening statebr0: port 2(eth0) entering learning statebr0: port 1(wlan0) entering learning statebr0: port 2(eth0) entering forwarding statebr0: topology change detected, propagatingbr0: port 1(wlan0) entering forwarding statebr0: topology change detected, propagating40.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.TerminatedStopping telnetd daemon.TerminatedRestarting BRIDGING services:Shutting down BRIDGING services:br0: port 2(eth0) entering disabled statebr0: port 1(wlan0) entering disabled statebr0: port 1(wlan0) entering disabled statedevice wlan0 left promiscuous modebr0: port 2(eth0) entering disabled statedevice eth0 left promiscuous modeStarting BRIDGING services:device wlan0 entered promiscuous modedevice wlan0wds0 entered promiscuous modedevice eth0 entered promiscuous modebr0: port 3(eth0) entering listening statebr0: port 2(wlan0wds0) entering listening statebr0: port 1(wlan0) entering listening statebr0: port 3(eth0) entering learning statebr0: port 2(wlan0wds0) entering learning statebr0: port 1(wlan0) entering learning statebr0: port 3(eth0) entering forwarding statebr0: topology change detected, propagatingbr0: port 2(wlan0wds0) entering forwarding statebr0: topology change detected, propagatingbr0: port 1(wlan0) entering forwarding statebr0: topology change detected, propagatingEn 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