El libre pensamiento para un internet libre

No estas registrado.  

#1 27-01-2015 17:54:14

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 5,730

Limitar el ancho de banda para un programa o una interfaz

Como configurar sencillamente el ancho de banda disponible para una aplicación
                                                                         o para una interfaz de redes

Fuentes :

 


  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. big_smile ).
  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.
 

  1. trickle:
      Permite gestionar el ancho de banda disponible para una aplicación
      pagina web de trickle

  2. wondershaper:
      Para atribuir limites de ancho de banda en bajadas y subidas a una interfaz de redes
      pagina web de wondersharper

Trickle : el comando que configura el ancho de banda de unba aplicación

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

trickle --help
Usage: trickle [-hvVs] [-d <rate>] [-u <rate>] [-w <length>] [-t <seconds>]
               [-l <length>] [-n <path>] 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 <length>  Set window length to <length> KB
    -t <seconds> Set default smoothing time to <seconds> s
    -l <length>  Set default smoothing length to <length> KB
    -n <path>    Use trickled socket name <path>
    -L <ms>      Set latency to <ms> milliseconds
    -P <path>    Preload the specified .so instead of the default one

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 : 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


Limitar el ancho de banda atribuido a una interfaz con wondershaper

  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/

#!/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

Para ejecutar el script de forma sencilla lo usamos exactamente como tickle :

  • -d para limitar la velocidad de bajada (en KB/s)

  • -u para la velocidad en subidas (en KB/s)

  • Invocamos wodersharper + interfaz + opciones

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

wondersharper1.jpg

Y paramos el servicio con

sudo wondershaper clear eth0

lnt22QF.png

Útil y fácil y sin necesidad de intervención sobre el punto de acceso. smile

Desconectado

Temas similares

Tema Respuestas Vistas Ultimo mensaje
2 165 Hoy 15:25:52 por Patcher
Pegado:
521 339979 10-05-2023 18:24:28 por Betis-Jesus
Hospital clinic dump por wifiyeah  [ 1 2 ]
27 1242 09-05-2023 21:32:44 por kcdtv
Hacktivismo por CHARGER22
1 205 08-05-2023 19:53:26 por kcdtv
Pegado:
Pegado:: Script multiuso wifi para Kali y otras distros por v1s1t0r  [ 1 2 3 18 ]
447 66089 22-04-2023 15:31:13 por kcdtv

Pie de página

Información del usuario

Ultimo usuario registrado: klurosu
Usuarios registrados conectados: 0
Invitados conectados: 8

Estadisticas de los foros

Número total de usuarios registrados: 2,446
Número total de temas: 1,637
Número total de mensajes: 15,586

Máx. usuarios conectados: 373 el 30-09-2019 15:04:36