В общем случае, технология Mesh Networking подразумевает ячеистую топологию, в которой устройства соединяются друг с другом, и каждое устройство может выступать в роли коммутатора для остальных устройств. Одним из очевидных преимуществ этой технологии является высокая отказоустойчивость организуемой сети.
До появления протоколов Cjdns (предшественник Yggdrasil) и Yggdrasil такая организация сети являлась достаточно сложной в настройке. Упомянутые же протоколы практически полностью освобождают администраторов сети от настройки маршрутизации. Всё, что остаётся сделать – это соединить устройства на первом и втором уровнях сетевой модели OSI и установить на них Yggdrasil.
Первый (физический) уровень модели OSI предполагает физическое соединение устройств посредством кабеля, радио или оптики (лазера). На втором уровне модели OSI (канальном) посредством протоколов канального уровня обеспечивается логическое взаимодействие устройств с контролем возможных ошибок физической передачи данных. Полученные с физического уровня данные, представленные в битах, упаковываются в кадры, проверяются на целостность и, если обнаружены ошибки, исправляются (формируется повторный запрос поврежденного кадра). Затем информация передается на следующий, сетевой уровень (в нашем случае Yggdrasil).
Ниже описан простой способ организации сети на канальном уровне (802.11s), посредством радио-линка (Wi-Fi).
Потребуется:
| Примечание |
|---|
| Здесь подразумевается, что на компьютер, как более мощное устройство, будет установлен Yggdrasil, а на роутере будет настроена точка доступа 802.11s. Компьютер будет соединен с роутером кабелем. Однако, при наличии подходящего Wi-Fi-адаптера для компьютера можно обойтись и без отдельного роутера. Адаптер должен поддерживать работу в качестве точки доступа и стандарт 802.11s. Так же, при наличии роутера, обладающего достаточно мощным процессором и достаточным количеством памяти, поддерживающим 802.11s, и с возможностью установки сторонних пакетов (Entware), можно обойтись и без компьютера. При этом, поддержка роутером OpenWrt не обязательна (в разделе Ссылки есть перечень адаптеров, поддерживающих 802.11s). Так же, сразу стоит заметить, что существует проект YggMesh - это модифицированная прошивка OpenWrt, в которой уже произведены нужные настройки и установлен Yggdrasil. Проверить поддержку устройством стандарта 802.11s в Linux можно с помощью команд по ссылке: https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s#wireless_hardware_support |
1. Устанавливаем и запускаем Yggdrasil на компьютере
2. Чтобы пользователи имели доступ ко всей сети Yggdrasil, в конфигурационном файле необходимо указать публичные пиры, к которым будет подключен наш узел. Пример:
Peers: [
tcp://a.b.c.d:xxxx
socks://e.f.g.h:xxxx/a.b.c.d:xxxx
tls://a.b.c.d:xxxx
]
3. Соединяем компьютер и беспроводной маршрутизатор
4. Устанавливаем в беспроводный маршрутизатор прошивку OpenWrt
5. Подключаем маршрутизатор к Интернету, чтобы Yggdrasil на компьютере смог подключиться к публичным пирам Yggdrasil
В интерфейсе конфигурации установленной прошивки OpenWrt перейдите в раздел Network - Wi-Fi, выберите интерфейс, нажмите «Add», в поле «Mode» установите «802.11s (Wi-Fi Mesh)».
[Опционально] чтобы пользователи понимали, что это точка доступа к сети Yggdrasil, назовите SSID примерно так: «Yggdrasil Mesh 802.11s».
Поднять программную точку доступа можно и используя внутренний или внешний (usb) wifi-модуль компьютера. Проверить поддержку режима AP для устройства можно следующей командой:
$ iw list Wiphy phy0 ... Supported interface modes: * IBSS * managed * AP * AP/VLAN * WDS * monitor * mesh point ...
Беспроводное устройство можно использовать одновременно в режиме клиента и точки доступа. Для этого необходимо создать отдельные виртуальные интерфейсы на основе физического:
$ iw dev wlan0 interface add wlan0_sta type managed addr 12:34:56:78:ab:cd $ iw dev wlan0 interface add wlan0_ap type managed addr 12:34:56:78:ab:ce
Примечание: для автоматизации запуска это можно реализовать в виде скрипта инициализации (hostapd должен быть запущен после создания виртуального интерфейса), либо отредактировав конфигурационный файл сервиса hostapd (для OpenRC это /etc/conf.d/hostapd), либо просто использовав планировщик cron (например, fcron) следующим образом:
$ fcrontab -e @reboot <список команд через ;>
Для поднятия беспроводной точки доступа используется программа hostapd1). Примеры использования можно найти на этой интернет-странице.
Внесите в конфигурационный файл hostapd.conf следующую запись:
interface=wlan0 ssid2="Yggdrasil network" driver=nl80211 country_code=RU hw_mode=g channel=1 ieee80211n=1
Запустить hostapd можно скриптом инициализации или командой:
$ hostapd -B /etc/hostapd/hostapd.conf
Примечание: если init-скрипт не запускается ввиду неактивности интерфейса, отредактируйте конфигурационный файл сервиса (для OpenRC /etc/conf.d/hostapd)
После успешного запуска hostapd точка доступа будет поднята, и с ней могут ассоциироваться клиенты, - при помощи multicast и broadcast запущенные yggdrasil найдут друг друга. Однако, из-за отсутствия присвоенного ip-адреса сетевые менеджеры клиентов будут сбрасывать подключение. Чтобы этого не происходило, нужно выдать клиенту ip-адрес. Сделать это можно с помощью dnsmasq, присвоив ipv4 адрес посредством DHCP, или же можно раздавать клиентам ipv6 адреса из подсети yggdrasil, дополнительно открывая доступ к сети клиентам без установленного приложения. Настроить раздачу адресов ipv6 можно с помощью radvd2).
interface wlan0
{
## (Send advertisement messages to other hosts)
AdvSendAdvert on;
# Без этой строчки сбоит подключение для windows-устройств (задаёт MTU)
AdvLinkMTU 1280;
MinRtrAdvInterval 300;
MaxRtrAdvInterval 600;
AdvHomeAgentFlag off;
prefix ::/64
{
AdvOnLink on;
AdvAutonomous on;
# Без этой строки подключаются не все android-устройства; строка "route 200::/7 {};" не требуется
AdvRouterAddr on;
};
#route 200::/7 {};
## (Advertise a DNS Server)
RDNSS ::53 {};
};
Укажите в строке prefix вашу подсеть из $ yggdrasilctl getself, а в строке RDNSS можно указать внутренний DNS. После запуска клиенты смогут успешно подключиться к точке доступа.
Вывести список подключенных к точке доступа клиентов можно так:
$ hostapd_cli all_sta $ iw dev wlan0 station dump
Подключение к точке доступа по Wi-Fi осуществляется так же, как к любой другой Wi-Fi точке доступа. Важно заметить, что на подключаемых устройствах необходимо установить Yggdrasil. В небольших масштабах об этом можно говорить устно, а в промышленных можно подумать над веб-заглушкой с ссылкой на Yggdrasil и кратким описанием сути необходимых действий.
Для увеличения площади покрытия важно правильно подобрать антенну - круговую, секторную для охвата определенного угла или узконаправленную (параболическую) для создания wi-fi моста на несколько километров3). Антенну можно изготовить и самостоятельно4)5)6)7), например Yagi8). Анализируйте диаграмму направленности антенны. Также важно учитывать поглощение различными материалами9). Можно приобрести усилитель на 4W или 8W, например на AliExpress10)11)12), однако от такого мощного излучения нужно экранироваться.
Подключенные узлы обнаружат себя сами благодаря технологии Local Peer Discovery. Если этого не произошло, убедитесь, что пакеты не блокируются файерволом.
Подключившись таким образом к нашей Wi-Fi точке, пользователь получит доступ в глобальный сегмент сети Yggdrasil.
Описан простой способ соединения устройств с использованием технологий Wi-Fi Mesh и Yggdrasil. Соединяя устройства таким образом, можно организовать независимую сеть с приемлемой скоростью передачи трафика, автоматической маршрутизацией и сквозным шифрованием.
Поднятые точки доступа Wi-Fi Mesh можно разместить на карте здесь: https://radiomap.yggwiki.cc/ (читайте описание).
Ячеистая топология
Сетевая модель OSI
Перечень адептеров, поддерживающих 802.11s (EN): https://github.com/phillymesh/802.11s-adapters
Драйверы беспроводных устройств Linux (в таблице есть колонка mesh) (EN): https://wireless.wiki.kernel.org/en/users/drivers
Перечень устройств, поддерживающих прошивку OpenWrt (EN, офиц. документация): https://openwrt.org/supported_devices
Конфигурирование 802.11s в OpenWrt (EN, офиц. документация): https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s

Обсуждение
Если включить обратно демона NetworkManager то USB подхватывается машиной и сеть через USB работает, но отваливается IBSS подключение.
Версия ygg 0.5.12
На днях попробую собрать последнюю версию как это дело работает там
>connection refused (yggdrasilctl getpeers)
Тут стоит проверить, как идет подключение yggdrasilctl (unix-socket / tcp), а так же правила сетевого фильтра, если есть.
Заходите, читайте описание, добавляйтесь.
Делитесь ссылкой в тематических пабликах, каналах и т.п. Больше людей, больше радио-узлов - больше возможностей.