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

>tc qdisc add dev imq0 parent 1:20 handle 20: sfq


>tc filter add dev imq0 parent 10:0 protocol ip prio 1 u32 match \

> ip dst 10.0.0.230/32 flowid 1:10

В этом примере для классификации пакетов используется селектор u32, однако, при работе с imq, могут использоваться и другие селекторы.

Отбираемый трафик маркируется средствами iptables:

>iptables –t mangle –A PREROUTING –i eth0 –j IMQ –todev 0

>ip link set imq0 up

Действие IMQ в iptables

допускается использовать только в цепочках PREROUTING и POSTROUTING, таблицы mangle. Его синтаксис:

>IMQ [ -–todev n ]

где n – это номер устройства imq.

Это действие существует и в ip6tables.

Обратите внимание: трафик попадает на интерфейс не в тот момент, когда переходит к цели IMQ, а после обработки соответствующей цепочки. Точное место входа на устройство imq зависит от типа трафика (входящий/исходящий).

Для входящего трафика imq регистрируется с приоритетом NF_IP_PRI_MANGLE + 1. Это означает, что пакеты попадают на устройство сразу после прохождения цепочки PREROUTING. Для исходящего трафика, imq использует приоритет NF_IP_PRI_LAST, который гарантирует, что пакеты, уничтоженные пакетным фильтром не будут занимать полосу пропускания устройства.

Дополнительные сведения и "заплаты" вы найдете на сайте http://luxik.cdi.cz/~patrick/imq/

Глава 10. Распределение нагрузки по нескольким интерфейсам.

Существует несколько способов реализации такой схемы. Простейший и непосредственный способ представляет 'TEQL'. Это простейший компенсатор (True/Trivial link Equalizer). Как и большая часть того, что связано с очередями, балансировка нагрузки работает в обе стороны. Для полного эффекта обе стороны соединения должны работать совместно.

Представим ситуацию:

>              +-------+   eth1   +-------+

>              |       |==========|       |

>'сеть 1'  ----|   A   |          |   B   |---- 'сеть 2'

>              |       |==========|       |

>              +-------+   eth2   +-------+

A и B это маршрутизаторы, и пока мы будем предполагать, что оба работают под управлением Linux. Для передачи данных из сети 1 в сеть 2, маршрутизатору A необходимо распределить пакеты по обоим каналам. Маршрутизатор B должен быть настроен соответствующим образом, чтобы поддерживать это. Тоже самое относится и к передаче данных из сети 2 в сеть 1. Маршрутизатор B должен передавать данные по двум интерфейсам — eth1 и eth2.

Распределение выполняется устройством 'TEQL'. Вот необходимые команды (куда уж проще):

># tc qdisc add dev eth1 root teql0

># tc qdisc add dev eth2 root teql0

># ip link set dev teql0 up