Я хочу ограничить скорость загрузки с любого IP до 800 кбит (это работает) и я хочу ограничить скорость загрузки помеченных пакетов до 400 кбит.
Я не получаю никаких ошибок, но это не ограничивает скорость загрузки пакетов, отмеченных номером 30. Я подтвердил с помощью iptables-save -c, что пакеты помечены правильно. Поэтому я думаю, что мой синтаксис фильтра для метки захвата 30 неверен, хотя ошибки нет.
/sbin/tc qdisc add dev $DEV handle ffff: ingress
/sbin/tc filter add dev $DEV parent ffff: prio 40 protocol ip handle 30 fw police rate 400kbit burst 10k drop flowid :1
#slightly different order of parameters, also doesn't work
/sbin/tc filter add dev $DEV parent ffff: protocol ip prio 40 handle 30 fw police rate 400kbit burst 10k drop flowid :1
#if I set the priority to 50 then I get an error saying "We have an error talking to the kernel"
#kernel is 4.4.50
/sbin/tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 800kbit burst 10k drop flowid :1
Аналогичная команда tc (скорость отслеживания помеченных пакетов) представлена в следующем примере. $TC filter add dev $INDEV parent ffff: protocol ip prio 50 handle 1 fw police rate 1kbit burst 40 mtu 9k drop flowid :1
http://linuxdocs.org/HOWTOs/Adv-Routing-HOWTO-14.html Тот же пример также появляется здесь https://www.iplocation.net/lartc-ddos
Если я вручную добавлю другое правило для определенного IP-адреса с равным приоритетом выше общего или более низким приоритетом, я могу ограничить скорость до 400 кбит / с. Но я хочу ограничить скорость пакетов, помеченных / искаженных iptables.
Это допустимый набор команд, но проблема в том, что отметка происходит после обработки входящего qdisc.