Simulando una conexión lenta con tc

9

Tengo una caja de Linux (Centos 5.5) en la que quiero limitar el tráfico de red. Tengo una aplicación que distribuimos a los clientes y quiero probarla en el ancho de banda mínimo recomendado de 256Mbit / seg. Hasta ahora, los tutoriales de tc que he visto parecen permitirle limitar el ancho de banda de acuerdo con ciertos criterios, pero quiero limitar el ancho de banda en todas las situaciones (a / desde todas las direcciones IP, sin importar el aspecto del encabezado IP, etc.).

Un tutorial sugirió que use:

tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2

pero me sale el siguiente error:

Unknown filter "flowid", hence option 10:2 is unparsable

¿Alguna idea sobre cómo limitar el ancho de banda que entra / sale de eth0 en todas las circunstancias?

respiración rancia
fuente

Respuestas:

11

Si desea aplicar limitaciones a todo el tráfico saliente, no necesita filtros en absoluto. Simplemente agregue su qdisc al controlador raíz de la interfaz de esta manera:

tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Si desea dar forma / controlar el tráfico entrante, es un poco más complicado. Deberá utilizar, por ejemplo, una interfaz IFB:

modprobe ifb
ip link set dev ifb0 up
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#  ^- this is a dummy filter, match u32 0 0 matches all traffic
tc qdisc add dev ifb0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Aquí hay un enfoque diferente, usando dos filtros simples:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 root         protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
Alabama.
fuente
He estado pirateando su solución, pero no puedo hacer que funcione. Estoy ejecutando sus comandos, abriendo Firefox, comenzando una descarga y descargando demasiado rápido. Cuando hago un ifconfig, ¿debo ver algunos paquetes RX y TX en ifb0 (porque no lo hago)? Gracias.
rancidfishbreath
Agregué un enfoque diferente que funciona sin una interfaz ifb.
al.
¡El segundo enfoque usando los dos filtros simples está funcionando muy bien! Muchas gracias. Realmente me gusta esta solución porque es simple y fácil de entender.
rancidfishbreath 01 de
Impresionante gracias, nueva pregunta, ¿cómo puedo eliminar el límite después de ejecutar tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540:? ¡Gracias!
SSH Este
¿Cómo apagar el estrangulador y revertirlo como estaba? Responda a la versión de "enfoque diferente usando dos filtros simples" si fuera tan amable. El "hombre tc" es ... abrumador como siempre.
Geoffrey Anderson el
0

Ha agregado 1 regla como esta tc qdisc add dev eth0 root handle 10: htb default 20

después de eso como tu

tc filter add dev eth0 protocolo ip parent 10: prio 2 flowid 10: 2

trance
fuente