Linux Advanced Routing & Traffic Control HOWTO
Шрифт:
Теперь вы должны наблюдать увеличение значения счетчика пакетов в классе 1:10, при попытке ping– ануть из локальной сети какой-нибудь сайт в Интернете.
Действие – j RETURN предотвращает движение пакетов по всем правилам. Поэтому все ICMP-пакеты будут проходить только это правило. Добавим еще ряд правил, которые будут
Поднимем приоритет для ssh– пакетов:
а так же для пакетов, с которых начинается TCP-соединение, т.е. SYN-пакетов:
И так далее. После того, как в цепочку PREROUTING, таблицы mangle, будут внесены все необходимые правила, закончим ее правилом:
Это заключительное правило отправит оставшиеся немаркированные пакеты в класс 1:15. Фактически, это правило можно опустить, так как класс 1:15 был задан по-умолчанию, но тем не менее, я оставляю его, чтобы сохранить единство настроек и кроме того, иногда бывает полезно увидеть счетчик пакетов для этого правила.
Нелишним будет добавить те же правила в цепочку OUTPUT, заменив имя цепочки PREROUTING на OUTPUT (s/PREROUTING/OUTPUT/). Тогда трафик, сгенерированный локальными процессами на маршрутизаторе, также будет классифицирован по категориям. Но, в отличие от вышеприведенных правил, в цепочке OUTPUT, я устанавливаю метку – j MARK –set-mark 0x3, таким образом трафик от маршрутизатора получает более высокий приоритет.
15.10.3. Дополнительная оптимизация
В результате приведенных настроек, мы получили вполне работоспособную конфигурацию. Однако, в каждом конкретном случае, эти настройки всегда можно немного улучшить. Найдите время и проследите – куда идет основной трафик и как лучше им распорядиться. Я потратил огромное количество времени и наконец довел свою конфигурацию до оптимального уровня, практически сведя на нет бесчисленные таймауты.
Если вдруг обнаружится, что через некоторые классы проходит подавляющее большинство трафика, то к ним
15.10.4. Выполнение настроек во время загрузки системы.
Уверен, что можно найти множество способов, чтобы произвести настройку маршрутизатора во время загрузки. Для себя я создал скрипт /etc/init.d/packetfilter, который принимает команды [start | stop | stop-tables | start-tables | reload-tables]. Он конфигурирует дисциплины (qdiscs) и загружает необходимые модули ядра. Этот же сценарий загружает правила iptables из файла /etc/network/iptables-rules, которые предварительно могут быть сохранены утилитой iptables-save и восстановлены — iptables-restore.
Глава 16. Построение мостов и псевдо-мостов с proxy arp.
Мосты (bridges) — это специальные устройства, которые могут быть установлены в сети и не требуют предварительной настройки. Сетевой коммутатор (switch) — это особый вид многопортового моста. Мост — это чаще всего двухпортовый коммутатор (switch). На базе Linux может быть построен многопортовый (несколько интерфейсов) мост, по сути — настоящий коммутатор (switch).
Мосты часто применяются для объединения фрагментированных стационарных сетей. Поскольку мост — это устройство 2-го уровня (Канальный уровень по классификации OCI), который лежит ниже сетевого уровня, где "заправляют" протоколы IP, то ни серверы, ни маршрутизаторы даже не подозревают о его существовании. Это означает, что вы можете блокировать или изменять некоторые пакеты, а так же формировать трафик по своему усмотрению.
Еще одно замечательное свойство моста — в случае выхода из строя, мост может быть заменен отрезком кабеля или сетевым концентратором (hub — хабом).
Одна из отрицательных сторон — мост может стать причиной большой неразберихи. traceroute его не "видит" и не сможет указать в каком месте теряются пакеты. Так что ничего удивительного, если какая-нибудь организация считает правильным "ничего не менять".
Мосты на базе Linux 2.4/2.5 подробно описаны на сайте http://bridge.sourceforge.net/.
16.1. Бриджинг и iptables.
Что касается Linux 2.4.20, то бриджинг и iptables не "видят" друг друга без установки вспомогательных модулей. Если построен мост между eth0 и eth1, то пакеты, передаваемые по мосту, проходят мимо iptables. Это означает, что ни фильтрация, ни nat, ни возможность внесения изменений в заголовки пакетов (mangling) вам недоступны. Начиная с Linux 2.5.45 это было исправлено.
Хочу упомянуть еще об одном проекте — etables. Он позволяет вытворять такие штуки, как MACNAT и brouting. Это действительно круто!