htb — корневой способ фильтрации с идентификатором 1. Не классифицированный траффик отнести к классу 1:15 (удалить — delete вместо add):
1 |
tc qdisc add dev enp17s10 root handle 1: htb default 15</code><em> </em> |
создать родительский класс (для расширения канала, когда остальные не заняты):
1 |
tc class add dev enp17s10 parent 1: classid 1:1 htb rate 100MBit ceil 100MBit |
создать подкласс подсети 30MBit (ceil — расширение канала):
1 |
tc class add dev enp17s10 parent 1:1 classid 1:11 htb rate 30MBit ceil 100MBit |
создать подкласс подсети 20MBit (без расширения):
1 |
tc class add dev enp17s10 parent 1:1 classid 1:12 htb rate 20MBit |
40MBit для всех остальных:
1 |
tc class add dev enp17s10 parent 1:1 classid 1:15 htb rate 40MBit |
Подключить способ фильтрации «sfq» вместо «FIFO», для равномерного распределения:
1 2 3 |
tc qdisc add dev enp17s10 parent 1:11 handle 10:0 sfq perturb 10 tc qdisc add dev enp17s10 parent 1:12 handle 20:0 sfq perturb 10 tc qdisc add dev enp17s10 parent 1:15 handle 30:0 sfq perturb 10 |
Фильтры, по подсетям (для «всех остальных» уже всё задано):
1 2 |
# <code>tc filter add dev enp17s10 protocol ip parent 1:0 prio 1 u32 match ip src 172.16.1.0/24 flowid 1:11 # tc filter add dev enp17s10 protocol ip parent 1:0 prio 1 u32 match ip src 172.16.2.0/24 flowid 1:12 |
Всем 4, когда не занято, а кое-кому 100 (рабочий вариант):
1 2 3 4 |
# <code>tc qdisc add dev $DEV enp17s10 root handle 1: cbq avpkt 1000 bandwidth 100MBit # tc class add dev $DEV enp17s10 parent 1: classid 1:1 cbq rate 4MBit allot 1500 prio 5 bounded isolated # tc filter add dev $DEV enp17s10 parent 1: protocol ip prio 16 u32 match ip dst 192.168.3.0/24 flowid 1:1 # tc filter add dev $DEV enp17s10 parent 1: protocol ip prio 15 u32 match ip dst 192.168.3.104 flowid 1:0 |
При ограничении трафика на внутреннем интерфейсе, он скапливается на внешнем, по этому нужно использовать псевдо устройство IFB (ingress) на внешнем и классифицировать от него.