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 4
y , otra vez:
# ls
Vemos:
10.1.wlan0      10.5.cipe       11.0.netswap    17.0.httpd      98.tweak
10.2.primary    10.8.secondary  15.0.tcpsrv     18.0.telnetd    99.done
10.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/Router
Vamos a ver, por ejemplo, que nos dice el 16.0.dhcpd
# cat 16.0.dhcpd
#!/bin/sh        
#
# dhcpd      
#
if [ ! -f /etc/rw/udhcpd.conf ]                              
then   
    echo "No udhcpd configuration aborting script"                                                  
    exit 0         
fi 
if grep "udhcpd.conf disable" /etc/rw/udhcpd.conf
then
    echo "udhcpd disabled"
    exit 0
fi
LF=/etc/rw/udhcpd.leases
case "$1" in
start|2)
    if [ ! -f $LF ]
    then
        touch $LF
    fi
    udhcpd /etc/rw/udhcpd.conf
    ;;
stop|0|1|6)
    killall udhcpd
    sleep 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 enable
start           192.168.0.2
end             192.168.0.27
interface       wlan0
lease_file      /etc/rw/udhcpd.leases
option  dns     10.0.1.25
option  subnet  255.255.255.0
option  router  10.0.1.1
option  domain  olotwireless.net
option  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/sh
if [ -x /etc/rw/rc.tweak ]
then
    exec /etc/rw/rc.tweak
fi
exit 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/ash
ifconfig eth0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 up
ifconfig wlan0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up
udhcpd /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!