{panel}
(!) Проверяйте к какому из двух случаев относится ваша установка. Выполнение действий в этой статье может привести к снижению стабильности работы фильтрации или потере управления сервером.
{panel}
В случае, если для приёма зеркала необходимо использовать большое число VLAN это может создать дополнительную нагрузку.
Нагрузку можно условно разделить на две части:
# Число правил в firewall, которые проходит пакет
# Обработка VLAN-тегов сетевой картой/сетевым стеком
Если со вторым пунктом мы ничего поделать скорее всего не сможем, то число правил в некоторых случаях можно сократить. Рассмотрим примеры.
h2. Один интерфейс в системе не занимается приёмом зеркала трафика
h3. Входные данные
* eth0 - выход в интернет
* eth1 - сетевая карта на которую приходит тегированое зеркало трафика
** eth1.100
** eth1.101
** eth1.102
** ...
** eth1.129
h3. Решение
Использовать в меню опцию:
{quote}
Настройки Carbon Reductor \-> Настройки алгоритма фильтрации \-> Единственный интерфейс на который не приходит зеркало
{quote}
В ней нужно указать:
{code}
eth0
{code}
После рестарта в цепочке raw PREROUTING будет 1 правило вместо 30 для каждого VLAN на сетевой карте eth1, которое будет выглядеть следующим образом:
{code}
iptables -t raw -I PREROUTING ! -i eth0 -j mirror_traffic
{code}
{color:#993300}{*}Но эта опция безопасна только в случае, если такой интерфейс один.*{color}
h2. Несколько интерфейсов в системе не занимаются приёмом зеркала трафика
h3. Входные данные
Допустим в вашей конфигурации выход в Интернет (default route) отделен от менеджмента и (или) доступа к сети абонентов, неважно с помощью VLAN или физических линков. Для простоты рассмотрим вариант с физическими линками:
* eth0 - выход в Интернет
* eth1 - менеджмент
* eth2 - доступ к сети абонентов
* eth3 - доступ к сети абонентов
* eth4 - приём зеркала трафика
** eth4.100 ... eth4.130 - интерфейсы для захвата тегированного трафика
* eth5 - приём зеркала трафика
** eth5.100 ... eth5.130 - интерфейсы для захвата тегированного трафика
h3. Проблемы, если применять подход выше
Если прописать eth0 в качестве _"Единственного интерфейса на который не приходит зеркало",_ то в цепочку mirror_traffic будет попадать трафик для менеджмента и доступа к сети абонентов. {color:#993300}{*}Это может привести к снижению стабильности работы фильтрации{*}{color}, так что так делать не рекомендуется. Но что делать, если нагрузку снизить надо?
h3. Решение
Создаём хук для файрвола, в котором переопределяем функцию raw_links, используя то, что iptables поддерживает ограниченные "маски" в названиях интерфейсов.
{code}
touch /app/reductor/cfg/userinfo/hooks/reductor_firewall.sh
chmod a+x /app/reductor/cfg/userinfo/hooks/reductor_firewall.sh
{code}и записываем в него:
{code}
#!/bin/bash
raw_links() {
for device in eth4 eth5; do
iptables -t raw -A PREROUTING -i "$device.+" -j mirror_traffic
done
}
{code}
Что переопредит функцию в скрипте файрвола и заменит создание 62 правил для каждого из VLAN на два правила вида:
{code}
iptables -t raw -A PREROUTING -i eth4.+ -j mirror_traffic
iptables -t raw -A PREROUTING -i eth5.+ -j mirror_traffic
{code}
(!) Проверяйте к какому из двух случаев относится ваша установка. Выполнение действий в этой статье может привести к снижению стабильности работы фильтрации или потере управления сервером.
{panel}
В случае, если для приёма зеркала необходимо использовать большое число VLAN это может создать дополнительную нагрузку.
Нагрузку можно условно разделить на две части:
# Число правил в firewall, которые проходит пакет
# Обработка VLAN-тегов сетевой картой/сетевым стеком
Если со вторым пунктом мы ничего поделать скорее всего не сможем, то число правил в некоторых случаях можно сократить. Рассмотрим примеры.
h2. Один интерфейс в системе не занимается приёмом зеркала трафика
h3. Входные данные
* eth0 - выход в интернет
* eth1 - сетевая карта на которую приходит тегированое зеркало трафика
** eth1.100
** eth1.101
** eth1.102
** ...
** eth1.129
h3. Решение
Использовать в меню опцию:
{quote}
Настройки Carbon Reductor \-> Настройки алгоритма фильтрации \-> Единственный интерфейс на который не приходит зеркало
{quote}
В ней нужно указать:
{code}
eth0
{code}
После рестарта в цепочке raw PREROUTING будет 1 правило вместо 30 для каждого VLAN на сетевой карте eth1, которое будет выглядеть следующим образом:
{code}
iptables -t raw -I PREROUTING ! -i eth0 -j mirror_traffic
{code}
{color:#993300}{*}Но эта опция безопасна только в случае, если такой интерфейс один.*{color}
h2. Несколько интерфейсов в системе не занимаются приёмом зеркала трафика
h3. Входные данные
Допустим в вашей конфигурации выход в Интернет (default route) отделен от менеджмента и (или) доступа к сети абонентов, неважно с помощью VLAN или физических линков. Для простоты рассмотрим вариант с физическими линками:
* eth0 - выход в Интернет
* eth1 - менеджмент
* eth2 - доступ к сети абонентов
* eth3 - доступ к сети абонентов
* eth4 - приём зеркала трафика
** eth4.100 ... eth4.130 - интерфейсы для захвата тегированного трафика
* eth5 - приём зеркала трафика
** eth5.100 ... eth5.130 - интерфейсы для захвата тегированного трафика
h3. Проблемы, если применять подход выше
Если прописать eth0 в качестве _"Единственного интерфейса на который не приходит зеркало",_ то в цепочку mirror_traffic будет попадать трафик для менеджмента и доступа к сети абонентов. {color:#993300}{*}Это может привести к снижению стабильности работы фильтрации{*}{color}, так что так делать не рекомендуется. Но что делать, если нагрузку снизить надо?
h3. Решение
Создаём хук для файрвола, в котором переопределяем функцию raw_links, используя то, что iptables поддерживает ограниченные "маски" в названиях интерфейсов.
{code}
touch /app/reductor/cfg/userinfo/hooks/reductor_firewall.sh
chmod a+x /app/reductor/cfg/userinfo/hooks/reductor_firewall.sh
{code}и записываем в него:
{code}
#!/bin/bash
raw_links() {
for device in eth4 eth5; do
iptables -t raw -A PREROUTING -i "$device.+" -j mirror_traffic
done
}
{code}
Что переопредит функцию в скрипте файрвола и заменит создание 62 правил для каждого из VLAN на два правила вида:
{code}
iptables -t raw -A PREROUTING -i eth4.+ -j mirror_traffic
iptables -t raw -A PREROUTING -i eth5.+ -j mirror_traffic
{code}