LinuxAP como AP/Router
Ahora que ya hemos conseguido hacer funcionar nuestro USR2450 bajo LinuxAP como “cliente” vamos a ver ahora como podemos hacerlo para configurarlo como AP/Router. Para hacerlo ahora parece que será fácil. Solo debemos de llamar desde nuestro navegador a la URL http://10.0.1.1 y el navegador nos llevara nuevamente a la pantalla de configuración por http. Una vez allí, lo primero que haremos será cambiar en“Running as” el modo “Station/Router” por “AP/Router” y pulsar OK. Lo que hemos hecho internamente es cambiar el valor de “runlevel” 2 por el 4.
Ahora vamos a “Network” para configurar nuestros parámetros de red. OJO! Aquí debemos de fijarnos en que cambia totalmente la configuración de los parámetros. El que en modo “cliente” era la dirección de Wlan ahora será la dirección de ethernet!!. Y la que era ethernet ahora sera Wlan!! . Así que las cambiamos según nuestras conveniencias. Así mismo tendremos que decidir si queremos ser « clientes » de un servidor externo DHCP a través de nuestra ethernet (caso de querer conectar por ejemplo un router ADSL o un programa servidor en nuestro PC) y, deshabilitar el « cliente » DHCP de la Wlan. El resto puede quedar igual.
![]()
Ahora ya podremos pulsar OK y retornar al menú principal.
El telnetd no hará falta tocarlo si utilizamos el mismo rango de IP.
Ahora vamos al DHCPD. Aquí si que necesitamos modificar. Lo primero que hemos de decidir es si queremos utilizar el servidor DHCP, (seguro que si!). Si lo queremos utilizar lo dejamos “Enabled” y ahora modificamos el rango de IP que queramos que nos otorgue. Así que cambiaremos el 10.0.1.2 que correspondía a nuestra ethernet y le ponemos el correspondiente a las IP que hemos cambiado antes a “Network”, en nuestro caso 192.168.0.2 y en la casilla siguiente hacemos lo mismo, es decir, cambiamos el 10.0.1.27 por el 192.168.0.27.
En “Interface” hemos de cambiar también el “eth” por el “wlan” ya que queremos utilizar el servidor DHCP por el port “radio”.
En DNS Server tendríamos que poner la IP del servidor de DNS del que dispongamos. Si la idea es poner un router que lleve servidor de DNS, caso por ejemplo de un 3Com 812, pondríamos la IP del router que debería de coincidir en el mismo rango que la IP asignada a nuestra ethernet. En nuestro caso utilizaremos un servidor DNS “ficticio” 10.0.1.25. Con la “máscara” haremos exactamente lo mismo y dejaremos 255.255.255.0.
En “default router” dejaremos la IP correspondiente a la dirección ethernet de nuestro LinuxAP que será la que encaminará el trafico, 10.0.1.1. En “domain name” pondremos el de nuestra red , en este caso olotwireless.net. Y ya, por último, el “lease time” lo dejaremos igual.
![]()
Pulsamos OK y volvemos al menú principal.
Vamos ahora a “Wireless”. Ahora si que podemos modificar datos del port “radio”.
Cambiamos el ESSID a conveniencia. Este es el nombre que mostrará nuestro AP cuando algún cliente busque un AP. En nuestro caso ponemos www.olotwireless.net . Podríamos modificar el canal (si tenemos actualizado el firmware de nuestra tarjeta)… en este caso lo dejaremos en el 11. También podríamos activar el WEP y, por último, en el NWDS no hace falta tocar nada ya que esta función solo es útil en modo AP/Bridge.
![]()
Pulsamos OK y volvemos al Menu principal. Es importante repasar cuidadosamente todos los datos ya que, por defecto, tal y como veremos luego esta será la ultima vez que veamos la configuración en html ya que en modo AP/Router, por seguridad, el LinuxAP deshabilita el servidor html, con lo que, cualquier modificación posterior tendrá que hacerse necesariamente desde el terminal.
Fijaros sobre todo si tenéis correctamente indicado AP/Router en el “Running As” ya que hemos detectado que, a veces, al modificar el DHCP y volver a la ventana del menú principal “retorna” a modo “cliente”. Una vez comprobados todos los datos ya podemos proceder a pulsar la tecla SAVE. El LinuxAP guardará los datos y procederá a reiniciar nuestro AP ya en modo AP/Router.
Bien… ha llegado la hora de la verdad. Vamos a comprobar si nuestro LinuxAP se comporta como esperamos.
Conectamos un PC una tarjeta o un adaptador USB Wireless y exploramos la “banda”.
EUREKA!!...lo podemos ver!!. Ya lo hemos encontrado!!.
Vamos a ver ahora si el servidor DHCP nos ha dado también una IP. Recordad que debéis tener las propiedades del TCP/IP de vuestro Adaptador USB o de vuestra Tarjeta con “obtener IP automáticamente” y “obtener DNS automáticamente”.
![]()
FRACASO!!!! No nos ha otorgado ninguna IP Automáticamente!!!
¿Que pasa pues?... ¿cual puede ser el problema?. Aparentemente lo hemos configurado todo bien desde la pantalla html. Podemos probar a enviar pings tanto a la 10.0.1.1 como a la 192.168.0.1…. si respuesta!!!. I ahora, ¿que?.
Bien, que no cunda el pánico. Posiblemente nos encontramos ante un “bug” del autor. Sencillamente intuimos que , por « defecto » el arranque del « runlevel 4 » no lee los datos de « network » (netcfg) ni las de « dhcp » (udhcpd.conf). Vamos a ver que pasa.
Nos conectamos nuevamente al LinuxAP mediante el cable por el puerto RS232 con el programa terminal (ya no podemos hacerlo por html!!!). Reiniciamos nuestro LinuxAP y observamos lo que pasa por delante de nosotros….
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) (gcclease)) #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 detected. Disabling virtual terminals.
console=/dev/console
init started: BusyBox 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
resolv.conf
runlevel
telnetd.hosts
udhcpd.conf
udhcpd.leases
wlan0
loaded saved config.
Done.
Entering runlevel 4
10.1.wlan0:
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
options: none
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 is 3.1.28
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=0x8002 v1.0.0
wlan0: PRI: id=0x15 v0.3.0
wlan0: STA: id=0x1f v0.7.5
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.
10.2.primary:
10.3.tftpcfg:
10.5.cipe:
10.8.secondary:
10.9.route:
11.0.netswap:
15.0.tcpsrv:
16.0.dhcpd:
17.0.httpd:
18.0.telnetd:
21.0.iptables:
98.tweak:
99.done:Startup Complete!
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.
#
Fijaros en que arranca realmente con “runlevel 4”, es decir, en modo AP/Router:
loaded saved config.
Done.
Entering runlevel 4
10.1.wlan0:
Starting wlan0: Using /lib/modules/2.4.17/pcmcia/pcmcia_core.o
Y fijaros también en que, a diferencia de cuando arrancaba en modo “cliente”, las ultimas líneas del arranque no ejecutan absolutamente nada!!
10.2.primary:
10.3.tftpcfg:
10.5.cipe:
10.8.secondary:
10.9.route:
11.0.netswap:
15.0.tcpsrv:
16.0.dhcpd:
17.0.httpd:
18.0.telnetd:
21.0.iptables:
98.tweak:
99.done:
Vamos a buscar el “bug”.Si hacemos:
# cd etc/rc.d
y después:
# ls
Veremos una serie de directorios:
1 2 3 4 5 6 S init.d#
Efectivamente son las diferentes carpetas que contienen las arrancadas “por defecto” de nuestro LinuxAP. Como podéis ver solo utilizamos 3 de las 8 posibles… pero vamos ahora a lo que interesa.. Ahora tecleamos:
# cd 4y , otra vez:
# ls
Vemos:
10.1.wlan0 10.5.cipe 11.0.netswap 17.0.httpd 98.tweak10.2.primary 10.8.secondary 15.0.tcpsrv 18.0.telnetd 99.done10.3.tftpcfg 10.9.route 16.0.dhcpd 21.0.iptables#
Efectivamente, aquí tenemos los docs que va a leer el arranque del LinuxAP cuando arranca en modo AP/RouterVamos a ver, por ejemplo, que nos dice el 16.0.dhcpd
# cat 16.0.dhcpd#!/bin/sh## dhcpd#if [ ! -f /etc/rw/udhcpd.conf ]thenecho "No udhcpd configuration aborting script"exit 0fiif grep "udhcpd.conf disable" /etc/rw/udhcpd.confthenecho "udhcpd disabled"exit 0fiLF=/etc/rw/udhcpd.leasescase "$1" instart|2)if [ ! -f $LF ]thentouch $LFfiudhcpd /etc/rw/udhcpd.conf;;stop|0|1|6)killall udhcpdsleep 2;;restart)$0 stop$0 start;;esac#
Aparentemente esta correcto… nos dice que vaya a leer en /etc/rw/udhcpd.conf pero, posiblemente haya alguno de los parámetros que nuestro LinuxAP no “entiende”, bien por un bug en la compilación o bien porqué haya un error de interpretación, i, entonces no puede leer nuestro udhcpd.conf. Vamos de todas formas a verificar que nuestro udhcpd.conf sea correcto.
# cd# cd etc/rw# cat udhcpd.conf# udhcpd.conf enablestart 192.168.0.2end 192.168.0.27interface wlan0lease_file /etc/rw/udhcpd.leasesoption dns 10.0.1.25option subnet 255.255.255.0option router 10.0.1.1option domain olotwireless.netoption lease 86400#
Comprobamos y vemos que, efectivamente, nuestro udhcpd.conf existe tal y como lo habíamos configurado.Bien, lo que podría ser un problema grave no lo será tanto, porqué el autor del programa, previendo de que pudieran pasar cosas parecidas nos ha dejado una posibilidad de “corregir” estos “bugs”. Volvamos a la configuración de nuestro “runlevel 4” por defecto.
# cd# cd etc/rd.d/4
Y ahora examinaremos el contenido del doc 98.tweak
# cat 98.tweak#!/bin/shif [ -x /etc/rw/rc.tweak ]thenexec /etc/rw/rc.tweakfiexit 0#
Ep… vemos que le esta diciendo a nuestro LinuxAP que vaya a leer en el sector “editable” de nuestro programa el doc rc.tweak y que, si existe, lo ejecute. Bien, perfecto. Ahora ya sabemos que podemos crear una especie de Autoexec.bat que nos ejecute todo aquello que, por los motivos que sean, nuestro LinuxAP no puede ejecutar en su arranque!!.Vamos pues a crear nuestro Autoexec.bat “particular”.Para hacerlo vamos a la parte editable de nuestro LinuxAP.
# cd# cd etc/rw
Y ahora abrimos un nuevo documento haciendo:
# vi rc.tweak
Ahora, para escribir cualquier cosa debemos de pulsar en primer lugar la tecla « i » (insertar)Y ahora le diremos al LinuxAP lo que queramos que nos ejecute. Como que hemos visto que al arrancar no nos ejecutaba ninguno de los parámetros “importantes” de nuestro LinuxAP deberemos de entrarle nuevamente las IP y los doc que queramos que nos ejecute:
#!/bin/ashifconfig eth0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 upifconfig wlan0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 upudhcpd /etc/rw/udhcpd.conf#
Es decir, le decimos que nos cree la ethernet con la IP 10.0.1.1, máscara 255.255.255.0, broadcast a 10.0.1.255 y que nos la “levante” .Hacemos lo mismo con la wlan con 192.168.0.1, máscara 255.255.255.0, broadcast a 192.168.0.255 y que también la active.Y, finalmente que nos active el servidor DHCP y que vaya a leer la configuración al doc etc/rw/udhcpd.conf.Ahora, para guardar nuestro rc.tweak le decimos:
:w rc.tweak
Y salimos del doc con:
:q
Ahora le damos los permisos necesarios para que nuestro LinuxAP pueda leerlo haciendo:
# chmod 755 rc.tweak
Y, finalmente guardamos los cambios que hemos hecho con:
# save_config
Ahora ya podemos reiniciar nuestro LinuxAP para que asuma la nueva configuración:
# reboot
Bien, ahora ya estamos en disposición de ver si lo hemos hecho todo bien Monitorizamos…y, efectivamente lo estamos viendo, pero bien, eso ya habíamos visto antes que funcionaba…. Vamos a ejecutar el Winipcfg o el WinDHCP en Windows o el programa correspondiente en Linux para ver si finalmente funciona.![]()
Perfecto…el DHCP ya funciona!!!
Efectivamente nuestro LinuxAP ya nos ha adjudicado la IP 192.168.0.2 “vía radio”, así como el gateway, servidor DNS etc….Vamos a ver ahora si realmente funciona también el túnel hacia la ethernet. Ahora conectamos un PC con un programa servidor, le configuramos al adaptador de red el TCP/IP la IP 10.0.1.25 con máscara 255.255.255.0, le conectamos el cable cruzado ethernet que por el otro extremo habremos conectado a nuestro LinuxAP y ahora vamos a probar de conectar desde nuestro navegador.
FUNCIONA!!!!... Otra vez lo hemos conseguido!!. Ya tenemos la primera piedra de nuestra red!