[h]Como configurar sencillamente el ancho de banda disponible para una aplicación
o para una interfaz de redes
[/h]
Fuentes :[list=*]
]How to limit network bandwidth on Linux/]
]Linux Advanced Routing & Traffic Control HOWTO/]
[/list]
Cuando estamos conectados a una red con poco ancho de banda es a veces problemático repartir armoniosamente el “brandwitch” entre dispositivos de redes conectados y/o aplicaciones.
¿Quien no lo ha experimentado?.. ¡Sobre todo cuando el ancho de banda de la red en cuestión no es bueno! Por ejemplo; cuando tu compañero de piso pone el e-mule en acción y que ya no se puede ver un vídeo de youtube sin cortes (además nunca lo cierra, el idiota. ).
Siempre nos fijamos en el ancho de banda en bajada pero el ancho de banda en subida es critico también para un buen trafico.
Muchos abonos adsl proponen alrededor de 10Mega/s en bajada y 1Mega/s en subida.
Si un usuario (o una de tus computadoras en tu red personal) sube un archivo pesado y que lo hace a toda velocidad y sin limites puede legar a entorpecer el trafico para todos lo otros clientes.
Linux es el sistema favorito de lo administradores de redes porque tiene multitudes de comandos potentes para estas tareas.
Vamos a ver rápidamente dos de ellos con unos ejemplos básicos y concretos que ilustran perfectamente este gran poder que tenemos en nuestra consola.
[list=1]
]trickle:
Permite gestionar el ancho de banda disponible para una aplicación
pagina web de trickle/]
]wondershaper:
Para atribuir limites de ancho de banda en bajadas y subidas a una interfaz de redes
pagina web de wondersharper/]
[/list]
[h]Trickle : el comando que configura el ancho de banda de unba aplicación[/h]
Instalar trickle es una cosa trivial en nuestras distribuciones basadas en debian:
sudo apt-get install trickle
… “Necesito descargar 34,6 kB de archivos.
Se utilizarán 158 kB de espacio de disco adicional después de esta operación.”
Una vez instalado el programa no requiere privilegios de administrador. Tiene pocas opciones
[quote] trickle --help
Usage: trickle -hvVs] -d ] -u ] -w ] -t ]
-l ] -n ] command …
-h Help (this)
-v Increase verbosity level
-V Print trickle version
-s Run trickle in standalone mode independent of trickled
-d <rate> Set maximum cumulative download rate to <rate> KB/s
-u <rate> Set maximum cumulative upload rate to <rate> KB/s
-w Set window length to KB
-t Set default smoothing time to s
-l Set default smoothing length to KB
-n Use trickled socket name
-L Set latency to milliseconds
-P Preload the specified .so instead of the default one
[/quote]
el opción “-d” (download) es para limitar la velocidad en bajada (se expresa en KB/s) y el opción “-u” (upload) regula la velocidad de subida (también en KB/s).
Vamos a decir que quiero bajar un archivo de youtube pero limitando a 1MB/s la velocidad de bajada.
trickle -u 1000 youtube-dl https://www.youtube.com/watch?v=pYS0LtQQktE
Y trickle entra en acción : https://www.wifi-libre.com/img/members/3/limitbrandwitch.jpg
Asi puedo redactar este tema y escuchar la radio sin ninguna latencia debida a la bajada, es muy comodo.
Otra forma de usar trickle es lanzar lo como “demonio”, ejemplo limitando a 1MB : sudo trickled -d 1000
A partir de ahí trickle corre y cada vez que lanzamos una aplicación con trickle usará el ancho de banda así:
- Si lanzamos firefox con trickle (“trickle firefox” en consola) tendrá 1 MB/s de ancho de banda.
- Si lanzamos por ejemplo ahora skype (“trickle skype” en consola) tendrá 0,5 MB/s y firefox pasará de 1MB/s a 0,5 MB/s
[h]Limitar el ancho de banda atribuido a una interfaz con wondershaper[/h]
Wondersharper no es un comando pero un script que usa principalmente el comando tc para limitar el ancho de banda y configurar el QoS sobre una interfaz. Instalarlo es como siempre
sudo apt-get install wondershaper
Y podemos ahora echar un ojo al script (se encuentra en /sbin/
[code]#!/bin/sh
Wonder Shaper
Modifications by Vince Mulhollon for debian package
if $# -eq 0 ]; then
echo Please read the man page for the wondershaper and
echo the file /usr/share/doc/wondershaper/README.Debian.gz
exit
fi
if $# -eq 1 ]; then
/sbin/tc -s qdisc ls dev $1
/sbin/tc -s class ls dev $1
exit
fi
if $# -eq 2 ]; then
/sbin/tc qdisc del dev $2 root 2> /dev/null > /dev/null
/sbin/tc qdisc del dev $2 ingress 2> /dev/null > /dev/null
echo Wondershaper queues have been cleared.
exit
fi
if $# -ne 3 ]; then
echo Please read the man page for the wondershaper and
echo the file /usr/share/doc/wondershaper/README.Debian.gz
exit
fi
please read the README before filling out these values
Set the following values to somewhat less than your actual download
and uplink speed. In kilobits. Also set the device that is to be shaped.
DOWNLINK=$2
UPLINK=$3
DEV=$1
low priority OUTGOING traffic - you can leave this blank if you want
low priority source netmasks
NOPRIOHOSTSRC=
low priority destination netmasks
NOPRIOHOSTDST=
low priority source ports
NOPRIOPORTSRC=
low priority destination ports
NOPRIOPORTDST=
Now remove the following two lines
#echo Please read the documentation in ‘README’ first
#exit
#########################################################
#if “$1” = “status” ]
#then
/sbin/tc -s qdisc ls dev $DEV
/sbin/tc -s class ls dev $DEV
exit
#fi
clean existing down- and uplink qdiscs, hide errors
/sbin/tc qdisc del dev $DEV root 2> /dev/null > /dev/null
/sbin/tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
#if “$1” = “stop” ]
#then
exit
#fi
uplink
install root CBQ
/sbin/tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit
shape everything at $UPLINK speed - this prevents huge queues in your
DSL modem which destroy latency:
main class
/sbin/tc class add dev $DEV parent 1: classid 1:1 cbq rate ${UPLINK}kbit
allot 1500 prio 5 bounded isolated
high prio class 1:10:
/sbin/tc class add dev $DEV parent 1:1 classid 1:10 cbq rate ${UPLINK}kbit
allot 1600 prio 1 avpkt 1000
bulk and default class 1:20 - gets slightly less traffic,
and a lower priority:
/sbin/tc class add dev $DEV parent 1:1 classid 1:20 cbq rate $((9*$UPLINK/10))kbit
allot 1600 prio 2 avpkt 1000
‘traffic we hate’
/sbin/tc class add dev $DEV parent 1:1 classid 1:30 cbq rate $((8*$UPLINK/10))kbit
allot 1600 prio 2 avpkt 1000
all get Stochastic Fairness:
/sbin/tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
/sbin/tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
/sbin/tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10
start filters
TOS Minimum Delay (ssh, NOT scp) in 1:10:
/sbin/tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32
match ip tos 0x10 0xff flowid 1:10
ICMP (ip protocol 1) in the interactive class 1:10 so we
can do measurements & impress our friends:
/sbin/tc filter add dev $DEV parent 1:0 protocol ip prio 11 u32
match ip protocol 1 0xff flowid 1:10
pablo.iranzo@uv.es provided a patch for the MLDonkey system
The MLDonkey uses small UDP packets for source propogation
which floods the wondershaper out.
/sbin/tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32
match ip protocol 17 0xff
match ip sport 4666 0xffff
flowid 1:30
prioritize small packets (<64 bytes)
/sbin/tc filter add dev $DEV parent 1: protocol ip prio 12 u32
match ip protocol 6 0xff
match u8 0x05 0x0f at 0
match u16 0x0000 0xffc0 at 2
flowid 1:10
some traffic however suffers a worse fate
for a in $NOPRIOPORTDST
do
/sbin/tc filter add dev $DEV parent 1: protocol ip prio 14 u32
match ip dport $a 0xffff flowid 1:30
done
for a in $NOPRIOPORTSRC
do
/sbin/tc filter add dev $DEV parent 1: protocol ip prio 15 u32
match ip sport $a 0xffff flowid 1:30
done
for a in $NOPRIOHOSTSRC
do
/sbin/tc filter add dev $DEV parent 1: protocol ip prio 16 u32
match ip src $a flowid 1:30
done
for a in $NOPRIOHOSTDST
do
/sbin/tc filter add dev $DEV parent 1: protocol ip prio 17 u32
match ip dst $a flowid 1:30
done
rest is ‘non-interactive’ ie ‘bulk’ and ends up in 1:20
/sbin/tc filter add dev $DEV parent 1: protocol ip prio 18 u32
match ip dst 0.0.0.0/0 flowid 1:20
########## downlink #############
slow downloads down to somewhat less than the real speed to prevent
queuing at our ISP. Tune to see how high you can set it.
ISPs tend to have huge queues to make sure big downloads are fast
attach ingress policer:
/sbin/tc qdisc add dev $DEV handle ffff: ingress
filter everything to it (0.0.0.0/0), drop everything that’s
coming in too fast:
/sbin/tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src
0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
[/code]
Para ejecutar el script de forma sencilla lo usamos exactamente como tickle :
[list=*]
]-d para limitar la velocidad de bajada (en KB/s)/]
]-u para la velocidad en subidas (en KB/s)/]
]Invocamos wodersharper + interfaz + opciones/]
[/list]
La diferencia es que wondersharper requiere privilegios de administrador, lo lanzamos con “sudo” desde nuestra cuenta de usuario.
Imaginemos que quiera atribuir 1 mega en bajada y medio-mega en subida a mi interfaz eth0:
sudo ifconfig eth0 down && sudo wondershaper eth0 1000 500 && sudo ifconfig eth0 up
https://www.wifi-libre.com/img/members/3/wondersharper1.jpg
Y paramos el servicio con
sudo wondershaper clear eth0
http://i.imgur.com/lnt22QF.png
Útil y fácil y sin necesidad de intervención sobre el punto de acceso.