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

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

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

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

 переменные
IF= ло
IFSPEED=100 Мбит / с # Получить от sudo /sbin/ethtool $IF
DELAY=1000мс


#
# Создать дерево классных объектов HTB
#
sudo /sbin/tc qdisc добавить dev $IF дескриптор 1: root htb

#
# Создайте классное дочернее ведро с классом 1:11
#
класс sudo / sbin / tc добавить dev $IF родитель 1: classid 1:11 htb rate $ IFSPEED

#
# Создайте дочерний элемент qdisc (бесклассовый) netem, чтобы обеспечить задержку для пакетов в этом 'сегменте'
#
sudo /sbin/tc qdisc add dev $IF родитель 1:11 дескриптор 11: задержка netem $ DELAY

#
# Фильтр искаженного / помеченного трафика к вышеуказанному классу
#
Фильтр sudo / sbin / tc добавить dev $IF родительский 1:0 протокол prio 1 протокол ip дескриптор 11 fw flowid 1:11

#
# Используйте iptables для манипулирования TCP-пакетами на порт 4001 и пометить пакет для фильтрации tc
#
sudo /sbin/iptables -A ВЫХОД -t mangle -p tcp --dport 4001 -j MARK --set-mark 11

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

1 ответ

Решение

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

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

sudo iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j MARK --set-mark 11
Другие вопросы по тегам