На данный момент управление качеством обслуживания возможно только через консольный интерфейс с помощью программы tc, позволяющей создавать классы, фильтры, а так же назначить дисциплину обслуживания.
Целью этой главы не является полное описание возможностей шейпинга траффика в ОС Linux (на которой базируется ПО маршрутиазтора), а лишь рассмотрение основных моментов его использования.
В первую очередь следует отметить, что управлять скоростью можно только исходящего трафика (что, в общем, вполне разумно), поэтому при написании правил шейпинга необходимо определить интерфейс, на котором этот трафик будет исходящим. Рассмотрим в качестве примера простую сеть, схема которой представленна ниже:
К примеру, если мы хотим ограничить пропускную способность канала для входящего трафика к хосту PC2, то нам необходимо работать с интерфейсом eth1 маршрутизатора, поскольку через него проходит иходящий трафик к хосту PC2. В качестве примера ограничим весь трафик, поступающию на PC2, для этого нам необходимо выполнить следующие команды:
# tc qdisc add dev eth1 root handle 1: htb # tc class add dev eth1 parent 1: classid 1:1 htb rate 200kbps # tc filter add dev eth1 parent 1: prio 1 protocol ip u32 match ip dst 192.168.90.2 flowid 1:1
Первая команда указывает, что для интерфейса eth1 будет использоваться HTB - пакетный шедулер, непосредственно и занимающийся шейпингом трафика (к примеру, еще есть CBQ). Вторая команда создает класс, являющимся дочерним первого (параметр parent 1:
), назначающий ему класс 1:1 (classid 1:1
), и максимальную скорость в 200kbps - кбайт в секунду. Последняя команда создает фильтр с приоритетом 1 (prio 1
), назначающийся корневому классу (parent 1:
) и направляющий весь трафик, удовлетворяющий критерию, что IP-адрес получателя пакета равен 192.168.90.2 (protocol ip u32 match ip dst 192.168.90.2
), в класс 1:1 (flowid 1:1
).