Существует несколько хороших источников информации о том, как ввести задержку для входящих и исходящих пакетов. На этой вики-странице NetEm много информации. См. раздел «1.1 Эмуляция задержек глобальной сети» для получения информации о задержке исходящих пакетов и «2.3 Как я могу использовать netem для входящего трафика?» для входящих пакетов. Я попробовал их на своей установке, и у меня не было проблем с их работой.
Базовая задержка:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
21.800
Задержка 100 мс только на стороне клиента (B):
# tc qdisc add dev $my_interface root netem delay 100ms
Результат:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
102184.355
Задержка 100 мс только на стороне клиента (A):
Во-первых, создайте псевдо промежуточный функциональный блок -устройство IFB (Ethernet-мост также будет работать):
# modprobe ifb
# ip link set dev ifb0 up
Затем перенаправьте весь входящий трафик, чтобы сначала пройти через устройство IFB:
# 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
Теперь просто добавьте задержку для исходящего трафика устройства IFB, который теперь является входящим трафиком для моего _интерфейса:
# tc qdisc add dev ifb0 root netem delay 100ms
Результат:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
154442.238
Применяя оба результата из:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
333803.282
Как видите, задержка больше, чем добавленные 100 мс (или 200 мс в последнем примере )+ базовая задержка. NetEm вызывает задержку в определенном месте канала, поэтому более длительная, чем ожидалось, задержка может быть побочным эффектом, если задержка.
Ping и dig используют разные механизмы для разрешения IP-адресов. В то время как ping
получает конфигурацию из строки, похожей на hosts: files dns
в файле /etc/nsswitch.conf, а dig
использует сервер имен, настроенный в /etc/resolv.conf
, потому что dig запрашивает только DNS-сервер. Таким образом, ваша проблема может быть связана с DNS-серверами, которые определены в файле /etc/hosts.