Como controlar la velocidad de conexion a Internet
En el colegio para el cual trabajo tenemos una conexion Internet relativamente lenta (512/256kbps) para la red de estudiantes, pero que tiene una cuota mensual de uso ilimitada (hasta ahora nunca hemos usado mas de 70GB en el mes). En horas pico la conexion se comparte entre 30 PCs y como resultado el servicio es comparable a dial-up (linea telefonica).
Ya convenci al hombre del $$$ para que nos pasemos a una conexion mas rapida (ADSL2+ que promete un maximo de 8/1.5Mbps) y que viene con una cuota mensual de 100GB. El acepto pero con la condicion de que le implemente un mecanismo para controlar la velocidad de acceso a Internet dependiendo de la hora del dia. Es decir que en la mañanas cuando los PCs se utilizan en clase usemos la velocidad maxima, pero que en las tardes la velocidad se reduzca a un 25% cuando se permite el uso de los salones de computadores para correo electronico, chats, IM (Mensajeria Instantanea), etc. El objetivo es evitar que el uso en las tardes utilice la cuota disponible de manera que las clases no se vean afectadas.
En busqueda de alternativas
Algunos consejos que recibi en Groklaw (www.groklaw.net) mi blog favorito son:
- Google for traffic shaping router linux throttle
- www.ipcop.org: look for the online manual and look up 'traffic shaping'
- Firewall with IP tables and QoS: e.g. smoothwall with qos and adzapper

La solucion
La estrategia a usar es colocar un firewall entre la red de estudiantes y el Internet. Un firewall capaz de controlar la velocidad del trafico entrante y saliente. Este tipo de control es posible con QoS (Quality of Service), una serie de mecanismos para controlar el flujo de datos en una red con base en prioridades.
Smoothwall. Es un Linux distro que implementa un firewall con bajos requerimientos de hardware y herramientas de configuracion sencillas. La version actual utilizada es Smoothwall Express 3.0.
Website: http://www.smoothwall.org/
Hardware. Un PC armado con partes extras 256MB RAM, CPU 1.7MHz, 80GB HDD y 3 tarjetas de red.
Interfaces. La configuracion del firewall requiere al menos dos interfaces: Verde y Roja. La interfaz Roja es el Internet / WAN y la interfaz Verde es la LAN que se esta protegiendo (en este caso controlando). Smoothwall tambien usa el concepto de interfaces Naranja y Purpura para la Zona Desmilitarizada y red Inhalambricas respectivamente.
Instalacion. Se quema la imagen .iso de Smoothwall Express en CD (la ultima version se puede bajar del website; yo tenia una imagen que vino con la revista Linux Format Dic 2007). Es importante tener en cuenta que la instalacion borra cualquier contenido previo en el disco duro.
La instalacion es sencilla, solo hay que iniciar el PC con el CD de instalacion y seguir las instrucciones en la pantalla. Los unicos comentarios son:
- Passwords. El instalador pregunta por dos passwords: root password (super-usuario en Linux) y admin password (se necesita para administrar Smoothwall desde la interfaz grafica).
- Interfaces. Hay que entrar la configuracionde red para las interfaces (al menos la Roja y la Verde). Por ejemplo: ROJA (Internet): IP 192.168.0.98 / 255.255.255.0; VERDE (LAN): IP 192.168.2.100 / 255.255.255.0, DHCP enabled.
Configuracion Basica. La primera recomendacion es echarle un vistazo a las secciones de la interfaz grafica y asignar valores adecuados para parametros obvios, como por ejemplo asignar zona horaria / fecha / hora, habilitar accesso remoto a traves de ssh, etc. A proposito ssh funciona a traves del puerto 222 en vez del puerto estandar 22.
A continuacion veremos la interfaz para configurar QoS y como hice para cambiar los parametros dependiendo de la hora del dia.
Configuracion de QoS
Smoothwall tiene una seccion dedicada a QoS en la interfaz graphica via web. Los parametros que controlan QoS se encuentran en la pantalla "Networking / qos".

Parametros. Nos interesa controlar el parametro “Download Speed” (por ejemplo, 4Mbps para velocidad completa y 512Kbps para velocidad reducida); y quizas seria bueno darle a "Gaming" una prioridad lenta ("slow"). La velocidad de uploads (“External Upload speed”) tambien la deberiamos asignar a un valor bajo, por ejemplo 128Kbps).
Salvar (Save). Una vez que los parametros se hayan cambiado, es necesario hacer click en el boton “Save” para ver los cambios aplicados a QoS.
Pruebas de Velocidad. Una forma facil de probar la velocidad de la conexion a Internet en la red VERDE es utilizar alguna de las herramientas gratis disponibles en la web, por ejemplo "Speed Tests" en el website DSLreports. Los test requieren ya sea Java o Flash instalados como plug-ins en el browser. Yo utilice la herramienta flash:
http://www.dslreports.com/speedtest?flash=1

Otros test incluyen empezar a bajar un archivo grande (>100MB) y tomar nota de la velocidad de download reportada por el browser (hay que convertir KB/sec en Kbps). Tambien se probo mostrar un video en YouTube y las diferencias son significativas.
Enseguida vamos a cubrir como cambiar los parametros de QoS dependiendo de la hora del dia mediante el uso de un cron.
Controlar QoS parametros con un cron
Forum. De aqui en adelante pude continuar rapidamente gracias a la informacion que encontre en el forum de la comunidad de Smoothwall (http://community.smoothwall.org/forum/). Estuve buscando un mecanismo para cambiar los parametros de QoS desde la linea de comandos (shell) en vez de la interfaz web. No encontre la respuesta exacta, pero lei un post del creador del modulo QoS donde explicaba los parametros de configuracion.
El archivo que se debe cambiar es: /var/smoothwall/traffic/settings
El script que aplica los cambios en los parametros es: /usr/bin/smoothwall/trafficloader.pl
Lo que hice a continuacion fue asignar los parametros de QoS para velocidad normal y sacarle una copia al archivo de configuracion. Luego asigne los parametros de QoS para velocidad reducida y le saque otra copia al archivo de configuracion.
Entonces cree dos scripts: slow.sh y fast.sh que simplemente reemplazan el archivo de configuracion con la copia apropiada y luego corre el script que aplica los cambios.
Cron. El paso final es correr los scripts slow.sh y fast.sh en el momendo adecuado cada dia. Las clases estan disponibles de 8:45AM a 1:30PM y de 5PM a 8:45PM. Este paso es sencillo utilizando un cron en Linux.
El cron permite correr un comando a una hora en particular. En Smoothwall lo unico que se requiere es editar el archivo /etc/crontab con un editor de texto (por ejemplo vi). Como medida de precaucion la ultima linea del archivo crontab debe ser una linea en blanco.
Las siguientes son las lineas que adicione al crontab:
# Slow Down the Internet Connection (1:30PM, 9PM)
30 13 * * * root /var/smoothwall/traffic/slow.sh >/dev/null
0 21 * * * root /var/smoothwall/traffic/slow.sh >/dev/null
# Speed Up the Internet Connection (5PM, 8:45AM)
0 17 * * * root /var/smoothwall/traffic/fast.sh >/dev/null
45 8 * * * root /var/smoothwall/traffic/fast.sh >/dev/null
Listo!! Se alcanzo la meta.
Existe otro detalle que necesito averiguar y es que puedo hacer para distribuir la carga si llegado el caso tengo dos conexiones a Internet disponibles. Ya les contare...






