[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Control carga de red



Hola Showk, el 05 de feb de 2002, a las 07:21 +0100, Showk decías:
> Existe algún programa para linux que me permita controlar la carga de un
> programa dado en red, por ejemplo que limite el puerto 21 a 5kb o por
> ejemplo que asegure para el puerto 80 a 10 kb y el resto de programas ocupen
> el ancho de banda que deje disponible el puerto 80.
---
Lo que necesitas es el qos (Quality Of Service), no es estrictamente un programa,
sino forma parte de kernel!
Mirate www.netfilter.org en la guía de enrutado avanzada
tienes varios ejemplos de como hacerlo y ademas te viene como
puedes hacer para mejorar las descargas, asignarles prioridades 
según el tipo de tráfico, etc...

Yo tengo puesto el qos en casa y es una maravilla! 
Te pongo mi script de configuración por si te sirve de ayuda,
aunque te recomiendo que te leas la guía que te explica
muy bien para que sirve todo esto :)

8<-----------------------------------------------------
#!/bin/bash
#
# QOS para mi casita
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin

case $1 in
start)
# Creamos la clase cbq en la interfaz de salida
# Aqui solamente consideramos el tráfico de salida, no podemos contolar la entrada
# por lo menos no con esta clase.
tc qdisc add dev eth0 root handle 1:0  cbq bandwidth 10Mbit avpkt 1000 cell 8
# Creamos la clase general
tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit \
   rate 128Kbit weight 12.8Kbit prio 8 allot 1514 cell 8 maxburst 20 \
   avpkt 1000 bounded
# Creamos clase para tráfico estandar prioridad media - 5
# No hace falta acotarla, pq esta acotada la parent
tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 10Mbit \
   rate 128Kbit weight 12.8Kbit prio 5 allot 1514 cell 8 maxburst 20 \
   avpkt 1000
# Creamos clase para tráfico priorizado: ssh
# No hace falta acotarla, pq esta acotada la parent
tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 10Mbit \
   rate 128Kbit weight 12.8Kbit prio 2 allot 1514 cell 8 maxburst 20 \
   avpkt 1000
# Creamos clase para tráfico menos priorizado: navegación web
# No hace falta acotarla, pq esta acotada la parent
tc class add dev eth0 parent 1:1 classid 1:5 cbq bandwidth 10Mbit \
   rate 128Kbit weight 12.8Kbit prio 3 allot 1514 cell 8 maxburst 20 \
   avpkt 1000
# Creamos clase para tráfico  de baja prioridad: e-donkey
# No hace falta acotarla, pq esta acotada la parent
# Quiero que siempre haya un margen y no ocupe todo el bw
tc class add dev eth0 parent 1:1 classid 1:6 cbq bandwidth 10Mbit \
   rate 100Kbit weight 10Kbit prio 7 allot 1514 cell 8 maxburst 20 \
   avpkt 1000
# Para que el tráfico sea tratado justamente, cambiamos el administrdor
# por defecto (fifo, por sfq)
# Hay que hacerlo en cada clase.
tc qdisc add dev eth0 parent 1:3 handle 30: sfq perturb 10
tc qdisc add dev eth0 parent 1:4 handle 40: sfq perturb 10
tc qdisc add dev eth0 parent 1:5 handle 50: sfq perturb 10
tc qdisc add dev eth0 parent 1:6 handle 60: sfq perturb 10
# Y ahora los filtros.
# Todos los que vayan para ssh (no scp)
tc filter add dev eth0 protocol ip parent 1:0 prio 20 u32 match \
   ip tos 0x10 0xff flowid 1:4
# También metemos aqui el ping pa que vaya bien siempre
tc filter add dev eth0 protocol ip parent 1:0 prio 20 u32 match \
   ip protocol 1 0xff flowid 1:4
# Todos los que vayan para web
tc filter add dev eth0 protocol ip parent 1:0 prio 30 u32 match \
   ip dport 80 0xffff flowid 1:5
tc filter add dev eth0 protocol ip parent 1:0 prio 30 u32 match \
   ip dport 8080 0xffff flowid 1:5
tc filter add dev eth0 protocol ip parent 1:0 prio 30 u32 match \
   ip dport 443 0xffff flowid 1:5
# Ahora metemos el e-donkey
tc filter add dev eth0 protocol ip parent 1:0 prio 70 u32 match \
   ip dport 4662 0xffff flowid 1:6
tc filter add dev eth0 protocol ip parent 1:0 prio 70 u32 match \
   ip dport 4665 0xffff flowid 1:6
tc filter add dev eth0 protocol ip parent 1:0 prio 70 u32 match \
   ip sport 4662 0xffff flowid 1:6
tc filter add dev eth0 protocol ip parent 1:0 prio 70 u32 match \
   ip dport 4661 0xffff flowid 1:6
tc filter add dev eth0 protocol ip parent 1:0 prio 70 u32 match \
   ip dport 6665 0xffff flowid 1:6
# Para priorizar la descarga sobre el upload metemos lo paquetes de ack
# en la cola normal.
tc filter add dev eth0 protocol ip parent 1:0 prio 60 u32 \
   match ip protocol 6 0xff \
   match u8 0x05 0x0f at 0 \
   match u16 0x0000 0xffc0 at 2 \
   match u8 0x10 0xff at 33 \
   flowid 1:3

# El resto por defecto tiene prioridad estandar
tc filter add dev eth0 protocol ip parent 1:0 prio 80 u32 match \
   ip dst 0.0.0.0/0 flowid 1:3


# Y ahora la cola de entrada
#tc qdisc add dev eth0 handle ffff: ingress
# Filtramos todo lo que vaya demasiado rápido, para optimizar el
# encolamiento en ISP y no me llegue a saturarse alli y perder el control
#tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip \
#   src 0.0.0.0/0 police rate 256Kbit burst 10k drop flowid :1
;;

stop)
tc qdisc del dev eth0 root >/dev/null 2>&1
;;
*)
echo "Usage: /etc/init.d/qos {start|stop}"
exit 1
;;
esac

exit 0
8<-----------------------------------------------------------


Un saludo,
	Andrés


-- 
-------------------------------------------------------------
José Andrés Arias Velichko      Grupo de Usuarios de Linux
    locke@gul.uc3m.es        Universidad Carlos III de Madrid
 http://gul.uc3m.es/~locke          http://gul.uc3m.es



Reply to: