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

Тут вся хитрость состоит в том, чтобы определить некую 'область' (realm), основываясь на адресе отправителя или получателя. Примерно таким образом:

># ip route add Host/Network via Gateway dev Device realm RealmNumber

Для примера зададим номер 'области', равным 10, для нашей сети 192.168.10.0.

 # ip route add 192.168.10.0/24 via 192.168.10.1 dev eth1 realm 10

В фильтрах, основанных на классификаторе route, мы можем использовать номер 'области' (realm) для представления сетей или отдельных узлов сети.

># tc filter add dev eth1 parent 1:0 protocol ip prio 100 \

> route to 10 classid 1:10

Под действие данного правила попадут пакеты, направляющиеся в сеть 192.168.10.0

Фильтры данного типа можно строить и на основе адреса отправителя. Рассмотрим пример, когда к маршрутизатору, под управлением Linux, через интерфейс eth2 подключена сеть.

># ip route add 192.168.2.0/24 dev eth2 realm 2

># tc filter add dev eth1 parent 1:0 protocol ip prio 100 \

> route from 2 classid 1:2

Этот фильтр говорит о том, что пакеты из подсети 192.168.2.0 (область 2) будут отнесены к идентификатору класса 1:2.

12.3. Фильтры-ограничители трафика.

Более сложные системы управления трафиком можно строить на основе фильтров, которые зависят от пропускной способности и загруженности канала. Вы можете объявить фильтр, который не будет срабатывать, если загрузка канала превысила некоторую величину или наоборот, срабатывать только в том случае, если пропускная способность превысила заданное значение.

Так, если вы решили ограничить 5 Мбитный канал величиной в 4 Мбит/сек, вы можете вообще прекратить прием пакетов, если загруженность канала превысит 4 Мбит/сек, либо отбросить 1 Мбит/сек, а 4 Мбит/сек передать заданному классу.

При превышении заданного порога вы можете отбрасывать "лишние" пакеты, переклассифицировать их или передать другим фильтрам.

12.3.1. Способы ограничения.

Существует две основных возможности ограничения. Если вы собрали ядро с "функциями оценки" (estimators), то оно сможет более или менее точно измерять объем трафика, переданного тому или иному фильтру. Устройство функции оценки достаточно несложное — 25 раз в секунду подсчитывается объем переданных данных, на основе которого вычисляется загруженность канала.

Другой способ — Token Bucket Filter, который реализуется в пределах вашего фильтра. Это типичный шейпер, который может использоваться, если вам нужно просто ограничить полосу пропускания по какому-нибудь критерию.

12.3.1.1. Оценочная функция в ядре (estimator).

Тут все очень просто и имеется всего один параметр: