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/19 00:16] – [ng_lagg - if_lagg on netgraph] root | software:freebsd:lagg_on_netgraph [2022/02/04 18:33] – removed - external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== ng_lagg - if_lagg on netgraph ====== | ||
- | По неизвестной причине использование if_lagg и двух сетевых адаптеров igb на FreeBSD 10.1 amd64 приводило к большой нагрузке на CPU, потере пакетов и потере связи.\\ | ||
- | Реализация объединения сетевых адаптеров средствами netgraph не подвержена подобной проблеме.\\ | ||
- | **Cкрипт**: | ||
- | |||
- | ===== Использование ===== | ||
- | ==== Создание LAGG интерфейса и добавление сетевых адаптеров ==== | ||
- | < | ||
- | Создаст интерфейс ngeth0 (ngethX - если X-1 существует), | ||
- | Также будет сгенерирован и установлен случайный мак адрес.\\ | ||
- | |||
- | < | ||
- | Создаст интерфейс с именем xxxLAGG, остальное как в примере выше.\\ | ||
- | Имя интерфейса произвольное.\\ | ||
- | |||
- | == ВАЖНО! == | ||
- | 1. Имя интерфейса не должно содержать: | ||
- | Это ограничение netgraph.\\ | ||
- | Подробнее: | ||
- | |||
- | 2. В LAGG на базе netgraph можно добавлять только сетевые интерфейсы к которые работают с нодой ng_ether.\\ | ||
- | Список доступных интерфейсов можно увидеть так: | ||
- | < | ||
- | Если ничего нет, то убедитесь что нода ng_ether загружена, | ||
- | < | ||
- | |||
- | |||
- | ==== Удаление LAGG интерфейса ==== | ||
- | < | ||
- | или | ||
- | < | ||
- | в зависимости от названия интерфейса. | ||
- | |||
- | |||
- | ==== Добавление интерфейса в существующий LAGG ==== | ||
- | < | ||
- | |||
- | |||
- | ==== Удаление интерфейса из LAGG ==== | ||
- | < | ||
- | |||
- | == ВАЖНО! == | ||
- | Проверки на принадлежность интерфейса к какому либо lagg на базе netgrapf не производится.\\ | ||
- | Код просто отключает lower хук интерфейса не производя никаких проверок.\\ | ||
- | |||
- | |||
- | ===== Этапы создания lagg на простом примере ===== | ||
- | - Загружаем модуль ng_ether, остальные модули загрузятся автоматически при исполнении команд mkpeer. | ||
- | - Инициализируем/ | ||
- | - Включаем неразборчивый режим на сетевых интерфейсах: | ||
- | - Отключаем автоматической выставление 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. | ||
- | - Добавляем фильтр в ноду lagg0_vlan, чтобы пакеты из vlan 21 пересылались через хук vlan21 на интерфейс ngvlan21. | ||
- | |||
- | |||
- | ==== Замечания ==== | ||
- | * Настройка one2many отсутствует потому что после создания нода работает в режиме NG_ONE2MANY_XMIT_ROUNDROBIN для исходящего трафика, | ||
- | * ng_one2many можно заменить на ng_bpf, и с помощью ассемблера BPF реализовать распределение исходящих пакетов по L2/L3/L4 адресам. Пример использования ng_bpf: [[ru: | ||
- | |||
- | |||
- | ==== Скрипт - для двух сетевых интерфейсов ==== | ||
- | < | ||
- | |||
- | ifconfig igb0 up | ||
- | ifconfig igb1 up | ||
- | |||
- | ngctl msg igb0: setpromisc 1 | ||
- | ngctl msg igb1: setpromisc 1 | ||
- | ngctl msg igb0: setautosrc 0 | ||
- | ngctl msg igb1: setautosrc 0 | ||
- | |||
- | |||
- | ngctl mkpeer igb0: one2many lower many0 | ||
- | ngctl name igb0:lower lagg0 | ||
- | ngctl connect igb1: lagg0: lower many1 | ||
- | |||
- | ngctl mkpeer lagg0: vlan one downstream | ||
- | ngctl name lagg0:one lagg0_vlan | ||
- | |||
- | |||
- | |||
- | ngctl mkpeer lagg0_vlan: eiface vlan21 ether | ||
- | ngctl name lagg0_vlan: | ||
- | ifconfig ngeth0 name ngvlan21 | ||
- | ifconfig ngvlan21 link 00: | ||
- | ifconfig ngvlan21 inet 192.168.0.20 netmask 255.255.255.0 | ||
- | ngctl msg lagg0_vlan: addfilter '{ vid=21 hook=" | ||
- | |||
- | |||
- | ===== Литература ===== | ||
- | [[https:// | ||
- | [[https:// | ||
- | [[https:// | ||
- | [[https:// | ||
- | [[https:// |