Как добавить задержку во входящий трафик?
В целях непрерывного тестирования мне бы хотелось, чтобы сервер 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