Для непрерывного тестирования я хотел бы, чтобы сервер 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