Solución 1:
La respuesta elegida es incorrecta/incompleta. Enfrenté un problema similar, la respuesta elegida me ayudó un poco, pero no lo suficiente.
Primero, el siguiente comando no es realmente necesario.
tc qdisc del dev eth0 raíz
'Eliminará' la raíz qdisc, pero inmediatamente será sustituida por una pfifo_fast (para que no pierda la conectividad).
El segundo comando:
tc qdisc agregar dev eth0 identificador raíz 1:prio
Sustituirá la qdisc pfifo_fast con la prio. De forma predeterminada, la cola prio tiene 3 bandas (0, 1, 2), cada una administrada por una clase (1:1, 1:2 y 1:3).
Los paquetes se enviarán a una de esas bandas utilizando el campo TOS del paquete IP. Esta configuración se muestra cuando ejecutas:
tc qdisc ls
mirando los valores de 'priomapa'.
Luego, agrega un netem qdisc:
tc qdisc agregar dev eth0 padre 1:1 manejador 2:retardo netem 500 ms
Con este comando, retrasa todo el tráfico que va a la banda 1:1 (hasta que se coloca el filtro).
Pero hay dos advertencias:
- Su tráfico puede tener un valor de TOS diferente y luego enviarse a otra banda.
- El qdisc prio se puede configurar para que el tráfico vaya a otra banda.
Lo siguiente resolvió mi problema para no ser afectado por netem mientras no se aplica el filtro. En lugar de los pasos anteriores, hice:
tc qdisc agregar dev eth0 root handle 1:prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Esto enviará todo el tráfico por defecto a la banda 1:3.
Luego, agregué la regla para retrasar el tráfico:
tc qdisc agregar dev eth0 padre 1:1 manejar 10:retardo netem 100ms 10ms
Esto crea el qdisc en la banda 0, pero como todo el tráfico va a la banda 3, no me afectó.
Luego, agregué el filtro:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.0.0.1/32 match ip dport 80 0xffff flowid 1:1
Ahora con el filtro solo se verá afectada la IP/puerto elegido, ya que redirigimos el tráfico elegido a la banda 0.
El resto del tráfico no se ve afectado ya que sigue fluyendo hacia la banda 3.
Solución 2:
Ok, resolví mi propio problema. Resulta que si ejecuta las primeras 3 líneas anteriores (las "tc qdisc"), retrasará todos los paquetes porque aún no hay filtros. La cuarta línea lo cambia para retrasar solo los paquetes de esa única dirección IP. Se pueden agregar líneas de filtro adicionales para agregar direcciones IP adicionales a la lista "retrasada". Por lo tanto:no cree una línea de "retraso de netem" sin un filtro que la apunte.