Sunteți pe pagina 1din 14

Que desastroso resulta en muchas ocasiones administrar algo tan simple como una red, especialmente cuando existen

usuarios en ella que les importa poco el trabajo de quienes si quieren trabajar en internet.

No me explayare mucho en este asunto, muchos manuales y tutoriales hay de QoS, yo me dedicare a explicar brevemente como implementar uno

QoS es calidad de servicio, prcticamente lo contrario a DoS denegacin de servicio, la calidad trata de asegurarse de que el servicio siempre est disponible.

Como evitar que Paquito bajando 20 canciones en el ares o Manuelito bajando 2 distribuciones de Linux por FTP consuman todo el ancho de banda disponible y evitando que Pedro no pueda ver la pagina de Continental Airlines para comprar ese boleto de avin urgente y que no lo puede comprar por que la pagina esta tan lenta que no termina de cargar nunca, por la falta de ancho de banda disponible. En una red pequea Pedro se levantara y les pedira a Paquito y Manuelito, que dejen de perder el tiempo y que lo dejen trabajar, pero en un corporativo con cientos de empleados a veces no sabes ni quien es el gandalla comindose todo el ancho de banda y es aqu donde QoS salva el da.

Una tarjeta de red o cualquier dispositivo de Red se comporta como buffer de tipo FIFO, Primero en entrar, Primero en salir, Estos buffer se le denominan colas de paquetes y por default estn presente en modo FIFO en la mayora de los sistemas operativos y esta cola tiene un ancho de banda, del total de la tarjeta, que es de 10Mbps o 100Mbps o 1000Mbps dependiendo de la tarjeta de red o el dispositivo conectado como DSL que suelen tener solo 2Mbps a 8Mbps de ancho de banda de bajada y 512kbps de subida

Esto qu significa?

Significa que si entra primero 20 paquetes de ares a la cola y el 21 es de web, saldrn primero los 20 de ares y hasta el final el de web, en una oficina esto es absurdo, aunque

entraran los 20 paquetes de ares seria natural que quisiramos que primero salgan los de web porque es de trabajo y hasta el final los de ares. En resumen ares se gasta el ancho de banda y no deja casi nada para navegar en pginas web.

Si tenemos un equipo Linux con al menos 2 tarjetas de red hacindola de ruteador o de enmascarado con NAT, podemos controlar el trfico que saldr a internet, ordenando los paquetes con prioridades haciendo de esta forma una red muy veloz aunque haya gente bajando msica con P2P como ares y otros.

Qu es lo que podemos hacer y qu no?

Podemos controlar todo el trfico que inicia en nuestra red hacia internet, no podemos controlar el trfico que inicia en otro lado fuera de nuestra red, y que viene a nuestra red, esto es porque los paquetes vienen en desorden al estilo FIFO desde su punto de origen, existen mdulos como el IMQ para Linux que pueden controlar el trfico que no iniciamos nosotros, mediante discriminacin de paquetes con una efectividad del 90% pero no hablare de este modulo aqu.

Qu necesitamos?

El paquete iproute2 e iptables, iproute2 agrega el comando tc para controlar las colas e iptables nos permitir manipular los paquetes que llegan a las colas

Qu hay que hacer para controlar nuestro ancho de banda en la red?

Lo primero es cambiar la forma FIFO en la que opera la tarjeta de red a htb , le cambiare el ancho de banda a la velocidad del ancho de banda del enlace de internet, de nada sirve una tarjeta de red de 100mbps conectada directamente a internet, si el enlace es de, por ejemplo 2mbps as que no habr ningn inconveniente con limitarlo a eso que luego nos servidora para hacer un ancho de banda dinmico, despus de ese ancho de banda de

2mbps creare sub-anchos de banda en colas con prioridades, despus a estos sub-anchos de banda les pondr su propio buffer o cola de nuevo con htb y con iptables marcare los paquetes para filtrarlos a estos sub colas de los sub-anchos de banda del ancho de banda principal de la tarjeta de red .

Por qu es tan de locos esto del QoS con htb?

FIFO es fcil porque es entrada y salida de datos como llegan, consumiendo a su vez todo el ancho de banda disponible, pero htb permite prioridad y heredar ancho de banda sobrante hasta un lmite establecido.

Por ejemplo si tenemos un enlace de 2mbps y queremos 3 niveles de prioridades, acomodaremos los servicios en esos niveles segn su importancia.

Por ejemplo si es importante el WEB haremos que el WEB salga por la cola 1 y le podemos dar una GARANTIA, que al menos 1mbps de los 2mbps estarn disponibles para web, el otro mega se reparte entre las otras colas, pero que pasa si las otras colas no tienen trfico, habra 1mbps desperdiciado, as que podemos tomar ese ancho de banda dinmicamente asignarlo al web.

Para entender mejor, le garantizamos 1mbps pero puede navegar a 2mpbs si el ancho de banda est disponible

Ahora imaginemos que en de esos 2mbps le queremos garantizar 512kbps al FTP en una prioridad 2 esto significara que bajaran cosas a 512kbps pero si nadie esta navegando en internet podra usar tambin los 2mbps disponibles

Lo mismo para el ARES en la cola ms baja le garantizamos 512kbps y si nadie est bajando pginas web ni ftp ares tendr los 2mbps.

En el momento que alguien navegue en pginas web el ares ser relegado y as, la pginas WEB navegaran a un mega, si nadie estuviera bajando nada por el FTP el ares podra continuar bajando ahora con el mega sobrante, hasta el momento en que alguien decida bajar algo del FTP entonces seria relegando nuevamente a su ancho de banda garantizado que es de 512kbps por el ftp tiene garantizado 512kbps. Cuando ya nadie baje nade de la web y el ftp haya terminado su descarga. El ARES podr recuperar el uso de los 2Mbps-

Ahora la prctica, como implementarlo.

Para esta prctica asumiremos que el servidor de NAT o Ruteo tiene 3 tarjetas de red, la eth2 es la que est conectada a internet.

Para confirmar el estado de nuestra tarjeta de red podemos usar el comando:

tc -s -d qdisc show dev eth2

Este es el resultado que nos arroja:

qdisc pfifo_fast 0: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 17459001308 bytes 20574182 pkt (dropped 0, overlimits 0 requeues 6) rate 0bit 0pps backlog 0b 0p requeues 6

Encontramos que se encuentra en el modo pfifo_fast de Linux, que es simplemente el mtodo FIFO tradicional de toda tarjeta

Cambiando la cola de FIFO a htb en la tarjeta de red

tc qdisc add dev eth2 root handle 1: htb default 11

el comando agrega al eth2 la cola fsica de la tarjeta de red el mtodo htb adems le puso un nombre, la llamo 1: y el parmetro default 11 indica que espera encontrar una sub-cola llamada 11 por donde pasaran los datos que no fueron clasificados, generalmente el default es la cola de ms baja prioridad, ya que si no los clasificas seguramente es porque son servicios que importan menos que los que clasificaste como prioritarios.

Volvemos a ejecutar el comando:

tc -s -d qdisc show dev eth2

Para ver que sucedi con la tarjeta de red, el resultado ser:

qdisc htb 1: r2q 10 default 11 direct_packets_stat 1732 ver 3.17 Sent 1558805 bytes 1732 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0

Ya no es pfifo_fast es htb

Ahora limitare el ancho de banda fsico en la cola de la tarjeta de red, lo bajare a la velocidad de 2mbps.

Con el comando:

tc class add dev eth2 parent 1: classid 1:1 htb rate 2000kbit ceil 2000kbit

Es importante saber que rate es el ancho de banda garantizado y ceil el tope mximo del ancho de banda alcanzable.

Las class son las colas virtuales, en este caso esta cola est ligada a la de la tarjeta de red, la de la red la llamamos 1: aqu le decimos con parent 1: que esta cola se ligara a su padre en la tarjeta de red y classid 1:1 es el nombre que tendr esta cola con un ancho de banda garantizado (rate) de 2000kbps y que nunca habr mas (ceil) de 2000kbps como ancho de banda porque este es el ancho de banda mximo del enlace dedicado

Ahora es tiempo de partir en pedazos ms pequeo la cola 1:1, esto lo hacemos con el comando:

tc class add dev eth2 parent 1:1 classid 1:10 htb rate 1512kbit ceil 2000kbit

Esta lnea dice que esta cola es hija de la cola anterior (parent 1:1) y que est a su vez se llama 1:10 continua usando el mtodo htb, le decimos que est sub cola garantiza 1.5 mbps (rate 1512kbps) pero que podra alcanzar hasta los 2mbps (ceil 2000kbps) si el ancho de banda estuviera disponible, al final de la lnea debera ir un prior 0, mientras ms baja es la prioridad ms importante es la cola prior 0 es ms importante y ojo, no se especifica cuando es 0, solo cuando es menos importante como 1, 2 o 3 y as.

Ahora creamos la cola menos importante

Con el comando:

tc class add dev eth2 parent 1:1 classid 1:11 htb rate 512kbit ceil 2000kbit prio 1

Esta cola tambin es hija de 1:1 y hermana de 1:10 se llama as misma 1:11, recuerdan el default en la cola fsica de la tarjeta de red, se llamaba 11, efectivamente esta es la cola a la que vendrn los paquetes no clasificados, a esta cola se le garantizan 512kbps pero si est disponible ms ancho de banda puede llegar a usar hasta 2mbps, la prioridad dice que es 1 menos importante que 0 as como otras sub-colas con prior 2 o 3 sera menos importantes que prior 1

Con el comando tc -s -d class show dev eth2 , se puede visualizar el trafico que pasa por cada cola.

tc -s -d class show dev eth2

Obtendramos algo como esto:

class htb 1:11 parent 1:1 prio 1 quantum 6400 rate 512000bit ceil 2000Kbit burst 1664b/8 mpu 0b overhead 0b cburst 1850b/8 mpu 0b overhead 0b level 0 Sent 9870557 bytes 9434 pkt (dropped 0, overlimits 0 requeues 0) rate 1233Kbit 148pps backlog 0b 23p requeues 0 lended: 2433 borrowed: 6978 giants: 0 tokens: -27390 ctokens: -10484

class htb 1:1 root rate 2000Kbit ceil 2000Kbit burst 1850b/8 mpu 0b overhead 0b cburst 1850b/8 mpu 0b overhead 0b level 7 Sent 9847632 bytes 9411 pkt (dropped 0, overlimits 0 requeues 0) rate 1262Kbit 152pps backlog 0b 0p requeues 0 lended: 6978 borrowed: 0 giants: 0

tokens: -10484 ctokens: -10484

class htb 1:10 parent 1:1 prio 0 quantum 18900 rate 1512Kbit ceil 2000Kbit burst 1788b/8 mpu 0b overhead 0b cburst 1850b/8 mpu 0b overhead 0b level 0 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 0 borrowed: 0 giants: 0 tokens: 9465 ctokens: 7400

Hay 3 colas! Exacto, la cola padre que es la de la tarjeta de red, y las 2 hijas

Recordemos que todo trafico no clasificado por default se va a la hija 11, si ponen atencin vern que el valor send del 1:10 esta en 0, esto es porque no hay trfico en la cola prioritaria, no lo hay porque no hemos clasificado nada toda la red esta desclasificada as que todo los paquetes que van a internet se van a la cola 11, no hay problema, recordemos que en el ceil dijimos que podra alcanzar 2mbps si el ancho de banda est disponible, as que en este punto todos siguen navegando a 2mbps sin ningn problema

Ahora se agrega otra cola a las colas hijas, pero con el mtodo sfq que permite reorganizar paquetes del mismo tipo, para que salgan juntos, de esta forma intentaremos que si en las colas hay paquetes desordenados, digamos fragmentados, ya que es un trmino mejor conocido por el comportamiento de los archivos del disco duro. El sfq los desfragmenta para que los paquetes de web salgan todos juntos, los de ftp salgan todos juntos, y as, esto le diremos que lo haga cada 10 segundos que es un tiempo razonable. Para reorganizar los paquetes en la cola.

Entonces si en la cola haba estos paquetes por ejemplo:

Web,ftp,ssh, web,ssh,ftp,ftp,web el sfq los dejara as

Web,web,web,ftp,ftp,ftp,ssh,ssh

Esto lo hacemos con los siguientes comandos:

tc qdisc add dev eth2 parent 1:10 handle 10: sfq perturb 10

Esta cola es hoja de 1:10 (parent 1:10) as misma se llamara 10 (handle 10) con el mtodo sfq que suceder cada 10 segundos y para la otra cola igual:

tc qdisc add dev eth2 parent 1:11 handle 11: sfq perturb 10

Ntese que esto es jerrquico, las colas sfq nietas de la cola de 2mbps, le entregan la cola a las hijas htb de la cola de 2mbps htb y esta ultima a la cola de su propio padre que es la tarjeta de red que tambin es htb

Hasta aqu est bien, ya organizamos paquetes y sabemos la prioridad, pero aun no hemos clasificado los paquetes por lo que si volvemos a ver la informacin de las colas, la 1:10 seguir en 0 bytes enviados, la cola que se movern seguir siendo la 11 porque es la default y por ah sigue pasando todo el trafico de la red, porque todo continua sin clasificarse.

Preparando las colas para recibir paquetes clasificados:

tc filter add dev eth2 protocol ip prio 1 parent 1: handle 1 fw classid 1:10

Filtramos protocol ip prioridad 1 (mas alta en filtracin) de la cola padre 1: manejara paquetes firmados con la marca 1 (handle 1) estos paquetes sera reenviados (fw) a la clase 1:10

tc filter add dev eth2 protocol ip prio 2 parent 1: handle 2 fw classid 1:11

Igual que el anterior, pero con prioridad menor (2) los paquetes con la marca 2 se reenvan a la cola 1:11. OJO en esta configuracin podramos omitir este comando, recordemos que todo lo que no est firmado o marcado, de todos modos terminara en la cola 11 es la default.

En este punto ya hay un filtrador de colas esperando paquetes con marcas 1 y 2, pero, Quin marca esos paquetes?, no hay ningn paquete marcado a pesar de contar con los filtros los paquetes no vienen marcados as que en este momento continuamos con que la nica cola en movimiento es la 11 porque la 10 no recibe paquetes, ya que fsicamente ningn paquete viene con la marca 1 que es la marca que los filtrara a la cola prioritaria.

Es hora de iptable para marcar con mangle:

iptables -t mangle -A FORWARD -p tcp \u2013dport 80 -j MARK \u2013set-mark 1 iptables -t mangle -A FORWARD -p tcp \u2013dport 80 -j RETURN

Todo el trfico que mandamos a internet que sea un paquete tcp y que lleve por destino el Puerto 80 deber ser marcado como 1, la segunda lnea la del return indica que no debe ser remarcado, fue marcado como 1 y con esa debe quedarse, por si hubiera por la red algn otro equipo remarcando paquetes.

LISTO! Comprobando que es verdad:

tc -s -d class show dev eth2

Debemos obtener algo como esto

class htb 1:11 parent 1:1 prio 1 quantum 6400 rate 512000bit ceil 2000Kbit burst 1664b/8 mpu 0b overhead 0b cburst 1850b/8 mpu 0b overhead 0b level 0 Sent 524112583 bytes 499349 pkt (dropped 0, overlimits 0 requeues 0) rate 1971Kbit 230pps backlog 0b 41p requeues 0 lended: 128668 borrowed: 370640 giants: 0 tokens: -14475 ctokens: -8151

class htb 1:1 root rate 2000Kbit ceil 2000Kbit burst 1850b/8 mpu 0b overhead 0b cburst 1850b/8 mpu 0b overhead 0b level 7 Sent 524189335 bytes 500233 pkt (dropped 0, overlimits 0 requeues 0) rate 1980Kbit 241pps backlog 0b 0p requeues 0 lended: 370640 borrowed: 0 giants: 0 tokens: -11447 ctokens: -11447

class htb 1:10 parent 1:1 prio 0 quantum 18900 rate 1512Kbit ceil 2000Kbit burst 1788b/8 mpu 0b overhead 0b cburst 1850b/8 mpu 0b overhead 0b level 0 Sent 121393 bytes 925 pkt (dropped 0, overlimits 0 requeues 0) rate 8752bit 10pps backlog 0b 0p requeues 0 lended: 925 borrowed: 0 giants: 0 tokens: 9127 ctokens: 7144

En la cola 10, ya hay movimiento ya le llegan los paquetes de trfico WEB el cual en esta configuracin decidimos que es ms importante que cualquier otro paquete, podramos

tener ms colas e incluso colas que comparten varios servicios por ejemplo podemos marcar el SSH en la cola prioritaria

iptables -t mangle -A FORWARD -p tcp \u2013dport 22 -j MARK \u2013set-mark 1 iptables -t mangle -A FORWARD -p tcp \u2013dport 22 -j RETURN

Con eso todo paquete SSH se marca con 1, compartiendo prioridad con los paquetes de WEB

Qu es lo que tenemos?

Tenemos un ancho de banda de 2mbps

El WEB es metido en la cola de prioridad 0 que tiene un ancho de banda garantizado de 1.5mbps y pudiendo llegar a 2mbps si los otros 512kbps no estn siendo usados.

Tenemos que el resto del trfico no marcado como 1 se va a la cola de 512kbps pudiendo llegar a 2mbps si no hay trfico prioritario en la cola de 1.5mbps

En resumen, en el caso de ARES podramos bajar ARES a 2mbps siempre y cuando nadie navegue en internet, si alguien navega a 1.5mbps en las pginas web, los ares de la red y otros servicios se quedaran con su ancho de banda garantizado de solo 512kbps

Controlando todas las conexiones que inician desde dentro de nuestra red local y van hacia internet.

Toda esta explicacin puede verse aparatosa y complicada, no lo es, de hecho no hemos tipiado mas e 10 comandos

tc qdisc add dev eth2 root handle 1: htb default 11

tc class add dev eth2 parent 1: classid 1:1 htb rate 2000kbit ceil 2000kbit

tc class add dev eth2 parent 1:1 classid 1:10 htb rate 1512kbit ceil 2000kbit prior 0 tc class add dev eth2 parent 1:1 classid 1:11 htb rate 512kbit ceil 2000kbit prio 1

tc qdisc add dev eth2 parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev eth2 parent 1:11 handle 11: sfq perturb 10

tc filter add dev eth2 protocol ip prio 1 parent 1: handle 1 fw classid 1:10 tc filter add dev eth2 protocol ip prio 2 parent 1: handle 2 fw classid 1:11

iptables -t mangle -A FORWARD -p tcp \u2013dport 80 -j MARK \u2013set-mark 1 iptables -t mangle -A FORWARD -p tcp \u2013dport 80 -j RETURN

Antes de subir este articulo google por otros artculos similares, como dije al inicio, hay un montn de ellos. Pero encontr uno que explican este mismo mtodo el htb desde otro enfoque y al leerlos puede quedar bien claro lo que explique aqu.

QoS Parte 1

http://cafetera.etsit.upv.es/~carlos/carblog/2007/01/30/qos-local-en-linux-i/

QoS Parte 2

http://cafetera.etsit.upv.es/~carlos/carblog/2007/01/31/qos-local-en-linux-ii/

QoS Parte 3

http://cafetera.etsit.upv.es/~carlos/carblog/2007/02/02/qos-local-en-linux-iii/

IMQ;

http://www.etxea.net/docu/qos/qos.html

Este otro artculo incluye informacin de IMQ para quienes intenten controlar el trfico de entrada, es til si se quiere evitar DoS o administrar el ancho de banda que invertirnos en los servicios que publicamos a internet hosting WEB, correo, ftp y todas las conexiones que podramos recibir.

S-ar putea să vă placă și