Guía rápida: Punto de Acceso Wireless 802.11b con OpenBSD

Juan J. Martínez

Agosto de 2003

Historial de revisiones
Revisión 1.0.220 de Abril de 2005
Revisión 1.0.120 de Septiembre de 2003
Revisión 1.025 de Agosto de 2003

En este documento se exponen los pasos a seguir para montar un punto de acceso para redes wireless empleando OpenBSD y un PC con una tarjeta de red WiFi® 802.11b capaz de actuar en modo master.

Este documento está basado en la web http://www.usebox.net/jjm/obsd-wifi/, mantenida por el mismo autor.


Tabla de contenidos
1. Introducción
1.1. Objetivos
1.2. Sobre OpenBSD
1.3. Contacto
1.4. Licencia
1.4.1. Notas legales
1.5. Agradecimientos
2. El hardware
3. El sofware
4. La configuración
4.1. La tarjeta de red
4.1.1. Sin configurar en la instalación
4.1.2. Añadiendo parámetros WLAN
4.2. El servidor DHCP
5. Sugerencias
A. Documentación adicional

1. Introducción

Los pasos para montar un punto de acceso (PA) para redes 802.11b con OpenBSD son muy sencillos, mucho más que en otros sistemas operativos.

En esta guía se describe el proceso a seguir, desde el hardware necesario hasta la configuración de los distintos elementos.

Aunque hay partes que son muy específicas de OpenBSD, muchas otras pueden ser interesantes para usuarios de otros sistemas *BSD o UNIX®.


1.1. Objetivos

El objetivo es montar un punto de acceso básico al que puedan conectar clientes, adquiriendo una IP proporcionada por DHCP. No se van a tratar temas más avanzados, como dar acceso a internet o configurar un bidge o gateway, aunque realmente no sea muy complicado.

La principal razón es que en esta guía rápida se quiere dar una visión general de lo sencillo que es obtener un PA con OpenBSD, de forma que en unos minutos se pueda conseguir un nodo totalmente operativo.


1.2. Sobre OpenBSD

OpenBSD es, como dice su web oficial, el sistema libre, funcional y seguro.

Se trata de un sistema tipo Libre UNIX descendiente del BSD UNIX de Berkeley (4.4BSD) que ha evolucionado para convertirse en uno de los sistemas UNIX más seguros de la actualidad gracias al trabajo de una serie de voluntarios de todo el mundo.

Las claves de OpenBSD son: portabilidad, cumplimiento de normas y regulaciones, corrección del código, seguridad proactiva y criptografía integrada.

La versión empleada como referencia para esta guía es OpenBSD 3.3-RELEASE del 1 Mayo de 2003 [1] .


1.3. Contacto

Cualquier comentario sobre este documento será bien recibido, incluyendo sugerencias para su mejora o correcciones a posibles errores.

Puede ponerse en contacto con el autor vía correo electrónico en la siguiente dirección: Juan J. Martínez <jjm *at* usebox.net>.


1.4. Licencia

Copyright © 2003,2005 Juan J. Martínez. Todos los derechos reservados.

Se permite la copia textual y distribución de este documento en su totalidad, por cualquier medio, siempre y cuando se mantenga esta nota de copyright.


1.4.1. Notas legales

UNIX® es una marca registrada por The Open Group en EE.UU. y otros paises.

WiFi® es una marca registrada por the Wi-Fi Alliance.


1.5. Agradecimientos

Gracias a los desarrolladores de OpenBSD y a todos los que hacen posible que disfrutemos de este magnífico sistema operativo.

Gracias a Sonia por dejarme tiempo para escribir este documento, y por otras muchas cosas.


2. El hardware

Para montar un punto de acceso no son necesarias máquinas potentes ni de última generación. Basicamente tendremos que asegurarnos que se cumplan los requisitos mínimos para hacer funcionar la tarjeta de red (ciertos modelos requieren de PCI 2.0 en la placa) y el sistema operativo.

En este caso disponemos del siguiente PC:

El elemento más complicado de encontrar va a ser la tarjeta Wireless, que debe permitir el funcionamiento en modo master.

La lista de tarjetas soportadas por cualquier versión de OpenBSD se puede encontrar en la página del manual de wi(4), ural(4), rtw(4), rln(4), ray(4), ral(4), iwi(4), ipw(4), awi(4), atw(4), atu(4), ath(4) y an(4). No obstante, encontrar una tarjeta compatible resulta más complicado que consultar esta lista.

Para empezar es poco frecuente que los fabricantes den soporte para los sistemas *BSD (o GNU/Linux), con lo que no sabremos si la tarjeta que estamos consultando funciona en nuestro sistema. Por lo tanto tendremos que ser nosotros por nuestra cuenta los que averigüemos si es compatible.

Además nos encontraremos con fabricantes que dan poca o ninguna información acerca de las especificaciones técnicas de su producto (comerciales sí las hay, pero no suelen aportar nada interesante), así que a veces resulta difícil decidirse a comprar una tarjeta.

La mejor opción es buscar información sobre el chip de la tarjeta.

Habrá que consultar las páginas del manual buscando el chip que posee la tarjeta para asegurarnos la compatibilidad, y además tendremos que verificar que es posible hacerla funcionar en modo master para que se pueda emplear en un punto de acceso.

En primer lugar buscaremos información en la web del fabricante sobre el chip que emplea la tarjeta, porque algunas veces estos datos están disponibles y nos pueden ahorrar mucho tiempo.

Si el fabricante no da las especificaciones, el siguiente paso es buscar en internet en los distintos foros o listas de correo si alguien tiene alguna experiencia con esa tarjeta. Es habitual que las comunidades wireless mantengan listados con las tarjetas que usan o sobre las cuales tienen información. Si encontramos alguna referencia de que funciona o no, o simplemente sobre el chip que emplea, ya habremos concluido nuestra búsqueda.

Desde mi experiencia puedo decir que me he encontrado con tres fabricantes (D-Link, Connection n&c y Ovislink) vendiendo exactamente la misma tarjeta (Intersil PRISM2.5 Mini-PCI WLAN, según el driver wi(4)), y ninguno de ellos decía claramente que tarjeta ofrecía (aunque uno sí citaba en su web que el chip era Intersil, y otro admitía compatibilidad con Linux sin más explicaciones).

Y por último, un consejo: hay que asegurarse que el hardware que adquirimos es el que creemos que es. No sería la primera vez (ni será la última) que alguien adquiere una tarjeta foo+ pensando que es una foo y luego descubre que el chip que lleva no está soportado por su sistema.


3. El sofware

Todo el software necesario viene en la instalación base de OpenBSD (en este caso 3.3-RELEASE o posterior).

En algunos casos puede que queramos prescindir de algunos sets como el de game33.tgz o, en caso de que no pensemos compilar nunca nada, comp33.tgz [2] . Esto último puede tener mucho sentido, ya que en una máquina vieja es conveniente instalar los paquetes binarios ya compilados. Las páginas de manual recomiendo instalarlas, aunque podemos prescindir de ellas.

No es necesario compilar el kernel, ya que todo el hardware está soportado en GENERIC, el kernel que acompaña a la instalación. No obstante puede ser necesario recompilar el kernel o simplemente configurar algún parámetro de GENERIC, como una tarjeta de red ISA con un IRQ poco habitual. En tal caso recomiendo la lectura de las entradas al respecto del FAQ oficial de OpenBSD.

La disposición del disco depende del uso que se vaya a dar al nodo.

La configuración que se describe en este documento es similar a la que nos podemos encontrar en un router o en un firewall: no se va a necesitar apenas disco más allá de la instalación. Nuestras necesidades de almacenamiento se limitan a los logs que se guardan en /var.

En el caso de que queramos dar servicios locales extra en el nodo (HTTP, FTP, etc.), repartiremos el disco como si se tratara de un proveedor de servicios normal en internet, pero con un tráfico reducido.


4. La configuración

La configuración de punto de acceso pasa por dar ciertos parámetros a la tarjeta de red y poner en marcha el demonio dhcpd(8) que acompaña a la instalación base de OpenBSD.

Hay una serie de valores que serán variables en cada instalación. Los definimos a continuación:

En cada instalación se reemplazarán estas variables por su valor.


4.1. La tarjeta de red

La tarjeta de red puede configurarse en la instalación como una tarjeta de red normal, con lo que posteriormente tendremos que añadir parámetros extra por ser una tarjeta WLAN.


4.1.1. Sin configurar en la instalación

Si no hemos configurado los parámetros básicos de la tarjeta durante la instalación del sistema, tendremos que realizar nosotros a mano los pasos que habría hecho el programa de instalación.

En primer lugar averiguamos el nombre que tiene nuestro interface wireless mediante el uso de dmesg(8). Habitualmente será wi0 si solo disponemos de una tajeta WLAN.

Creamos en /etc un fichero llamado hostname.IF, siendo IF el nombre de nuestra intreface WLAN (normalmente será hostname.wi0), con el siguiente contenido:

inet $IP $MASK NONE

Y con esto nos encontramos en el mismo punto en el que estaríamos si hubieramos configurado el interface en la instalación.

En el siguiente apartado veremos como introducir los parámetros propios de las tarjetas wireless.


4.1.2. Añadiendo parámetros WLAN

Suponiendo que el interface de nuestra tarjeta es wi0, editamos /etc/hostname.wi0, que debe contener:

inet $IP $MASK NONE

Ahora vamos a añadir los parámetros especiales de la tarjeta wireless, que son: el SSID y la configuración del modo de funcionamiento.

Editamos el fichero y lo dejamos como sigue:

inet $IP $MASK NONE nwid $SSID mediaopt hostap

El resto de parámetros de la tarjeta se deben configurar con wicontrol(8). Para ello aprovechamos que toda linea que comience por ! en el fichero de configuración se tratará como una orden a ejecutar.

Con las llamadas a wicontrol(8), el fichero queda así:

inet $IP $MASK NONE nwid $SSID mediaopt hostap
!wicontrol -t $CHAN
!wicontrol -s "$NAME"
!wicontrol -t $TX

Ahora solo quedaría reiniciar el sistema para comprobar que los cambios en la configuración son correctos. Para ello ejecutaremos ifconfig(8) y wicontrol(8) y obtendremos algo así:

# ifconfig wi0
wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:90:4b:23:89:8a
	nwid elxwifi
	powersave off
	media: IEEE802.11 DS1 hostap
	status: active
	inet 10.1.1.21 netmask 0xffffff00 broadcast 10.1.1.255
	inet6 fe80::290:4bff:fe23:898a%wi0 prefixlen 64 scopeid 0x1

# wicontrol wi0
NIC serial number:                      [ 99SA01000000 ]
Station name:                           [ blackshell ]
SSID for IBSS creation:                 [ elxwifi ]
Current netname (SSID):                 [ elxwifi ]
Desired netname (SSID):                 [ elxwifi ]
Current BSSID:                          [ 00:90:4b:23:89:8a ]
Channel list:                           [ 8191 ]
IBSS channel:                           [ 10 ]
Current channel:                        [ 10 ]
Comms quality/signal/noise:             [ 0 81 27 ]
Promiscuous mode:                       [ Off ]
Process 802.11b Frame:                  [ Off ]
Port type (1=BSS, 3=ad-hoc, 6=Host AP): [ 6 ]
MAC address:                            [ 00:90:4b:23:89:8a ]
TX rate (selection):                    [ 1 ]
TX rate (actual speed):                 [ 2 ]
Maximum data length:                    [ 2304 ]
RTS/CTS handshake threshold:            [ 2347 ]
Create IBSS:                            [ Off ]
Antenna diversity (0=auto,1=pri,2=aux): [ ]
Microwave oven robustness:              [ On ]
Roaming mode(1=firm,3=disable):         [ 1 ]
Access point density:                   [ 1 ]
Power Management:                       [ Off ]
Max sleep time:                         [ 100 ]
Intersil Prism2-based card:             [ 1 ]
Card info:                              [ PRISM2.5 ISL3874A(Mini-PCI), Firmware 1.3.6 ]
Encryption:                             [ Off ]
Encryption algorithm:                   [ Firmware WEP ]
Authentication type
(1=OpenSys, 2=Shared Key):              [ 1 ]
TX encryption key:                      [ 1 ]
Encryption keys:                        [  ][  ][  ][  ]

En el ejemplo $IP=10.1.1.21, $NET=10.1.1.0, $MASK=255.255.255.0, $SSID=elxwifi, $CHAN=10, $NAME=blackshell y $TX=1.

Como se puede apreciar en la última parte de la salida de wicontrol(8) no hemos activado el cifrado WEP.

A este respecto quiero comentar que es mejor emplear WEP que no hacerlo, aunque se ha demostrado es un método de cifrado vulnerable y puede dar una sensación de falsa seguridad, tampoco se puede decir que sea trivial romperlo y al menos nos asegurará estar a salvo de miradas indiscretas de usuarios con pocos conocimientos.


4.2. El servidor DHCP

La configuración que necesita un PA para el servidor DHCP es muy sencilla.

En primero lugar preparamos el sistema para arrancar el demonio dhcpd(8).

Para que el servidor arranque es necesario que exista el fichero /var/db/dhcpd.leases. Para ello podemos ejecutar:

# touch /var/db/dhcpd.leases
En ese fichero podremos consultar las IPs que se han asignado una vez el demonio esté funcionando.

Editamos /etc/rc.conf poniendo en el campo dhcpd_flags el valor "-q" (incluyendo las comillas).

Por último hay que indicar en /etc/dhcpd.interfaces los nombres de las interfaces que tendrá que gestionar el servidor DHCP. Si nuestra tarjeta wireless es wi0, ejecutaremos:

# echo wi0 > /etc/dhcpd.interfaces

En este punto el sistema está listo para correr el demonio dhcpd en el siguiente arranque. Ahora resta introducir la configuración de dhcpd en /etc/dhcpd.conf:

subnet $NET netmask $MASK {
	range $IP0 $IP1;
}
Donde $IP0 es la IP mínima del intervalo de IPs a repartir y $IP1 es la IP máxima de ese mismo intervalo. Por ejemplo, para $IP=10.1.1.21, $NET=10.1.1.0 y $MASK=255.255.255.0, podríamos tener:

subnet 10.1.1.0 netmask 255.255.255.0 {
	range 10.1.1.22 10.1.1.30;
}
Y eso repartiría las IPs desde la 10.1.1.22 a las 10.1.1.30, ambas incluidas.

Es importante destacar que $IP (10.1.1.21 en el ejemplo) nunca debe estar en el intervalo definido en range porque es la propia IP del punto de acceso y no debe asignarse.

Esta configuración es tremendamente sencilla y probablemente queramos ajustar un poco más el comportamiento del servidor DHCP. Para ello es aconsejable consultar la página del manual de dhcp-options(5).


5. Sugerencias

Si nos quedáramos aquí tendriamos ante nosotros un punto de acceso bastante caro.

Es posible conseguir un punto de acceso comercial con la misma funcionalidad casi por la mitad de lo que puede costar un ordenador viejo de segunda mano más una tarjeta wireless, a no ser que dispongamos de una máquina cogiendo polvo a la que queramos dar utilidad.

En cualquier caso las posibilidades de un punto de acceso de estas características son muy superiores a las de un punto de acceso comercial.

Añadiendo una tarjeta de red ethernet podemos emplear el nodo como puerta de enlace entre la red wireless y una red local o internet. Con el poder de Packet Filter en nuestras manos disponemos de un punto de acceso que además es un excelente router/firewall en el que podemos adminstrar el tráfico de la forma que más nos convenga. Pocos puntos de acceso comerciales nos van a proporcionar la versatilidad de PF, con lo que ya se empezaría a amortizar nuestro PA.

De la misma forma podemos incorporar al nodo cualquiera de los servicios de los que un sistema UNIX puede disponer: HTTP, FTP, SQUID, IRC, VPN, etc., funcionalidades que quedan ya lejos de lo que un punto de acceso comercial puede ofrecer.

Por lo tanto animo al lector a explotar estas posibilidades, ya que nuestro PA con OpenBSD es mucho más que un HUB para redes wireless, aunque quede fuera del ámbito de está guía rápida.


A. Documentación adicional

Es recomendable consultar las páginas del manual de:

hostname.if(5), ifconfig(8), wicontrol(8), dhcpd(8), dhcp-options(5), dhcpd.conf(5) y dhcpd.leases(5).

Bibliografía recomendada:

Recursos en internet:

Notas

[1]

Se han actualizado las secciones pertinentes a la versión 3.7 del sistema operativo.

[2]

Los sets llevan el número de la versión incluido. Si estamos trabajando con OpenBSD 3.7, hablaríamos de game37.tgz, por ejemplo.