This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
software:freebsd:lagg_on_netgraph [2015/07/18 23:46] – [Создание LAGG интерфейса и добавление сетевых адаптеров] root | software:freebsd:lagg_on_netgraph [2015/07/19 21:40] – [rc.d скрипт] root | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== ng_lagg - if_lagg on netgraph ====== | ====== ng_lagg - if_lagg on netgraph ====== | ||
- | По неизвестной причине использование if_lagg и двух сетевых адаптеров igb на FreeBSD 10.1 amd64 приводило к большой нагрузке на CPU, потере пакетов и потере связи.\\ | + | По неизвестной причине использование |
Реализация объединения сетевых адаптеров средствами netgraph не подвержена подобной проблеме.\\ | Реализация объединения сетевых адаптеров средствами netgraph не подвержена подобной проблеме.\\ | ||
- | Последняя версия скрипта: [[http:// | + | Результат совместим с **if_vlan** и по сути мало чем отличается от других интерфейсов в системе.\\ |
+ | **Cкрипт**: [[http:// | ||
+ | **rc.d скрипт**: | ||
Line 8: | Line 10: | ||
==== Создание LAGG интерфейса и добавление сетевых адаптеров ==== | ==== Создание LAGG интерфейса и добавление сетевых адаптеров ==== | ||
< | < | ||
- | Создаст интерфейс ngeth0 (ngethX - если X-1 существует), | + | Создаст интерфейс |
Также будет сгенерирован и установлен случайный мак адрес.\\ | Также будет сгенерирован и установлен случайный мак адрес.\\ | ||
< | < | ||
- | Создаст интерфейс с именем xxxLAGG, остальное как в примере выше.\\ | + | Создаст интерфейс с именем |
Имя интерфейса произвольное.\\ | Имя интерфейса произвольное.\\ | ||
== ВАЖНО! == | == ВАЖНО! == | ||
- | 1. Имя интерфейса не должно содержать: | + | - Имя интерфейса не должно содержать: |
- | Это ограничение netgraph.\\ | + | - Максимальное количество интерфейсов в LAGG - 64. Это ограничение обусловлено константой **NG_ONE2MANY_MAX_LINKS** в файле / |
- | Подробнее: | + | - В LAGG на базе netgraph можно добавлять только сетевые интерфейсы к которые работают с нодой |
- | + | ||
- | 2. В LAGG на базе netgraph можно добавлять только сетевые интерфейсы к которые работают с нодой ng_ether.\\ | + | |
- | Список доступных интерфейсов можно увидеть так: | + | |
< | < | ||
- | Если ничего нет, то убедитесь что нода ng_ether загружена, | + | Если ничего нет, то убедитесь что нода |
< | < | ||
+ | |||
+ | |||
==== Удаление LAGG интерфейса ==== | ==== Удаление LAGG интерфейса ==== | ||
< | < | ||
Line 41: | Line 42: | ||
== ВАЖНО! == | == ВАЖНО! == | ||
Проверки на принадлежность интерфейса к какому либо lagg на базе netgrapf не производится.\\ | Проверки на принадлежность интерфейса к какому либо lagg на базе netgrapf не производится.\\ | ||
- | Код просто отключает lower хук интерфейса не производя никаких проверок. | + | Код просто отключает lower хук интерфейса не производя никаких проверок.\\ |
+ | |||
+ | |||
+ | ==== rc.d скрипт ==== | ||
+ | Для того чтобы интерфейс создавался при загрузке автоматически нужно: | ||
+ | - сохранить rc.d скрипт [[http:// | ||
+ | - сохранить скрипт [[http:// | ||
+ | - разрешить выполнение обоих скриптов (chmod +x) | ||
+ | - добавить в / | ||
+ | < | ||
+ | ng_lagg_interfaces=" | ||
+ | ng_lagg_lagg0=" | ||
+ | ng_lagg_xyzlagg=" | ||
+ | ifconfig_lagg0=" | ||
+ | ifconfig_xyzlagg=" | ||
+ | |||
+ | vlans_lagg0=" | ||
+ | create_args_vlan1234=" | ||
+ | ifconfig_vlan1234=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Замечания === | ||
+ | - Можно создавать сколько угодно интерфейсов, | ||
+ | - Нельзя давать имена интерфейсам " | ||
===== Этапы создания lagg на простом примере ===== | ===== Этапы создания lagg на простом примере ===== | ||
- | - Загружаем модуль ng_ether, остальные модули загрузятся автоматически при исполнении команд mkpeer. | + | - Загружаем модуль |
- Инициализируем/ | - Инициализируем/ | ||
- Включаем неразборчивый режим на сетевых интерфейсах: | - Включаем неразборчивый режим на сетевых интерфейсах: | ||
- Отключаем автоматической выставление mac адреса в исходящих пакетах на данных сетевых адаптерах. | - Отключаем автоматической выставление mac адреса в исходящих пакетах на данных сетевых адаптерах. | ||
- | - Создаём и подключаем ноду one2many к хуку lower на интерфейсе igb0 хуком many0. | + | - Создаём и подключаем ноду |
- | - Даём имя созданной ноде: lagg0. | + | - Даём имя созданной ноде: |
- | - Подключаем ноду lagg0 к хуку lower на интерфейсе igb1 хуком many1. | + | - Подключаем ноду |
- | - Создаём и подключаем ноду vlan к хуку one ноды lagg0. На этот хук будут поступать пакеты с хуков manyX и наоборот. | + | - Создаём и подключаем ноду |
- | - Даём имя созданной ноде: lagg0_vlan. | + | - Даём имя созданной ноде: |
- | - Создаём и подключаем ноду eiface к хуку vlan21 ноды lagg0_vlan. Теперь сетевой Интерфейс создан, | + | - Создаём и подключаем ноду |
- | - Переименовываем созданный сетевой интерфейс ngeth0 в ngvlan21 (будет отображаться в выводе ifconfig). | + | - Переименовываем созданный сетевой интерфейс |
- | - Настраиваем mac и ip адреса на интерфейсе ngvlan21. | + | - Настраиваем mac и ip адреса на интерфейсе |
- | - Добавляем фильтр в ноду lagg0_vlan, чтобы пакеты из vlan 21 пересылались через хук vlan21 на интерфейс ngvlan21. | + | - Добавляем фильтр в ноду |
==== Замечания ==== | ==== Замечания ==== | ||
- | * Настройка one2many отсутствует потому что после создания нода работает в режиме NG_ONE2MANY_XMIT_ROUNDROBIN для исходящего трафика, | + | * Настройка |
- | * ng_one2many можно заменить на ng_bpf, и с помощью ассемблера BPF реализовать распределение исходящих пакетов по L2/L3/L4 адресам. Пример использования ng_bpf: [[ru: | + | |