Мне нужно смоделировать замедление трафика на определенный сервис. Это означает, что мне нужно медленное соединение на определенном порту. У меня есть этот сценарий, который вводит задержку для определенного IP-адреса на всех портах, но в этой системе работают другие службы, которые я не могу замедлить.
echo "simulating slowdown infrstructure on interface $DEV to IP:$IP for port:$PORT";
tc qdisc del dev $DEV root
tc qdisc add dev $DEV handle 1: root htb
tc class add dev $DEV parent 1: classid 1:15 htb rate 1000Mbps
tc qdisc add dev $DEV parent 1:15 handle 11 netem delay 4000ms 2000ms distribution normal
tc filter add dev $DEV parent 1:0 prio 1 protocol ip handle 11 fw flowid 1:15
iptables -A OUTPUT -t mangle -d "$IP" -j MARK --set-mark 11
Я не могу понять, что делает последняя строка здесь, потому что, похоже, она работает без нее.
((сценарий отмены здесь :))
iptables -D OUTPUT -t mangle -d "$IP" -j MARK --set-mark 11
tc qdisc del dev $DEV root
Последняя строка перехватывает все пакеты на определенный IP-адрес (на всех портах) и добавляет на него отметку (только внутри ядра).
Все пакеты со значком будут замедляться. Вам просто нужно указать порт назначения в этом правиле, и все должно быть хорошо:
iptables -A OUTPUT -t mangle -d "$IP" -p tcp -- dport ${Port} -j MARK --set-mark 11