Site Tools


software:freebsd:lagg_on_netgraph

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
software:freebsd:lagg_on_netgraph [2015/07/18 23:46]
– [Создание LAGG интерфейса и добавление сетевых адаптеров] root
software:freebsd:lagg_on_netgraph [2015/07/19 22:48]
– [ng_lagg - if_lagg on netgraph] 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, потере пакетов и потере связи.\\+По неизвестной причине использование **if_lagg** и двух сетевых адаптеров igb на FreeBSD 10.1 amd64 приводило к большой нагрузке на CPU, потере пакетов и потере связи.\\
 Реализация объединения сетевых адаптеров средствами netgraph не подвержена подобной проблеме.\\ Реализация объединения сетевых адаптеров средствами netgraph не подвержена подобной проблеме.\\
-Последняя версия скрипта: [[http://netlab.linkpc.net/download/software/FreeBSD/ng_lagg/ng_lagg.sh|ng_lagg.sh]]\\+Результат совместим с **if_vlan** и по сути мало чем отличается от других интерфейсов в системе.\\ 
 +**Cкрипт**: [[http://netlab.linkpc.net/download/software/FreeBSD/ng_lagg/ng_lagg.sh|ng_lagg.sh]]\\ 
 +**rc.d скрипт**: [[http://netlab.linkpc.net/download/software/FreeBSD/ng_lagg/ng_lagg|ng_lagg]]\\
  
  
Line 8: Line 10:
 ==== Создание LAGG интерфейса и добавление сетевых адаптеров ==== ==== Создание LAGG интерфейса и добавление сетевых адаптеров ====
 <code>ng_lagg.sh start auto em0 em1 igb0</code> <code>ng_lagg.sh start auto em0 em1 igb0</code>
-Создаст интерфейс ngeth0 (ngethX - если X-1 существует), добавит в него адаптеры em0,em1 и igb0.\\+Создаст интерфейс **ngeth0** (**ngethX** - если X-1 существует), добавит в него адаптеры em0,em1 и igb0.\\
 Также будет сгенерирован и установлен случайный мак адрес.\\ Также будет сгенерирован и установлен случайный мак адрес.\\
  
 <code>ng_lagg.sh start xxxLAGG em0 em1 igb0</code> <code>ng_lagg.sh start xxxLAGG em0 em1 igb0</code>
-Создаст интерфейс с именем xxxLAGG, остальное как в примере выше.\\+Создаст интерфейс с именем **xxxLAGG**, остальное как в примере выше.\\
 Имя интерфейса произвольное.\\ Имя интерфейса произвольное.\\
  
 == ВАЖНО! == == ВАЖНО! ==
-1. Имя интерфейса не должно содержать: "." и ":".\\ +  - Имя интерфейса не должно содержать: "." и ":". Это ограничение netgraph, подробнее: [[https://www.freebsd.org/cgi/man.cgi?query=netgraph&sektion=4&apropos=0&manpath=FreeBSD+10.1-stable|man 4 netgraph]] 
-Это ограничение netgraph.\\ +  - Максимальное количество интерфейсов в LAGG - 64Это ограничение обусловлено константой **NG_ONE2MANY_MAX_LINKS** в файле /usr/src/sys/netgraph/ng_one2many.h. Если вам требуется больше, то измените значение константы и пересоберите **ng_one2many**. 
-Подробнее: [[https://www.freebsd.org/cgi/man.cgi?query=netgraph&sektion=4&apropos=0&manpath=FreeBSD+10.1-stable|man 4 netgraph]]\\ +  - В LAGG на базе netgraph можно добавлять только сетевые интерфейсы к которые работают с нодой **ng_ether**. Список доступных интерфейсов можно увидеть так:
- +
-2. В LAGG на базе netgraph можно добавлять только сетевые интерфейсы к которые работают с нодой ng_ether.\\ +
-Список доступных интерфейсов можно увидеть так:+
 <code>ngctl list | grep ether</code> <code>ngctl list | grep ether</code>
-Если ничего нет, то убедитесь что нода ng_ether загружена, или загрузите:+Если ничего нет, то убедитесь что нода **ng_ether** загружена, или загрузите:
 <code>kldload ng_ether</code> <code>kldload ng_ether</code>
 +
 +
 ==== Удаление LAGG интерфейса ==== ==== Удаление LAGG интерфейса ====
 <code>ng_lagg.sh stop ngeth0</code> <code>ng_lagg.sh stop ngeth0</code>
Line 41: Line 42:
 == ВАЖНО! == == ВАЖНО! ==
 Проверки на принадлежность интерфейса к какому либо lagg на базе netgrapf не производится.\\ Проверки на принадлежность интерфейса к какому либо lagg на базе netgrapf не производится.\\
-Код просто отключает lower хук интерфейса не производя никаких проверок.+Код просто отключает lower хук интерфейса не производя никаких проверок.\\ 
 + 
 + 
 +==== rc.d скрипт ==== 
 +Для того чтобы интерфейс создавался при загрузке автоматически нужно: 
 +  - сохранить rc.d скрипт [[http://netlab.linkpc.net/download/software/FreeBSD/ng_lagg/ng_lagg|ng_lagg]] в /usr/local/etc/rc.d/ 
 +  - сохранить скрипт [[http://netlab.linkpc.net/download/software/FreeBSD/ng_lagg/ng_lagg.sh|ng_lagg.sh]] в /usr/local/sbin/ 
 +  - разрешить выполнение обоих скриптов (chmod +x) 
 +  - добавить в /etc/rc.conf или /etc/rc.conf.local разрешение на его запуск и настройки: 
 +<code>ng_lagg_enable="YES" 
 +ng_lagg_interfaces="lagg0 xyzlagg" 
 +ng_lagg_lagg0="em0 em1" 
 +ng_lagg_xyzlagg="xl0 igb1" 
 +ifconfig_lagg0="inet 192.168.11.77 netmask 255.255.255.0" 
 +ifconfig_xyzlagg="inet 192.168.22.77 netmask 255.255.255.0" 
 + 
 +vlans_lagg0="vlan1234" 
 +create_args_vlan1234="vlan 1234" 
 +ifconfig_vlan1234="inet 192.168.0.77 netmask 255.255.255.0" 
 +</code> 
 + 
 + 
 +=== Замечания === 
 +  - Можно создавать сколько угодно интерфейсов, в каждом из них должен быть хотя бы один сетевой адаптер 
 +  - Нельзя давать имена интерфейсам "auto", так можно создать не более одного интерфейса, но по команде **stop** такой интерфейс не будет уничтожен.
  
  
 ===== Этапы создания lagg на простом примере ===== ===== Этапы создания lagg на простом примере =====
-  - Загружаем модуль ng_ether, остальные модули загрузятся автоматически при исполнении команд mkpeer.+  - Загружаем модуль **ng_ether**, остальные модули загрузятся автоматически при исполнении команды **mkpeer**.
   - Инициализируем/включаем сетевые интерфейсы.   - Инициализируем/включаем сетевые интерфейсы.
   - Включаем неразборчивый режим на сетевых интерфейсах: нужно для правильной работы.   - Включаем неразборчивый режим на сетевых интерфейсах: нужно для правильной работы.
   - Отключаем автоматической выставление mac адреса в исходящих пакетах на данных сетевых адаптерах.   - Отключаем автоматической выставление mac адреса в исходящих пакетах на данных сетевых адаптерах.
-  - Создаём и подключаем ноду one2many к хуку lower на интерфейсе igb0 хуком many0. +  - Создаём и подключаем ноду **one2many** к хуку **lower** на интерфейсе **igb0** хуком many0. 
-  - Даём имя созданной ноде: lagg0. +  - Даём имя созданной ноде: **lagg0**
-  - Подключаем ноду lagg0 к хуку lower на интерфейсе igb1 хуком many1. +  - Подключаем ноду **lagg0** к хуку **lower** на интерфейсе **igb1** хуком **many1**
-  - Создаём и подключаем ноду vlan к хуку one ноды lagg0. На этот хук будут поступать пакеты с хуков manyX и наоборот. +  - Создаём и подключаем ноду **vlan** к хуку **one** ноды **lagg0**. На этот хук будут поступать пакеты с хуков **manyX** и наоборот. 
-  - Даём имя созданной ноде: lagg0_vlan. +  - Даём имя созданной ноде: **lagg0_vlan**
-  - Создаём и подключаем ноду eiface к хуку vlan21 ноды lagg0_vlan. Теперь сетевой Интерфейс создан, но нужно настроить его и ноду lagg0_vlan чтобы им можно было пользоваться. +  - Создаём и подключаем ноду **eiface** к хуку **vlan21** ноды **lagg0_vlan**. Теперь сетевой Интерфейс создан, но нужно настроить его и ноду **lagg0_vlan** чтобы им можно было пользоваться. 
-  - Переименовываем созданный сетевой интерфейс ngeth0 в ngvlan21 (будет отображаться в выводе ifconfig). +  - Переименовываем созданный сетевой интерфейс **ngeth0** в **ngvlan21** (будет отображаться в выводе **ifconfig**). 
-  - Настраиваем mac и ip адреса на интерфейсе ngvlan21. +  - Настраиваем mac и ip адреса на интерфейсе **ngvlan21**
-  - Добавляем фильтр в ноду lagg0_vlan, чтобы пакеты из vlan 21 пересылались через хук vlan21 на интерфейс ngvlan21.+  - Добавляем фильтр в ноду **lagg0_vlan**, чтобы пакеты из vlan 21 пересылались через хук **vlan21** на интерфейс **ngvlan21**.
  
  
 ==== Замечания ==== ==== Замечания ====
-  * Настройка one2many отсутствует потому что после создания нода работает в режиме NG_ONE2MANY_XMIT_ROUNDROBIN для исходящего трафика, других приемлемых для lagg режимов у ноды нет. +  * Настройка **one2many** отсутствует потому что после создания нода работает в режиме NG_ONE2MANY_XMIT_ROUNDROBIN для исходящего трафика, других приемлемых для **lagg** режимов у ноды нет. 
-  * ng_one2many можно заменить на ng_bpf, и с помощью ассемблера BPF реализовать распределение исходящих пакетов по L2/L3/L4 адресам. Пример использования ng_bpf: [[ru:software:freebsd:igmpproxy_on_netgraph|Замена igmpproxy на netgraph]]+  * **ng_one2many** можно заменить на **ng_bpf**, и с помощью ассемблера BPF реализовать распределение исходящих пакетов по L2/L3/L4 адресам. Пример использования **ng_bpf**: [[ru:software:freebsd:igmpproxy_on_netgraph|Замена igmpproxy на netgraph]]
  
  
software/freebsd/lagg_on_netgraph.txt · Last modified: 2022/02/05 04:36 by root