sábado, noviembre 18, 2006

Manage bandwidth in Apache for web hosting

I am having problems with my Apache Server and I am trying to tune the
performance of Apache 2. It seems that there are not enough Apache
processes to handle all requests and I am changing some parameters to
check whether this solves this problem.

In the meantime, you always come across with interesting information,
which does not solve your problem, but It could be interesting in the
future.

I found an apache module to handle the bandwidth of an specific virtual
host, this way you can divide your bandwidth of your connection among
all your customers.

Herewith you can find a nice howto:

http://www.howtoforge.com/mod_cband_apache2_bandwidth_quota_throttling

jueves, noviembre 02, 2006

Montar un Punto de Acceso Barato Wireless 802.11g en Linux con Madwifi

Uno de mis principales objetivos de la infraestructura que intento montar en mi red casera es desplegar un punto de acceso para poder conectarme a Internet desde mi salón :) (lo se, soy un poco vago). Dos son las principales ventajas de esta tarjeta inalambrica. La primera, la que se menciona en el titulo, y es que es bastante barata, y la segunda es que es una tarjeta 802.11g. La mayoría de los artículos o páginas que he encontrado se referían a puntos de acceso 802.11b. La ventaja que añade el uso de esta tarjeta es que funciona con el driver madwifi, que utiliza una interesante característica que se llama VAPs o Virtual Access Points. La ventaja es que puedes crear varios interfaces virtuales, en diferentes modos, de tal manera que puedes tener diferentes interfaces de red, p.ej.: un interfaz en la que te puedas conectar sin clave, otra interfaz cifrada con WEP o WPA/2 o incluso crear una interfaz en modo infraestructura (managed) o bridge y conectarlo con otro Punto de Acceso (lo cual puede ser interesante para edificios grandes o para comunidades Wireless).

Aunque la interfaz wireless del portatil Dell 600 que tengo, es una Intel 2100 y por tanto 802.11b, quería montar un punto de acceso G (y que es compatible hacía atrás con B). Hice una busqueda por Internet y descubrí el driver madwifi y su soporte al chip Atheros. Otro requisito que me marqué fue que la tarjeta fuera PCI y no PCMCIA y no tener que gastar mas dinero en un adaptador PCI para PCMCIA. Después de buscar encontré la tarjeta SMCWPCI que tiene un chipset Atheros y que me costó cerca de 20 euros. Compré primero la tarjeta de 54 Mbps (se puede ver en la imagen debajo), y como todo fue bien, compré una tarjeta más para otro punto de acceso para mi familia y una tarjeta con mayor ganancia (5 dBi) que la que antena que venía con la tarjeta que tenia sólo 2 dBi. La diferencia fue, que la señal podía atravesar dos pareces y llegar a misalón :)

La primera tarjeta que compré era de 54 Mbps, y funcionaba perfectamente en un Pentium MMX con 128 Mb con una RedHat 7.3.En el punto limpio de mi ciudad encontré varios PCs, y descubrí que alguien dejo un AMD XP 1800 y un AMD 1000, los cuales los he convertido en PCs de sobremesa. Tenía varios PCs antiguos, Pentium II y III, así que decidí convertir los Pentium II en mis routers y puntos de acceso Wifi e intentar hacer cosas más sofisticadas como utilizar OpenVPN, que demandan mas CPU. Cuando compré la tarjeta extra para el otro router para mi familia, no me di cuenta de que era realmente una tarjeta de 108 Mbps. Asumir que era una tarjeta 54 Mbps me dió algunos dolores de cabeza, pero al final conseguí hacerla funcionar.El driver como ya he comentado es madwifi (http://madwifi.org).

Seguir las instrucciones fue bastante fácil. Inicialmente en el primer router que tenía un Pentium MMX con una RedHat recompile el kernel 2.4.x y funcionó perfectamente. Pero como he migrado mis servidores a Debian, decidí utilizar las instrucciones para Debian dadas en la web de madwifi.

Para poder instalar el paquete Debian, tienes que añadir estas entradas en tu fichero sources.list (yo utilizo testing):

# Testing
deb http://ftp.au.debian.org/debian testing main contrib non-free
deb-src http://ftp.au.debian.org/debian testing main contrib non-free

y ejecutar:

$ su
# apt-get update
# apt-get install madwifi-source
# apt-get install madwifi-tools
# m-a prepare
# m-a a-i madwifi

Esto instala el driver, que se puede cargar utilizando modprobe:

# modprobe ath_pci

Y se obtiene algo así:

ath_hal: 0.9.16.16 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
wlan: 0.8.4.2 (svn 1451)
ath_rate_sample: 1.2 (svn 1451)
ath_pci: 0.9.4.5 (svn 1451)
ACPI: PCI Interrupt 0000:02:02.0[A] -> Link [LNKC] -> GSI 10 (level,
low) -> IRQ 10
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps
24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 5.6 phy 4.1 radio 1.7
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 5212: mem=0xd0000000, irq=10
ACPI: PCI Interrupt 0000:03:00.0[A] -> Link [LNKC] -> GSI 10 (level,
low) -> IRQ 10
wifi1: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi1: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps
24Mbps 36Mbps 48Mbps 54Mbps
wifi1: turboG rates: 6Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi1: H/W encryption support: WEP AES AES_CCM TKIP
wifi1: mac 7.9 phy 4.5 radio 5.6
wifi1: Use hw queue 1 for WME_AC_BE traffic
wifi1: Use hw queue 0 for WME_AC_BK traffic
wifi1: Use hw queue 2 for WME_AC_VI traffic
wifi1: Use hw queue 3 for WME_AC_VO traffic
wifi1: Use hw queue 8 for CAB traffic
wifi1: Use hw queue 9 for beacons
wifi1: Atheros 5212: mem=0xd2000000, irq=10

y solo hay que añadirlo a la lista de modulos:

# echo ath_pci >> /etc/modules

Después de esto, comienza la peor parte, que para mi fue hacerlo funcionar cuando el sistema arranca :)

La página de madwifi recomienda el uso de los scripts pre-up y post-up

Mi intención era configurar la tarjeta en modo master y lo intenté añadiendo lo siguiente en el script interfaces de Debian:

iface ath0 inet static
pre-up wlanconfig ath0 destroy
pre-up wlanconfig ath0 create wlandev wifi0 wlanmode ap
pre-up iwconfig ath0 essid breinestorm rate auto
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0

pero aunque me configuraba la tarjeta en modo master, pero no era capaz de cambiar la potencia de 9 a 15 dB, tenía que hacerlo siempre una vez ejecutado el script interfaces.Por tanto opté por añadir el siguiente script bash en /etc/rc.local, que es el último servicio que se ejecuta:

con mi RedHat funcionaba el siguiente script:

#!/bin/bash
echo "Arrancando Access Point"
wlanconfig ath0 destroy
ifdown ath0
wlanconfig ath0 create wlandev wifi0 wlanmode ap
ifup ath0
iwconfig ath0 essid breinestorm rate auto

con la antena original de 2 dBi funcionaba bien, pero incluso con la tarjeta de 108 Mbps, la calidad de la conexión no era muy buena (20/94) así que busque un poquito y descubrí en un foro que ejecutando esto la calidad mejoraba:

iwconfig ath0 channel 9

y repentinamente la calidad del enlace mejoró a 50/94 :) Para hacer uso de la antena de 5 dBi tuve que añadir:

iwconfig ath0 txpower 16

asi que mi script terminó siendo:

#!/bin/bash
echo "Arrancando Access Point"
wlanconfig ath0 destroy
ifdown ath0
wlanconfig ath0 create wlandev wifi0 wlanmode ap
#iwpriv ath0 bgscan removed
ifup ath0
iwconfig ath0 essid breinestorm rate auto
#athctrl ath0 -d 20
sleep 10
iwconfig ath0 txpower 16
iwconfig ath0 channel 9

Las lineas que he comentado las dejo como ejemplo de diferentes posibilidades para mejorar la conexion :)

Espero que esto sirva de ayuda básica a la gente, no pretende ser una guía exhaustiva sino una pequeña referencia para no tener que darle vueltas a la hora de encontrar una tarjeta barata 802.11g y que tenga el chipset Atheros soportado por el driver madwifi.Espero comentarios o
posibles mejoras.