¿Hay alguna manera de restringir el ancho de banda en una NIC en Linux? Me gustaría poder simular una conexión arbitrariamente lenta.
¿Hay alguna manera de restringir el ancho de banda en una NIC en Linux? Me gustaría poder simular una conexión arbitrariamente lenta.
Respuestas:
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)
sch_netem
. En general, no es necesario cargarlo manualmente, se cargará automáticamente según sea necesario.
rate
opció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
Lado del cliente, ¿verdad?
goteo debe hacer lo que quieras. Si está ejecutando Ubuntu (o Debian, creo), puede instalarlo sudo apt-get install trickle
y 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.
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.
wondershaper
en Debian.
sudo wondershaper clear eth0
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.
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í.
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:
Instale el proxy squid desde su distribución: en mi Fedora fue tan fácil como yum install squid
.
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).
Comience el calamar :/etc/init.d/squid start
Configure su navegador para usar el localhost
puerto del servidor proxy 3128
.
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á.