Control de Trafico y Calidad en el Servicio: Traffic

Anuncio
Control de Trafico y Calidad en el Servicio: Traffic Shaping with Hierarchical
Token Bucket
Sebastián Norberto Mussetta
Norberto Gaspar Cena
Alumnos de la Especialización en Ingeniería en Sistemas de Información
Av. universidad 450 - Villa María – Córdoba.
[email protected]
ABSTRACT
Teniendo en cuenta el crecimiento que las redes han tenido a lo largo y lo ancho del mundo,
cada vez mas, los administradores de red, se ven en la necesidad de poder aplicar filtros
para que el ancho de banda asignado a la red de la organización sea utilizado
correctamente. Recientes estudios de tráfico han determinado que el 46% del tráfico que
circulan por las redes es HTTP, por detrás de este se encuentran los programas P2P con un
sorprendente 37%. Una vez que los administradores de la red de la organización tienen
conocimiento de lo que sucede (mediante un exhaustivo análisis de tráfico), están en la
disyuntiva de decidir que hacer con el tráfico no deseado. Es muy importante que esta
decisión se tome en el seno mas interno de la administración de la empresa, porque es
desde ahí donde se deben definir las políticas de buen uso de la red. Debido a que las
aplicaciones fueron evolucionando y actualmente es posible enviar cualquier tipo de tráfico a
través de cualquier puerto, es necesario identificar el trafico que circula por la red. Una
buena alternativa para hacer esto es haciendo uso de las herramientas que se analizaron en
el trabajo Optimizando el Ancho de Banda: Quality of Service con Filtro de Contenido
en Layer7.
Las políticas de red mas duras indican que una vez identificado ese tráfico, se debe
descartar, por no resultar un contenido necesario para la labor de las personas que integran
la organización. Una política mas accesible indica que se podrá hacer uso de todas esas
aplicaciones siempre que estas no perjudiquen a las aplicaciones necesarias para el
correcto funcionamiento de la empresa. Esto es, identificar las aplicaciones, y asignarles un
ancho de banda mínimo predefinido con anterioridad.
El presente trabajo pretende introducir al lector a la técnica de división de ancho de banda
mediante el uso de algoritmos de jerarquías de grupos. Si existe ancho de banda disponible,
es posible asignarlo a las aplicaciones de tipo p2p. De esta manera el administrador puede
configurar políticas de balance de carga según la aplicación y el ancho de banda disponible
en un momento dado.
1. INTRODUCCION
En la actualidad las redes de alta velocidad sin un control de QoS adecuado pueden
volverse lentas a tal punto que el usuario detecte que las aplicaciones necesarias para su
trabajo diario se tornen imposibles de usar.
Técnicamente aseguramos a los usuarios de la red que las aplicaciones que requieran un
tiempo de latencia bajo o un mayor consumo de ancho de banda, realmente dispongan de
los recursos suficientes cuando lo soliciten. Es por lo mencionado que una de las principales
metas de QoS es la priorización. Esto es, el dar mar relevancia a unas conexiones frente a
otras.
Los beneficios que vamos a encontrar inmediatamente al realizar una implementación de
QoS son los siguientes:
•
Control sobre los recursos: mediante el QoS se podrían limitar las conexiones FTP y
dar mas prioridad a las conexiones a un servidor de base de datos al que acceden
múltiples clientes.
•
Uso mas eficientes de los recursos de la red: esto se logra al poder establecer
prioridades dependiendo del tipo de servicio.
•
Menor latencia: en aplicaciones que requieran de tráfico interactivo, que requieran un
tiempo de respuesta corto.
Es por lo mencionado que en el presente trabajo introduciremos al lector en el concepto de
QoS mediante el uso de disciplinas de colas.
2. CASO PRACTICO
Escenario
A continuación se describe el área de implementación de las políticas de QoS en un
entorno de red Lan con conexión a Internet.
La red de la organización utilizada como ejemplo cuenta con una conexión ADSL de
2048kbps de Downstream y 256kbps de Upstream. Este es el total de ancho de banda que
poseen los ordenadores clientes para poder acceder a los recursos de Internet.
La red esta compuesta por 1 Servidor Debian Lenny GNU/Linux 5.03, y alrededor de
70 equipos de escritorio y unos 10 ordenadores móviles.
La organización debe garantizar un determinado ancho de banda para que los
clientes puedan utilizar servicios Web y de Correo Electrónico. En el caso de quedar ancho
de banda disponible en algún determinado momento, éste debe ser asignado a otro tipo de
servicios, ej. aplicaciones p2p, mensajería, radios online, etc.
Antes de la implantación de esta solución, el MODEM ADSL, era el encargado de
encolar y desencolar los paquetes que iban hacia Internet. La cola utilizada por el módem
era una cola de tipo FIFO (First in first out), esto generaba un grave inconveniente a la hora
de poder utilizar determinados servicios de Internet.
El problema radica en que cuando las aplicaciones de tipo p2p llenaban la cola del
MODEM con paquetes impidiendo que los clientes Web puedan enviar sus Ack. Como
consecuencia los servidores Web tardaban en contestar las solicitudes a causa de las
demoras de envíos de los ack de nuestra red. Finalmente la navegación Web era
extremadamente lenta.
La solución que se plantea en este ejemplo, es realizar el encolado de las
conexiones en el Servidor Linux, priorizando las que son necesarias para el normal
funcionamiento de la organización. De este modo, la cola del MODEM continuará siendo de
tipo FIFO pero a ella arribarán los paquetes de acuerdo a las prioridades que se le asignen
en el servidor GNU/Linux. La figura número 1 muestra en forma de árbol el detalle de
asignación de ancho de banda a las diferentes aplicaciones.
Requisitos
•
Sistema Operativo en el Servidor (Gateway) GNU/Linux Debian Lenny 5.03.
•
Última versión estable de kernel 2.6.32.5 (fecha actual).
•
Paquete Iproute2.
•
Última versión de Iptables. 1.4.5 (fecha acual)
•
Paquete Layer7
Funcionamiento QoS en GNU/Linux
Las diferentes aplicaciones clientes envían los paquetes hacia el la puerta de enlace
que en este caso es el Servidor con Lenny GNU/Linux 5.03. Una vez que el paquete llega al
servidor, es capturado por el kernel del equipo. Luego iptables se encarga de etiquetar el
paquete con alguna marca determinada dependiendo en este caso de la aplicación cliente a
la que pertenezca. En el próximo paso, mediante el uso de disciplinas de colas, los paquetes
se van a ir encolando de acuerdo a las etiquetas que contengan.
Las disciplinas de colas (qdisc) están compuestas por estructuras jerárquicas de
clases formando una arquitectura de árbol. Cada interfaz de red del servidor posee una raíz
de árbol (qdisc raíz) asociada. Cada clase (hoja del árbol) está asociada a las etiquetas que
contienen los paquetes, entonces cuando un paquete es manipulado por iptables, éste es
llevado a una determinada clase. Por otro lado, cada clase tiene asignado un mínimo ancho
de banda garantizado y un excedente que se puede utilizar en el caso que exista mas ancho
de banda disponible. Finalmente cada paquete es enviado a una clase determinada
dependiendo de la etiqueta que contenga y se le asignará el ancho de banda que tenga
predeterminado la clase.
Existen diferentes algoritmos que permiten el funcionamiento de las disciplinas de
colas. En este caso se utilizara HTB (Hierarchical Token Bucket) que permite dividir el ancho
de banda disponible entre un máximo y un mínimo. Se caracteriza por garantizar el mínimo y
alcanzar el máximo en el caso que exista ancho de banda disponible.
Implementación
Distribución de ancho de banda según aplicaciones:
Ancho de banda disponible: 256kbps de Upstream
Servicio
Mínimo
Máximo
Web:
150 kbps
256 kbps
SMTP:
30 kbps
256 kbps
FTP
26 kbps
256 kbps
MSN
18 kbps
256 kbps
P2P
18 kbps
256 kbps
BITORRENT
18 kbps
256 kbps
Estructura de árbol
Figura 1
Configuración mediante reglas
Creación del árbol
tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 256kbit ceil 256kbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 56kbit ceil 256kbit
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 200kbit ceil 256kbit prio 1
tc class add dev eth0 parent 1:10 classid 1:11 htb rate 18kbit ceil 256kbit prio 6
tc class add dev eth0 parent 1:10 classid 1:12 htb rate 18kbit ceil 256kbit prio 6
tc class add dev eth0 parent 1:10 classid 1:13 htb rate 18kbit ceil 256kbit prio 6
tc class add dev eth0 parent 1:20 classid 2:21 htb rate 150kbit ceil 256kbit prio 1
tc class add dev eth0 parent 1:20 classid 2:22 htb rate 26kbit ceil 256kbit prio 2
tc class add dev eth0 parent 1:20 classid 2:23 htb rate 30kbit ceil 256kbit prio 3
Marcado de paquetes según la aplicación
iptables -t mangle -A FORWARD -o eth1 –m layer7 –l7proto msn-messenger -j MARK --setmark 11
iptables -t mangle -A FORWARD -o eth1 –m layer7 –l7proto edonkey -j MARK --set-mark 12
iptables -t mangle -A FORWARD -o eth1 –m layer7 –l7proto bitorrent -j MARK --set-mark 13
iptables -t mangle -A FORWARD -o eth1 –m layer7 –l7proto http -j MARK --set-mark 21
iptables -t mangle -A FORWARD -o eth1 –m layer7 –l7proto ftp -j MARK --set-mark 22
iptables -t mangle -A FORWARD -o eth1 –m layer7 –l7proto smtp -j MARK --set-mark 23
Asociación de marcas con hojas del árbol
tc filter add dev eth0 protocol ip parent 1: handle 11 fw classid 1:11
tc filter add dev eth0 protocol ip parent 1: handle 12 fw classid 1:12
tc filter add dev eth0 protocol ip parent 1: handle 13 fw classid 1:13
tc filter add dev eth0 protocol ip parent 1: handle 21 fw classid 1:21
tc filter add dev eth0 protocol ip parent 1: handle 22 fw classid 1:22
tc filter add dev eth0 protocol ip parent 1: handle 23 fw classid 1:23
Conclusión
El desarrollo de este trabajo permite implementar políticas de balance de carga
controlando el ancho de banda según la aplicación que lo solicite, garantizando un mínimo a
aplicaciones predefinidas. De esta manera se garantiza que aplicaciones indeseadas no
consuman recursos de ancho de banda en el caso que las aplicaciones con prioridad lo
necesiten.
En el mercado existen alternativas similares pero su implementación es por hardware
(mayor costo). Otras solo contemplan los puertos utilizados sin tener en cuenta qué
aplicación lo este usando resultando ser ineficientes.
Esta solución se implementa por software de código abierto con todos los beneficios
que esto acarrea y los requerimientos de hardware son mínimos. Además se tiene en cuenta
la aplicación en cuestión y no el puerto que esté utilizando.
Bibliografía
Martin Devera aka devik (2009), “HTB Home”, http://luxik.cdi.cz/~devik/qos/htb/
Bert Hubert, Linux Advanced Routing & Traffic Control, http://lartc.org/
Daniel P. Bovet, Marco Cesati (2005), “Understanding the Linux Kernel”, 3° edición, Ed. O’
Reilly
Richard Blum (2008), “Linux Command Line and Shell Scripting Bible”, Ed. Wiley
Steve Hunger (2001), “Debian Gnu-Linux Bible”, Ed. Hungry Minds
Linux Kernel Organization Inc (2008), “The Linux Kernel Archives”, www.kernel.org
Free Software Foundation Inc. (2008), “GNU Operating System”, www.gnu.org
Matthew Strait (2006), Application Layer Packet Classifier for Linux, http://l7filter.sourceforge.net
Kwan Lowe, “Kernel Rebuild Guide” (2004), http://www.digitalhermit.com/linux/Kernel-BuildHOWTO.html
Debian Project (2008), “Debian GNU/Linux”, www.debian.org
Descargar