Назад | Перейти на главную страницу

Как добавить задержку входящему трафику?

Для непрерывного тестирования я хотел бы, чтобы сервер apache обслуживал статические файлы с задержкой не менее 20 мс.

Я попытался найти параметр конфигурации apache или плагин с аналогичными возможностями, но не смог.

Комбинация tc и iptables может работать, но я нашел способ добавить задержку только на основе исходящего порта (который отличается для каждого клиента).

 Variables
IF=lo
IFSPEED=100Mbps # Get from sudo /sbin/ethtool $IF
DELAY=1000ms


#
# Create a tree of classful HTB objects
#
sudo /sbin/tc qdisc add dev $IF handle 1: root htb

#
# Create a classful child bucket with classid 1:11
#
sudo /sbin/tc class add dev $IF parent 1: classid 1:11 htb rate $IFSPEED

#
# Create a qdisc (classless) netem child to provide a delay for packets in this 'bucket'
#
sudo /sbin/tc qdisc add dev $IF parent 1:11 handle 11: netem delay $DELAY

#
# Filter mangled/marked traffic to the above class
#
sudo /sbin/tc filter add dev $IF parent 1:0 prio 1 protocol ip handle 11 fw flowid 1:11

#
# Use iptables to mangle TCP packets to port 4001 and mark packet for tc filtering
#
sudo /sbin/iptables -A OUTPUT -t mangle -p tcp --dport 4001 -j MARK --set-mark 11

Итак, предыдущий фрагмент работает, но как изменить политику, чтобы каждый входящий пакет с целевым портом 80 задерживался? - попытался попробовать iptables с PREROUTING, но все равно не работает?

Добавление задержки может быть выполнено для входящих (входящих) или исходящих (исходящих) пакетов (или обоих). Задержка входящих пакетов немного сложнее (потому что пакет уже прибыл), но достижима с Промежуточный функциональный блок устройство (посмотрите Вот. ищите "нетем на входящем трафике").

Поскольку ваша цель может быть достигнута путем задержки входящего или исходящего трафика, а задержка исходящего трафика проще, я бы рекомендовал это сделать. Ваша конфигурация почти верна: вам просто нужно заменить строку iptables mangle на

sudo iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j MARK --set-mark 11