Mesh посредством радио-линка

Введение

В общем случае, технология Mesh Networking подразумевает ячеистую топологию, в которой устройства соединяются друг с другом, и каждое устройство может выступать в роли коммутатора для остальных устройств. Одним из очевидных преимуществ этой технологии является высокая отказоустойчивость организуемой сети. До появления протоколов Cjdns (предшественник Yggdrasil) и Yggdrasil такая организация сети являлась достаточно сложной в настройке. Упомянутые же протоколы практически полностью освобождают администраторов сети от настройки маршрутизации. Всё, что остаётся сделать – это соединить устройства на первом и втором уровнях сетевой модели OSI и установить на них Yggdrasil.
Первый (физический) уровень модели OSI предполагает физическое соединение устройств посредством кабеля, радио или оптики (лазера). На втором уровне модели OSI (канальном) посредством протоколов канального уровня обеспечивается логическое взаимодействие устройств с контролем возможных ошибок физической передачи данных. Полученные с физического уровня данные, представленные в битах, упаковываются в кадры, проверяются на целостность и, если обнаружены ошибки, исправляются (формируется повторный запрос поврежденного кадра). Затем информация передается на следующий, сетевой уровень (в нашем случае Yggdrasil).

Ниже описан простой способ организации сети на канальном уровне (802.11s), посредством радио-линка (Wi-Fi).

Создание беспроводной точки доступа Mesh к сети Yggdrasil с использованием роутера

Потребуется:

  • компьютер (можно использовать одноплатный компьютер, например RaspberryPi)
  • беспроводной маршрутизатор с поддержкой стандарта IEEE 802.11s и возможностью прошивки в него OpenWrt (подробнее см. Ссылки)
Примечание
Здесь подразумевается, что на компьютер, как более мощное устройство, будет установлен 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

Точка доступа Wi-Fi Mesh

В интерфейсе конфигурации установленной прошивки OpenWrt перейдите в раздел Network - Wi-Fi, выберите интерфейс, нажмите «Add», в поле «Mode» установите «802.11s (Wi-Fi Mesh)».

[Опционально] чтобы пользователи понимали, что это точка доступа к сети Yggdrasil, назовите SSID примерно так: «Yggdrasil Mesh 802.11s».

Создание беспроводной точки доступа AP (Access Point) к сети Yggdrasil с помощью адаптера Wi-Fi

Поднять программную точку доступа можно и используя внутренний или внешний (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 следующую запись:

/etc/hostapd/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).

/etc/radvd.conf
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

Обсуждение

red, 2025/10/25 20:07, 2025/10/25 22:02
Здравствуйте, есть несколько машин связаных в одну сеть типа IBSS (AP не поддерживают). Каким образом можно соеденить такую IBSS-сеть с устройством подключённым через USB (телефон)? Всё чего удалось добиться это connection refused (yggdrasilctl getpeers) при добавлени IPv4 адреса.
Если включить обратно демона NetworkManager то USB подхватывается машиной и сеть через USB работает, но отваливается IBSS подключение.

Версия ygg 0.5.12

На днях попробую собрать последнюю версию как это дело работает там

Thunar, 2025/10/27 08:27
Yggdrasil работает только с IPv6 (0200::/7).

>connection refused (yggdrasilctl getpeers)

Тут стоит проверить, как идет подключение yggdrasilctl (unix-socket / tcp), а так же правила сетевого фильтра, если есть.

newbie, 2026/07/08 21:08
Есть такой сайтик: https://radiomap.yggwiki.cc/
Заходите, читайте описание, добавляйтесь.
Делитесь ссылкой в тематических пабликах, каналах и т.п. Больше людей, больше радио-узлов - больше возможностей.

Только авторизованные участники могут оставлять комментарии.
yggdrasil/mesh_setup.txt · Последнее изменение: 2026/07/17 09:47 — newbie
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki