Existem várias boas fontes para introduzir atrasos nos pacotes recebidos e enviados. Esta página wiki do NetEm tem muita informação. Consulte a seção "1.1 Emulando atrasos na rede de longa distância" para atrasar pacotes de saída e "2.3 Como posso usar o netem no tráfego de entrada?" para pacotes de entrada. Eu tentei estes na minha configuração e não tive problemas para fazer o trabalho.
Latência base:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
21.800
100ms de atraso apenas no lado do cliente (B):
# tc qdisc add dev $my_interface root netem delay 100ms
Resultado:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
102184.355
100ms de atraso apenas no lado do cliente (A):
Primeiro, crie um IFB de pseudo-dispositivo Intermediate Functional Block (ponte Ethernet também funcionaria):
# modprobe ifb
# ip link set dev ifb0 up
Em seguida, redirecione todo o tráfego de entrada para passar pelo dispositivo IFB primeiro:
# tc qdisc add dev $my_interface ingress
# tc filter add dev $my_interface parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
Agora, basta adicionar atraso ao tráfego de saída do dispositivo IFB, que agora é o tráfego de entrada para my_interface:
# tc qdisc add dev ifb0 root netem delay 100ms
Resultado:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
154442.238
Aplicando os dois resultados em:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
333803.282
Como você pode ver, a latência é maior que os 100ms adicionados (ou 200ms no último exemplo) + latência base. O NetEm causa um atraso em um local específico no canal, portanto, a latência maior que a esperada pode ser um efeito colateral se o atraso.
Espero que isso ajude.