Linux Advanced Routing & Traffic Control HOWTO (Hubert, Graf) - страница 47

9.5.4.4. Пример конфигурирования.

>               1:           корневая дисциплина

>               |

>              1:1           дочерний класс

>             /   \

>            /     \

>          1:3     1:4       краевые классы

>           |       |

>          30:     40:       дисциплины

>         (sfq)   (sfq)           

Рассмотрим реализацию следующего сценария. Необходимо ограничить полосу пропускания веб-трафика до 5 мегабит, а SMTP — до 3 мегабит. Суммарная полоса пропускания не должна превышать 6 мегабит. На сервере стоит 100-мегабитная сетевая карта, классы могут занимать пропускную способность друг у друга.

># tc qdisc add dev eth0 root handle 1:0 cbq bandwidth 100Mbit \

> avpkt 1000 cell 8

># tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 100Mbit \

> rate 6Mbit weight 0.6Mbit prio 8 allot 1514 cell 8 maxburst 20 \

> avpkt 1000 bounded

В этой части устанавливается корневая дисциплина и класс 1:1, пропускная способность которого ограничена величиной в 6 мегабит.

Как видите, CBQ требует много больше настроек по сравнению с HTB.

># tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 100Mbit \

> rate 5Mbit weight 0.5Mbit prio 5 allot 1514 cell 8 maxburst 20 \

> avpkt 1000

># tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 100Mbit \

> rate 3Mbit weight 0.3Mbit prio 5 allot 1514 cell 8 maxburst 20 \

> avpkt 1000

Здесь создаются два класса, управляющие веб и почтовым трафиками. Обратите внимание на то, как указаны веса классов. Пропускная способность классов не ограничивается, но они подчинены классу 1:1, который имеет ограничение по полосе пропускания. Таким образом, сумма пропускных способностей этих классов не сможет превысить ограничение родительского класса. Старшие номера дескрипторов дочерних классов (classid) наследуют старший номер родительского класса.

># tc qdisc add dev eth0 parent 1:3 handle 30: sfq

># tc qdisc add dev eth0 parent 1:4 handle 40: sfq

При создании, к каждому из классов, по-умолчанию присоединяется дисциплина FIFO, однако, для более равномерного распределения пропускной способности между соединениями, присоединим к каждому из классов дисциплину обработки очереди SFQ.

># tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip \

> sport 80 0xffff flowid 1:3

># tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip \

> sport 25 0xffff flowid 1:4

В заключение, трафик классифицируется с помощью фильтров и направляется в нужные классы.

Обратите внимание: команда tc class add СОЗДАЕТ класс в пределах дисциплины, а tc qdisc add – добавляет дисциплину к классу.