Существует ли способ ограничить пропускную способность на IP с помощью HTB + диапазон CIDR в Linux?

Я могу создать правила ограничить всю подсеть или ограничить отдельные IP-адреса с tc и htb. Я надеюсь использовать диапазоны CIDR для хранения вещей несколько изящными.

Рассматриваемые машины все выполняют CentOS 7. Я пытался использовать tc + htb для выполнения этого, но я открыт для других инструментов, если существует лучший метод.

Моя цель состоит в том, чтобы ограничить CIDR, располагаются и присваивают отдельные пределы на исходный IP-адрес.

Например, установите глобальный предел для 192.168.1.0/24 к 100Mb/s, и каждый исходный IP в 192.168.1.0/24 имеет отдельный предел загрузки 10Mb/s, который не может быть превышен.

Вот рабочий пример того, что я делаю для каждого IP (надеющийся упрощать процедуру если возможный):

Эти шаги только должны быть выполнены однажды:

Создайте начальную букву HTB qdisc:

tc qdisc добавляют, что корень dev eth0 обрабатывает 1: значение по умолчанию htb 12

Создайте корневой класс:

класс tc добавляет, что dev eth0 порождает 1: classid 1:1 htb уровень 100 Мбит перекрывают 100 Мбит

Эти шаги должны быть выполнены для каждого IP в диапазоне CIDR с помощью существующего метода (что я надеюсь, надо надеяться, улучшать):

Класс должен быть добавлен для каждого исходного IP:

класс tc добавляет родителя dev eth0 1:1 classid 1:10 htb уровень, 10 Мбит перекрывают 100 Мбит

класс tc добавляет родителя dev eth0 1:1 classid 1:11 htb уровень, 10 Мбит перекрывают 100 Мбит

класс tc добавляет родителя dev eth0 1:1 classid 1:12 htb уровень, 10 Мбит перекрывают 100 Мбит

Фильтр должен быть создан для каждого исходного IP:

фильтр tc добавляет родителя IP протокола dev eth0 1:0 IP соответствия prio 1 u32 src 192.168.1.2 flowid 1:10

фильтр tc добавляет родителя IP протокола dev eth0 1:0 IP соответствия prio 1 u32 src 192.168.1.3 flowid 1:11

Может случиться так, что нет никакого изящного способа сделать это, но любые подсказки / совет значительно ценился бы. Я просмотрел несколько руководств онлайн, таких как http://lartc.org.Спасибо.

0
задан 14 July 2015 в 01:04
2 ответа

Я думаю, вы могли бы попробовать с хешем, давая по одному ведру на каждый 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
0
ответ дан 24 November 2019 в 08:24

Здравствуйте, вы можете найти здесь: Классификатор меток брандмауэра Linux (tc-fw) не работает после обновления до Debian 9 - ядро ​​4.19 рабочая конфигурация для вашей задачи.

Бр, Николай

0
ответ дан 27 November 2020 в 07:54

Теги

Похожие вопросы