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
software:freebsd:lagg_on_netgraph [2015/07/19 00:17]
– [Создание LAGG интерфейса и добавление сетевых адаптеров] root
software:freebsd:lagg_on_netgraph [2022/02/05 04:36] (current)
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, потере пакетов и потере связи при приёме мультикаста с битрейтом свыше 100 мегабит.\\
 Реализация объединения сетевых адаптеров средствами netgraph не подвержена подобной проблеме.\\ Реализация объединения сетевых адаптеров средствами netgraph не подвержена подобной проблеме.\\
 +Результат совместим с **if_vlan** и по сути мало чем отличается от других интерфейсов в системе.\\
 **Cкрипт**: [[http://netlab.linkpc.net/download/software/FreeBSD/ng_lagg/ng_lagg.sh|ng_lagg.sh]]\\ **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 16: Line 18:
  
 == ВАЖНО! == == ВАЖНО! ==
-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** загружена, или загрузите:
Line 44: Line 43:
 Проверки на принадлежность интерфейса к какому либо 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**: [[software:freebsd:igmpproxy_on_netgraph|Замена igmpproxy на netgraph]]
  
  
Line 102: Line 125:
 [[https://www.freebsd.org/cgi/man.cgi?query=ng_eiface&sektion=4&apropos=0&manpath=FreeBSD+10.1-stable|man ng_eiface]]\\ [[https://www.freebsd.org/cgi/man.cgi?query=ng_eiface&sektion=4&apropos=0&manpath=FreeBSD+10.1-stable|man ng_eiface]]\\
 [[https://www.freebsd.org/cgi/man.cgi?query=ng_ether&sektion=4&apropos=0&manpath=FreeBSD+10.1-stable|man ng_ether]]\\ [[https://www.freebsd.org/cgi/man.cgi?query=ng_ether&sektion=4&apropos=0&manpath=FreeBSD+10.1-stable|man ng_ether]]\\
 +
 +
 +
 +{{tag>software howto freebsd net netgraph vlan lagg mysoft}}
software/freebsd/lagg_on_netgraph.1437265055.txt.gz · Last modified: 2015/07/19 00:17 by root