1 de Abril, 2005

Añadir un nuevo nodo a una red inalámbrica metropolitana

Voy a intentar explicar como se podría plantear un nuevo nodo a la red elxwifi empleando el sistema operativo OpenBSD. Tampoco me apetece escribir un tutorial propiamente dicho, sino completar un poco la guía rápida para un punto de acceso que escribí hace ya un tiempo.

En dicho documento se explica como crear un punto de acceso (AP) con OpenBSD, más un servicio básico de DHCP. Se describe todo paso a paso y creo que es aún vigente pese a referirse a la versión 3.3 del sistema operativo. No obstante es un punto de acceso aislado, y no lo que entenderíamos como nodo de una red metropolitana (MAN) como la de Elche Wireless.

Pero si ese nodo permaneciera aislado, no formaría parte de la red. En realidad no tendríamos red, solo una serie de puntos de acceso con sus correspondientes clientes, pero sin relacionarse entre ellos.

Esto suele chocar con el sentido común que nos lleva a concebir las redes inalámbricas de otra forma más lógica, pero que la tecnología no nos permite conseguir (quizás el futuro 802.11s sea la solución). Así que si nos quedáramos ahí, es decir, si solo quisieramos actuar como punto de acceso, lo descrito en la guía sería más que suficiente. Mediante DHCP configuraríamos los parámetros de red de las estaciones cliente que se asociaran al AP, y ya podrían interactuar entre ellos y con el punto de acceso. Ahora vamos a hacer que formen parte de la MAN conocida como elxwifi.

Primero vamos a describir un poco la parte más mundana, referente a los niveles físico y enlace. Me sorprendo a mi mismo refiriéndome al modelo de referencia OSI, pero si no lo hago en un caso de estos puede que no lo haga nunca :D. Se trata de las tarjetas de red, antenas y demás, y al protocolo 802.11b (el usado en elxwifi, aunque lo dicho aquí se puede aplicar a los 802.11a y 802.11g).

Hasta este momento contamos con una tarjeta inalámbrica capaz de funcionar en modo master, es decir, trabajar como punto de acceso (no todos los chips pueden hacerlo, ojo). Esa tarjeta se conectará mediante un pigtail a una antena externa ominidireccional (cobertura de 368º, para cubrir la máxima extensión posible y facilitar la asociación de estaciones cliente).

Un AP aislado
Un punto de acceso aislado

La modificación a este nodo será sencilla: añadir una nueva tarjeta inalámbrica con una antena direccional. Esta tarjeta no tiene requerimientos especiales ya que funcionará en modo infraestructura como cliente de otro punto de acceso.

El motivo de emplear una antena direccional es porque normalmente los nodos suelen estar bastante alejados unos de otros. Cuando un cliente se asocia a nuestro punto de acceso, siempre se seleccionará la máxima velocidad posible. Hay que intentar que esa sea la tasa limitadora, y no la de la conexión de nuestro punto de acceso al resto de la red elxwifi. Para eso hay que asegurarnos un buen enlace, por lo que una antena direccional es muy conveniente.

Un AP enlazado a otro
Un punto de acceso conectado a otro

En este ejemplo el punto de acceso azul que se encontraba aislado del resto de la MAN, pasa a estar conectado gracias a que con la tarjeta extra pasa a ser un cliente más del punto de acceso rojo (que a su vez hará lo propio con otro AP hasta que todos los nodos de la MAN sean accesibles).

Este es el método que emplean los nodos club radio, scuba y truck para enlazarse. Tengo una imagen de la topología de elxwifi algo anticuada, pero que permite ver el resultado. No se emplea la misma simbología, pero es comprensible (las antenas direccionales empleadas son de panel, y así aparecen referenciadas en el diagrama).

Con esto tenemos los niveles físico y de enlace cubiertos. Nuesto punto de acceso recoge clientes y a su vez es cliente de otro punto de acceso que le comunica con el resto de la red metropolitana. Ahora vamos a atender al nivel de red, con el que la mayoría estamos más familiarizados.

Vamos a suponer la disposición de scuba, que no es la más simple porque cuenta con acceso a dos APs distintos pero nos dará algo de juego. Tenemos las siguientes subredes, una por AP:

  • scuba: 10.1.2.0/24
  • club radio: 10.1.1.0/24
  • truck: 10.1.3.0/24

Para no complicarnos la vida hemos elegido una subred con máscara de tipo C para cada punto de acceso. Si alguien no se aclara, ya expliqué la notación de las máscaras.

Cada punto de acceso cuenta con su propia subred. Mediante DHCP se asignarán direcciones IP de ese rango a sus estaciones cliente, dejando preferiblemente reservadas las direcciones más altas para otros APs actuando como clientes (no necesitan DHCP). No hay mucha diferencia con la situación que se daba cuando el punto de acceso estaba aislado.

Ahora nuesto punto de acceso va a actuar como enrutador, así que tendremos que verificar que el forwarding está activado (mirando en /etc/sysctl.conf).

scuba tiene un cliente especial con dirección 10.1.2.254 que es club radio, y a su vez tiene una tarjeta de red con dirección 10.1.3.254 que es cliente de truck. En la imagen de la topología de elxwifi se puede ver con claridad.

Pues bien, con route(8) añadiremos las rutas necesarias por cada fichero de configuración de interfaz de red (se podría meter todo en /etc/rc.local, pero un poco de estilo no hace mal a nadie :P). Supongamos wi0 para 10.1.2.1 (la tarjeta en modo master) y atw0 para 10.1.3.254 (la tarjeta cliente).

En /etc/hostname.wi0:

inet 10.1.2.1 255.255.255.0 NONE nwid elxwifi
!route add -net 10.1.1.0/24 10.1.2.254

Indicamos que para la subred de club radio se deben enviar los paquetes a la dirección del cliente de ese AP. En /etc/hostname.atw0 no habría que poner nada especial ya que el propio sistema pondrá las rutas correspondientes al levantar el interfaz, y solo tendríamos que añadir rutas a otras subredes accesibles por esa tarjeta: por ejemplo el inminente nodo centro que enlazará con truck (10.1.4.0/24):

inet 10.1.3.254 255.255.255.0 NONE nwid elxwifi
!route add -net 10.1.4.0/24 10.1.3.254

Tampoco es nada especial, solo poner las rutas necesarias. Si queremos mandar un paquete a 10.1.4.150, por ejemplo, scuba se lo pasará a truck, que ya sabrá que hacer con el ;).

Finalmente haremos que el servidor DHCP indique a los clientes que la puerta por defecto es 10.1.2.1 (esto es scuba, el enrutador que sabe por donde enviar los paquetes) y listo.

Nuestra topología no tiene mayor problema porque no contamos con bucles. Si se diera ese caso, muy raro porque sería malgastar recursos pese a mejorar en disponibilidad, se debería emplear un protocolo de enrutado dinámico como RIP u OSPF, pero eso ya es otra historia.

Y con esto estaría todo, ya tendríamos a nuestro punto de acceso formando parte activa de la red elxwifi. Solo me falta mencionar que existen otras posibilidades para hacer lo mismo, como emplear WDS (lo estamos desechando poco a poco por los problemas que da) o tener un backbone exclusivo para los puntos de acceso, siendo el método descrito una posibilidad intermedia en costes y rendimientos.

Anotación por Juan J. Martínez.

Hay 2 comentarios

Gravatar

Como siempre :). Ahora tendremos muchos menos problemas para montar el primer nodo (http://lucux.enlugo.com/?q=node/22 ) de Lucux. Si ya estabas, en general, dentro de mis bookmarks, marco esta anotación en especial ;).

por r0sk, en 2005-04-01 11:56:39

Gravatar

Saludos..
Hoy despues de varias semanas sin estar conectado a internet.. ( devido a problemas de proveedor ) e visitado el blog y me encuentro con ese GENIAL articulo que para mi pensar sera una muy buena guia en el proyecto que tengo con unos amigos de montar una red wifi entre nosotros para adentrarnos a esta tecnologia.

Espero seguir viendo mas comentarios sobre wireless ya que la necesitamos mucho por aca devido al poco uso domestico que tiene esta tecnologia en mi pais.( Republica Dominicana )

por `ariel, en 2005-04-01 19:29:51

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.