Дисциплина HTB позволяет отдать предпочтение определенным пользователям или типам трафика, определяя их на основании IP-адресов или портов отправителя/получателя в разные классы трафика.
В первую очередь следует отметить, что управлять скоростью можно только исходящего трафика (что, в общем, вполне разумно), поэтому при добавлении правил шейпинга необходимо определить интерфейс, на котором этот трафик будет исходящим.
Реализация QoS на основе классовой дисциплины HTB состоит из двух этапов - создания класса и распределения трафика по классам в соответствии с определенными критериями с помощью фильтров. Классы, определяющие скорость трафика, могут добавляться как в корень, так и в другие подклассы, образуя иерархию классов. Фильтры добавляются в корень иерархии.
Особенность подклассов в том, что скорость одного подкласса может быть увеличена (в пределах скорости родительского класса) за счет неиспользуемой скорости другого подкласса.
Рассмотрим в качестве примера простую сеть, схема которой представленна ниже:
К примеру, если мы хотим ограничить пропускную способность канала для входящего трафика к хосту PC2, то нам необходимо работать с интерфейсом eth1 маршрутизатора, поскольку через него проходит исходящий трафик к хосту PC2. В качестве примера ограничим весь трафик, поступающий на PC2, для этого нам необходимо создать класс, в который будет поступать трафик, идущий к хосту PC2:
Short name - имя добавляемого класса. Используется при классификации трафика в фильтре
Enable - активен ли класс
Parent class - родительский класс. root - корневой класс. При добавлении класса в некорневой класс - добавляемый класс будет подклассом
Rate - пропускная способность, выделяемая классу
Ceil - максимальная пропускная способность подкласса (в случае, если другой подкласс этого же класса использует не всю предоставленную ему пропускную способность)
Чтобы избежать путаницы, заранее рассмотрим принятые сокращения, описывающие скорость:
Теперь нам необходимо классифицировать трафик, идущий к хосту PC2. Для этого нам необходимо создать фильтр:
Short name - имя фильтра
Enable - активен ли фильтр
Prio - приоритет фильтра. Чем меньше значение приоритета - тем он выше
Protocol - классификация трафика по используемому протоколу
Src - классификация трафика по адресу отправителя пакета
Dst - классификация трафика по адресу получателя пакета
Src port - классификация трафика по номеру порта отправителя пакета
Dst port - классификация трафика по номеру порта получателя пакета
Class - в какой класс направить пакет
В приведенным ваше примере мы ограничили входящую скорость для хоста PC2. Но исходящая осталась неограниченной. Чтобы исправить положение, необходимо определить, какой интерфейс является исходящем для трафика с PC2. Это зависит от того, кто запрашивает трафик с PC2, в нашем случае это может быть только PC1, следовательно интерфейс, через который пойдет трафик к PC1, будет eth0. Поэтому для ограничения исходящего трафика необходимо создать класс с требуемой скоростью и добавить фильтр, который будет отправлять трафик, идущий от хоста PC2 (src 192.168.90.2) направлять в нужный класс.