USR2450 con LinuxAP, configuración como PA+Router (Runlevel 4)


Nota: Este documento esta "inspirado" ;) en el trabajo de Querubain de www.zaragozawireless.org y Pere Espunya de www.olotwireless.net cuyos documentos me han sido de gran ayuda para iniciarme en el toqueteo de este querido bichito que es el USR2450 (Que quieres, tanto roce acaba en cariño ;)

Y gracias también a la gente de la lista de correo de LinuxAP en www.redlibre.net por el fantástico cable que me han echado, y a la lista de mi comunidad wireless aquí en Vitoria, www.anuestroaire.net que también han apoyado lo suyo, Saluditos y gracias a tos!

Intro:

Este documento es aplicable, al menos, a la versión Viernes 13-9-2002 de LinuxAP. Partimos de la base de que el Runlevel 4 no funciona correctamente aun... Según Keith E Smith, creador de LinuxAP, no esta testado, simplemente se ha "metido" ahí. Con algunos "retoques" se puede echar a andar. Eso es lo que vamos a describir aquí, además orientado a un ejemplo típico en una topología de red típicamente casera :)

Topología:

Supongamos que tenemos una LAN casera, que sale a Internet por un router mu majo :) y que de repente llega a nuestras vidas un PA USR2450 con LinuxAP y una tarjeta wireless para colocar en nuestro portátil o en ese equipo tan alejado del hub que no nos compensa tirar cable ;) La idea es crear una red wlan, con una rango de ips diferente al de nuestra lan, pero con conectividad a ella y al router adsl, para poder acceder a Internet desde la wlan. Un esquemita:

IPs de las máquinas:

Cada uno deberá ajustar, durante toda esta explicación, las direcciones ip que hemos elegido a las que tenga en su LAN. O puede cambiar las ips que tenga y poner estas, a gusto del consumidor ;)

Tenemos 2 redes diferentes, con dos rangos privados de ip diferentes:

LAN: 172.26.0.0/24, asignadas a mano o por un servidor DHCP en la LAN.
WLAN: 192.168.0.0/24, asignadas por DHCP por el USR2450 (conveniente)

En nuestro PA, una ip para cada interfaz:
Interfaz Ethernet: eth0: 172.26.0.10
Interfaz Wireless: wlan0: 192.168.0.10

Nuestro router adsl debe tener una ip del rango de la LAN:
Interfaz Ethernet del router: 172.26.0.1

Y el cliente WLAN recogerá la IP del servidor DHCP del PA en cuanto este arranque:
Interfaz wireless del cliente: 192.268.0.1

Las ip de los DNS necesarios para la resolución de nombres de Internet: (pueden ser los de tu proveedor u otros DNS de carácter publico)
DNS Primario 195.235.113.3        
DNS Secundario 195.235.96.90  

Configuración del bichito desde la consola:

  1. Con un cable null modem (Háztelo tu mismo) conectado al puerto RS-232 del PA, conectamos con un programa emulador de terminal (Linux: minicom, Windows:  hyperterminal) con la siguiente configuración: 4800 baudios, 8 bits, Paridad N, y 1 bit de parada.
     

  2. Ya dentro, iremos hasta /etc/rw que es donde encontraremos los ficheros de configuración:
    # cd /etc/rw
    # ls

    netcfg telnetd.hosts udhcpd.leases
    runlevel udhcpd.conf wlan0

     

  3. Cambiaremos el runlevel del PA al 4:
    # echo "4" > runlevel
     

  4. Crearemos un fichero para indicarle los servidores dns al PA (para resolución propia, así que es opcional):
    # echo "nameserver 195.235.113.3" > resolv.conf
    # echo "nameserver 195.235.96.90" >> resolv.conf

     

  5. Modificaremos el fichero de configuración del dhcpd, llamado udhcpd.conf, para habilitar el servidor, indicarle el rango de ips que tiene que servir, los dns para los clientes, y porque interfaz va a realizar la asignación: (lo que hay entre paréntesis son mis comentarios)

    # vi udhcpd.conf

    # udhcpd.conf enable               (poner enable para habilitar el dhcpd)
    start 192.168.0.1                     (Ip de comienzo del rango de ips para asignar)
    end 192.168.0.9                      (Ip final del rango de ips para asignar)
    interface wlan0                         (interfaz por el que hacer las asignaciones de ip)
    lease_file /etc/rw/udhcpd.leases (fichero en el que guarda datos sobre las asignaciones)
    option dns 195.235.113.3         (DNS primario que va a asignar al cliente)
    option dns 195.235.96.90         (DNS secundario que va a asignar al cliente)
    option subnet 255.255.255.0     (Mascara)
    option router 192.168.0.10        (Puerta de enlace predeterminada para los clientes)
    option domain test                     (Nombre de dominio, he puesto test como podía haber puesto prueba :)
    option lease 86400                    (Tiempo durante el que se va a ceder la ip, viene así por defecto)
     

  6. Modificaremos el fichero wlan0 (interfaz inalámbrico) a nuestro gusto:

    # vi wlan0

    #
    # wlan0
    #
    SSID=test  
                   (Cada uno lo que quiera, para los nodos cada comunidad tiene un SSID)
    # S/B one of 1,6,11
    CHANNEL=11 
           (Algunos PA están capados a usar solo este canal, pero se puede descapar)
    wep=                         (Clave de encriptacion wep... Mejor no poner nada... pa lo que vale... XDDD Algoritmo crackeado)
    # Only for RL/3
    NWDS=0     
                (No aplicable en Runlevel 4)
     

  7. Modificaremos el fichero telnetd.hosts para indicarle desde que ips se podrá hacer telnet al PA:

    # vi telnetd.hosts

    172.26.0.           (Yo lo he limitado a maquinas dentro de mi LAN)
     

  8. Ahora revisaremos el fichero netcfg, de donde se deberían leer todos los parámetros de red de ambos interfaces del PA y algún que otro dato mas, pero que por un bug, en el runlevel 4 no funciona correctamente. Lo rellenaremos de todos modos por si acaso la compilación que tiene nuestro PA si lo usa...

    # vi netcfg

    #
    # netcfg
    #

    # Primary Interface (RL2/wlan0, RL3/br0, RL4/eth0)
           (Este bloque corresponde a los datos del interfaz eth0)
    # Need first 3 if not dhcp
    # p_dhcp should be either enabled or disabled

    p_dhcp=disabled                                    (No queremos que nos asignen por dhcp la ip de este interfaz)
    p_address=172.26.0.10                         (IP que asignamos al interfaz) 
    p_netmask=255.255.255.0                    (Mascara)
    p_broadcast=172.26.0.255                    (Direccion de broadcast)

    # Secondary Interface (RL2/eth0, RL4/wlan0)                 (Este bloque corresponde a los datos del interfaz wlan0)
    # Ignored at RL3
    s_dhcp=disabled                                    (No queremos que nos asignen por dhcp la ip de este interfaz)
    s_address=192.168.0.10                       (IP que asignamos al interfaz) 
    s_netmask=255.255.255.0                    (Mascara)
    s_broadcast=192.168.0.255                  (Direccion de broadcast)

    # These should pull from dhcp ...         (este bloque no nos hace falta, además da errores al arrancar si rellenas el router con una ip)
    router=
    tftphost=
    logaddr=


    # Network Swapping                                                             (De este bloque dejar todo como esta)
    swaphost=
    swapport=4401


    # Masqerading support ... Masquerade this network            (Para hacer Enmascaramiento/NAT)
    # ex: 10.1.0.0/27
    # Will Masquerade 10.1.0.0-10.1.0.31
    # This assumes you've set up eth0 appropriately
    # elsewhere
    masq_net=192.168.0.0/24
                                                        (Rango de red a enmascarar, la wlan)
     

  9. Despues de visto todo esto, vamos a crear un fichero que se va a ejecutar al arranque, y que configurará todo lo que no configura automáticamente el runlevel 4 desde el netcfg. El fichero debe llamarse rc.tweak, y deberemos meterle lo siguiente:

    #vi rc.tweak

    #!/bin/ash
    ifconfig eth0 172.26.0.10 netmask 255.255.255.0 broadcast 172.26.0.255 up
                   (Datos de red del interfaz eth0)
    ifconfig wlan0 192.168.0.10 netmask 255.255.255.0 broadcast 192.168.0.255 up          (Datos de red del interfaz wlan0) 
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT      (NAT y enmascaramiento)
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQUERADE     (NAT y enmascaramiento)
    route add default gw 172.26.0.1                                                                                        (Se le indica el gateway por defecto al PA)
    udhcpd /etc/rw/udhcpd.conf                                                                                               (Le decimos al udhcpd donde esta el fichero de configuración)
     

  10. Le damos los permisos necesarios al fichero, salvamos la configuración y rebotamos:

    #chmod 755 rc.tweak
    #save_config


    Committing : netcfg
    rc.tweak
    resolv.conf
    runlevel
    telnetd.hosts
    udhcpd.conf
    udhcpd.leases
    wlan0
    MTD start erase.......
    bla bla bla bla bla 1 huevo de lineas ;)....
    MTD finish erase
    1+1 records in
    1+1 records out
    Done.


    #reboot

    The system is gHangup
    tcsetpgrp failed, errno=25

    Please stand by while rebooting the system.
    Restarting system.

     

  11. Si todo ha salido bien, veremos el arranque ya en runlevel 4 en la consola (esta resumido):

    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 4
    (Que mono y que majooo! ;)
    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 Communications Security Corp, Jouni 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:
    udhcp server (v0.9.7) started
    99.done:

    Startup Complete!

    Please press Enter to activate this console.
     

  12. Como podéis ver, las ultimas líneas son los scripts que son llamados desde el runlevel 4, pero no se ejecuta nada por cada script, tan solo se arranca el servidor udhcp gracias a nuestro fichero rc.tweak:

    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:
    udhcp server (v0.9.7) started
    99.done:
     

  13. Esto no se si es estrictamente necesario, pero en el router adsl creé una ruta estática hacia la Wlan, poniéndole como gateway la ip del interfaz eth0 del PA (172.26.0.10) A mi me funciona!
     

  14. Sobra decir que los clientes Wlan deberán estar configurados para obtener automáticamente tanto una dirección ip como la dirección del servidor DNS, todo ello por DHCP.
     

  15. Y eso es todo lo que nos hace falta por el momento para echar a andar! Habria que pulirlo un poco mas pero es una buena base para empezar a funcionar. ¡¡No dejes de leer el siguiente punto, son consideraciones importantes!!
     

Seguridad del PA en este estado que lo hemos dejado:

  1. En esta configuración, damos por sentado que manejaremos el PA siempre por RS-232, si quisiéramos controlar el PA por telnet o con el interfaz web que incluye, deberíamos levantar los servicios correspondientes (telnetd y httpd) desde el rc.tweak. En mi caso, por seguridad y hasta que estudie mejor como securizar los accesos telnet y http al "bicho", lo dejare tal como esta, con los servicios telnet y http parados.
     

  2. Tampoco hemos entrado en canción con la configuración del firewall (iptables), las reglas por defecto en el PA son las de aceptar todo trafico desde y hacia cualquier destino!! Tenlo MUY en cuenta antes de poner el PA como nodo de una red wireless urbana, y pon unas reglas a ese firewall echando virutillas, si no quieres que te entren hasta la cocina, que luego no haya sorpresas...
     

Y creo que no se me ha escapado nada! Con todo esto deberíamos ser capaces de hacer ping entre todas las maquinas de ambas redes (Lan y Wlan) y navegar por Internet desde la Wlan (Si antes tenias acceso a Internet desde la Lan, pues también, eso sigue igual ;)

Autor: Oscar G Tropic:  www.anuestroaire.net
                                      http://tropic.portalvasco.com