¿Cómo limitar el ancho de banda en una interfaz de red Linux?

Respuestas:

32

El módulo del núcleo netem , controlado por iproute.

Necesita compilar Netem con el núcleo:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

Una vez que se cargó el módulo netem, iproute's tc le permite cosas como:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50% de pérdida de paquetes, retraso adicional de 50 ms)

bortzmeyer
fuente
Sí, este es un muy buen módulo para estas cosas, de hecho. No puedo creer que nadie haya respondido esto hasta ahora ...
Lo uso para probar servidores localmente (en localhost) ya que ha sido estándar en todas las distribuciones durante años. Para agregar un retraso de 20 ms "tc qdisc agregue dev lo root handle 1: 0 netem delay 20msec", y eliminarlo "tc qdisc del dev lo root"
pixelbeat
1
Nota rápida: el módulo del núcleo es sch_netem. En general, no es necesario cargarlo manualmente, se cargará automáticamente según sea necesario.
sleske
Aquí está el enlace de trabajo linuxfoundation.org/collaborate/workgroups/networking/netem
Lee Chee Kiam el
Mi versión de NetEm (Ubuntu 13.10) también tiene la opción de limitar el ancho de banda utilizando la rateopción: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Tenga en cuenta que para algunos dispositivos, tales como lo(para acceder a localhost), es necesario ajustar la longitud de la cola, así: ifconfig lo txqueuelen 1000. Consulte serverfault.com/a/394949/76090
z0r el
27

Lado del cliente, ¿verdad?

goteo debe hacer lo que quieras. Si está ejecutando Ubuntu (o Debian, creo), puede instalarlo sudo apt-get install trickley luego ejecutarlo. trickle -s -d 10 -u 10 firefox(más o menos, no lo he usado en mucho tiempo) ejecutaría firefox, limitando su velocidad de descarga y carga a 10 kilobytes por segundo.

Bernardo
fuente
Gracias por este consejo Por alguna razón, el goteo no funcionaría para mí con Firefox, pero funcionó bien con Google-Chrome. (Ubuntu 9.10 64bit)
Tom
66
el goteo funciona interceptando llamadas para vincular en funciones de biblioteca estándar para transferencias TCP: si una aplicación tiene estas funciones vinculadas estáticamente en tiempo de compilación, entonces esto no puede funcionar.
David Spillett el
16

Encontré una manera de evitar que mi caja se comiera todo el ancho de banda disponible en la red usando una herramienta llamada 'wondershaper' en ubuntu. Espero que también exista en otros destros de Linux. Puedo limitar el ancho de banda que puede consumir mi PC Linux con el siguiente comando.

sudo wondershaper eth0 1000 200

Esto limita el límite de descarga a 1000 kilobits y la carga a 200 kilobits. Consulte las páginas de manual de wondershaper para obtener más información / opciones.

acosar
fuente
1
Esto no es exactamente lo que está buscando el OP (se trata de conservar el ancho de banda, no de degradar la conexión a propósito), pero aún así es bueno saberlo.
sleske
1
Por cierto: es un paquete wondershaperen Debian.
sleske
Este b / c conmocionado teníamos problemas en la oficina con la saturación del ancho de banda, hubo un respaldo que no pude interrumpir y pude arreglar esto en dos líneas simples: # apt-get install wondershaper y luego # wondershaper eth0 9999999 500 gracias de nuevo!
orange80
44
sin embargo, wondershaper parece tener algunos problemas matemáticos. Para obtener una ruta arriba / abajo de 1Mb / s, terminamos usando 28096 en lugar de 1024. Sin embargo, no tengo idea de por qué sucedió esto.
Boatcoder
Para restablecer, use:sudo wondershaper clear eth0
Léo Lam
8

NIST crea un simulador de red llamado NistNet.

http://snad.ncsl.nist.gov/nistnet/ (el enlace parece estar muerto)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet le permite crear un enrutador que emule un enlace de comunicaciones de su elección.

Para una operación más simple, lo tiene en una caja con dos NIC entre dos redes.

Por ejemplo, tenía una aplicación que tenía que funcionar a través de un enlace satelital.

Los datos podrían pasar por un enlace de 2Mbps con una GRAN latencia. El control tuvo que pasar por un enlace de 128 kbps, con la misma latencia.

NistNet ayudó a que todo funcionara a 128 kbps.

Usando NistNet, podría simular no solo el ancho de banda, sino también la latencia, y también dejará caer paquetes para usted, simulando un enlace ocupado o poco confiable.

Si desea simular una conexión abitraria, no solo restrinja el ancho de banda, sino que también enrolle la latencia.

No olvides fragmentar los paquetes tampoco. Puede configurar buenas MTU pequeñas en el enlace falso.

El IIRC que agrega fluctuación de paquetes le permitirá descubrir si puede hacer frente a los paquetes fuera de servicio.

Tim Williscroft
fuente
NistNet no se actualiza en mucho tiempo, ¿verdad? En mi opinión, la mejor manera es el módulo netem, que ya existe en todos los núcleos recientes.
Es posible que pueda simular una máquina con 2 NIC utilizando una VM.
Scott
enlace no funciona
hasen
El enlace funciona para mí.
tripleee
4

Personalmente, he usado wondershaper en el pasado para esto, aunque fue escrito para un caso de uso opuesto, aprovechando al máximo su conexión ADSL.

Sin embargo, tendré que probar los otros mencionados aquí.

Thomas Vander Stichele
fuente
3

Puede usar el proxy squid instalado localmente para limitar el ancho de banda, por ejemplo, para probar una página web en un enlace lento:

  1. Instale el proxy squid desde su distribución: en mi Fedora fue tan fácil como yum install squid.

  2. Agregue lo siguiente a /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Esto limitará el ancho de banda a aproximadamente 128 kbps (16000 Bps).

  3. Comience el calamar :/etc/init.d/squid start

  4. Configure su navegador para usar el localhostpuerto del servidor proxy 3128.

Tometzky
fuente
3

Nadie ha mencionado aún ip_relay , llamado "iprelay" en los repositorios de Debian. Funciona como un proxy TCP, en lugar de interceptar llamadas como lo hace el goteo , y funcionará con cualquier aplicación que pueda usar un proxy (por ejemplo, un navegador web) o aceptar un puerto de destino definido por el usuario (telnet, ssh, ftp, curl, etcétera ).

Es un poco más difícil de configurar, pero a menudo funciona en situaciones donde el goteo no lo hará.

CodeGnome
fuente
1
¡Esto es exactamente lo que estoy buscando! Muchas gracias. Me alegro de haberme desplazado hacia abajo y seguir leyendo.
Jay R. Wren