Soy nuevo en el uso de tc y netem . Quiero retrasar el envío de paquetes a una dirección IP específica. Sin embargo, los siguientes comandos hacen que todos los paquetes del sistema se retrasen, en lugar de solo a la dirección IP 1.2.3.4:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1
Supongo que necesito algún tipo de filtro general al final para especificar que todo el tráfico restante no debe pasar por netem. Pero no puedo hacer que nada funcione. ¿Cómo haría que esto funcione?
fuente
La respuesta elegida es incorrecta / incompleta. Me enfrenté a un problema similar, la respuesta elegida me ayudó, pero no lo suficiente.
Primero, el siguiente comando no es realmente necesario.
Se 'eliminará' la raíz qdisc, pero inmediatamente se sustituirá por una pfifo_fast (para que no pierda la conectividad).
El segundo comando:
Sustituirá el qdisc pfifo_fast con el prio. Por defecto, la cola de 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 ejecuta:
mirando los valores de 'priomap'.
Luego, agrega un qdisc netem:
Con este comando, retrasará todo el tráfico que vaya a la banda 1: 1 (hasta que el filtro esté en su lugar).
Pero hay dos advertencias:
Lo siguiente resolvió mi problema para no verse afectado por el netem mientras no se aplica el filtro. En lugar de los pasos anteriores, hice:
Esto enviará todo el tráfico por defecto a la banda 1: 3.
Luego, agregué la regla para retrasar el tráfico:
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:
Ahora con el filtro, solo el IP / puerto elegido se verá afectado, ya que redirigimos el tráfico elegido a la banda 0.
El resto del tráfico no se ve afectado ya que continúa fluyendo hacia la banda 3.
fuente
Ejemplo simple de https://wiki.linuxfoundation.org/networking/netem que le permite retrasar paquetes a una IP determinada sin afectar ningún otro tráfico, incluso durante la configuración:
fuente
No he logrado retrasar el tráfico a una IP mientras mantengo el tráfico normal a otras IP normales con el método descrito en este hilo.
Sin embargo, logro hacerlo usando los siguientes comandos.
Para retrasar el
15001ms
tráfico a IP1.2.3.4
desde el host donde se ejecuta el comando. El comandohostname -I
se usa para obtener la IP principal del host, pero el valor se puede reemplazar directamente dentro del comando.Tuve que agregar otro filtro con
0ms
retraso para que coincida con el tráfico proveniente del host. Seguro que no es elegante, pero no he logrado que algo más agradable funcione.El último comando se puede reemplazar para que coincida con un solo puerto.
Para retrasar el tráfico al puerto en
18583
lugar de IP1.2.3.4
.También he encontrado un segundo método en esta respuesta para retrasar el tráfico
1.2.3.4:18583
sin impacto en otro tráfico.fuente