Я могу создавать правила для ограничения всей подсети или для ограничения отдельных IP-адресов с помощью tc и htb. Я хочу использовать диапазоны CIDR, чтобы все было несколько элегантно.
Все указанные машины работают под управлением CentOS 7. Я пытался использовать tc + htb для достижения этой цели, но я открыт для других инструментов, если есть лучший метод.
Моя цель - ограничить диапазон CIDR и назначить индивидуальные ограничения для каждого IP-адреса источника.
Например, установите глобальный предел для 192.168.1.0/24 на 100 Мбит / с, и каждый исходный IP-адрес в пределах 192.168.1.0/24 имеет индивидуальный лимит загрузки 10 Мбит / с, который не может быть превышен.
Вот рабочий пример того, что я делаю для каждого ip (если возможно, стараюсь упростить процедуру):
Эти шаги нужно выполнить только один раз:
Создайте исходный HTB qdisc:
Создать корневой класс:
Эти шаги должны быть выполнены для каждого IP-адреса в диапазоне CIDR с использованием текущего метода (который я надеюсь улучшить):
Для каждого IP-адреса источника необходимо добавить класс:
Для каждого IP-адреса источника необходимо создать фильтр:
Возможно, нет элегантного способа сделать это, но мы будем очень благодарны за любые советы. Я просмотрел несколько руководств в Интернете, таких как http://lartc.org. Спасибо.
Я думаю, вы могли бы попробовать с хешем, давая одно ведро на IP, чтобы обеспечить равное количество пакетов в секунду на IP. Вам также следует использовать sfq qdisc, так как htb - не лучший вариант.
tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
# Here, you want a fair qdisc
tc qdisc add dev eth0 parent 1:1 handle 101: sfq perturb 10
# Put a range in the filter
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.0/24 flowid 1:1
# Create 254 bucket, each ip src will be attached to one bucket
tc filter add dev eth0 parent 1:1 protocol ip handle 10 flow hash keys nfct-src divisor 254