====== Mesh посредством радио-линка ======
==== Введение ====
В общем случае, технология Mesh Networking подразумевает ячеистую топологию, в которой устройства соединяются друг с другом, и каждое устройство может выступать в роли коммутатора для остальных устройств. Одним из очевидных преимуществ этой технологии является высокая отказоустойчивость организуемой сети.
До появления протоколов Cjdns (предшественник [[Yggdrasil]]) и Yggdrasil такая организация сети являлась достаточно сложной в настройке. Упомянутые же протоколы практически полностью освобождают администраторов сети от настройки маршрутизации. Всё, что остаётся сделать -- это соединить устройства на первом и втором уровнях сетевой модели OSI и установить на них Yggdrasil.\\ Первый (физический) уровень модели OSI предполагает физическое соединение устройств посредством кабеля, радио или оптики (лазера). На втором уровне модели OSI (канальном) посредством протоколов канального уровня обеспечивается логическое взаимодействие устройств с контролем возможных ошибок физической передачи данных. Полученные с физического уровня данные, представленные в битах, упаковываются в кадры, проверяются на целостность и, если обнаружены ошибки, исправляются (формируется повторный запрос поврежденного кадра). Затем информация передается на следующий, сетевой уровень (в нашем случае Yggdrasil).
Ниже описан простой способ организации сети на канальном уровне (802.11s), посредством радио-линка (Wi-Fi).
==== Создание беспроводной точки доступа Mesh к сети Yggdrasil ====
Потребуется:
* компьютер (можно использовать одноплатный компьютер, например RaspberryPi)
* беспроводной маршрутизатор с поддержкой стандарта [[wpru>IEEE_802.11s|IEEE 802.11s]] и возможностью прошивки в него [[https://openwrt.org/|OpenWrt]] (подробнее см. [[yggdrasil:mesh_setup#Ссылки|Ссылки]])
// Примечание:// это требуется в данном конкретном примере, но возможно подключение с использованием только маршутизатора или только компьютера (см. [[yggdrasil:mesh_setup#Заключение|ниже]]).
=== Подготовка ===
1. Устанавливаем и запускаем Yggdrasil на компьютере\\
2. Чтобы пользователи имели доступ ко всей сети Yggdrasil, в конфигурационном файле необходимо указать [[yggdrasil:public_peer|публичные пиры]], к которым будет подключен наш узел. Пример:
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. Устанавливаем в беспроводный маршрутизатор прошивку [[https://openwrt.org/|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 ====
Поднять [[https://wiki.archlinux.org/title/Software_access_point_(Русский)|программную точку доступа]] можно и используя внутренний или внешний (usb) wifi-модуль компьютера. Проверить поддержку режима AP для устройства можно следующей командой:
$ iw list
Wiphy phy0
...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
...
=== Опционально: создание виртуального интерфейса ===
Беспроводное устройство можно использовать одновременно в режиме клиента и точки доступа. Для этого необходимо [[https://wiki.archlinux.org/title/Software_access_point_(Русский)#Беспроводной_клиент_и_программная_точка_доступа_на_одном_Wi-Fi_устройстве|создать отдельные виртуальные интерфейсы на основе физического]]:
$ 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), либо просто использовав планировщик [[https://wiki.gentoo.org/wiki/Cron/ru|cron]] (например, fcron) следующим образом:
$ fcrontab -e
@reboot <список команд через ;>
==== ====
Для поднятия беспроводной точки доступа используется программа hostapd(([[https://wireless.wiki.kernel.org/en/users/Documentation/hostapd|Документация по hostapd]])). Примеры использования можно найти [[https://wiki.gentoo.org/wiki/Hostapd|на этой интернет-странице]].
Внесите в конфигурационный файл следующую запись:
///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-адрес. Сделать это можно с помощью [[https://wiki.gentoo.org/wiki/Dnsmasq/ru|dnsmasq]], присвоив ipv4 адрес посредством DHCP, или же можно раздавать клиентам ipv6 адреса из подсети yggdrasil, дополнительно открывая доступ к сети клиентам без установленного приложения. Настроить раздачу адресов ipv6 можно с помощью radvd(([[https://wiki.archlinux.org/title/IPv6_(Русский)#Шлюз|Пример настройки radvd]])).
///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 можно указать [[yggdrasil:dns:internal_dns#список_серверов|внутренний DNS]]. После запуска клиенты смогут успешно подключиться к точке доступа.
Вывести список подключенных к точке доступа клиентов можно так:
$ hostapd_cli all_sta
$ iw dev wlan0 station dump
==== Подключение устройств к беспроводной точке доступа ====
Подключение к точке доступа по Wi-Fi осуществляется так же, как к любой другой Wi-Fi точке доступа. Важно заметить, что на подключаемых устройствах необходимо установить Yggdrasil. В небольших масштабах об этом можно говорить устно, а в промышленных можно подумать над веб-заглушкой с ссылкой на Yggdrasil и кратким описанием сути необходимых действий.
Для увеличения площади покрытия важно правильно подобрать антенну - круговую, секторную для охвата определенного угла или узконаправленную (параболическую) для создания wi-fi моста на несколько километров(([[https://kroks.ru/useful-articles/stati/how-to-select-the-antenna-for-wifi|Как выбрать антенну для Wi-Fi]])). Антенну можно изготовить и самостоятельно(([[https://www.youtube.com/watch?v=YBDd9SFv_lo|How to make a long range wifi antenna up to 3km]]))(([[https://www.youtube.com/watch?v=0GwhShwBmDE|Простая WiFi антенна за 15 минут]]))(([[https://www.youtube.com/watch?v=s-MKhffuPzM|Антенна для wi-fi сигнала своими руками]]))(([[https://www.youtube.com/watch?v=UpbdwG-zvnE|Самодельная Wi-Fi пушка]])), например Yagi(([[https://ru.wikipedia.org/wiki/Волновой_канал|Антенна Yagi]])). Анализируйте диаграмму направленности антенны. Также важно учитывать поглощение различными материалами(([[https://fantasylab.ru/tekhno-blog/6-fantasylab/2011-03-20-02-19-00/72-zatukhanie-wi-fi-v-razlichnykh-materialakh.html|Затухание сигнала Wi-Fi в различных материалах]])). Можно приобрести усилитель на 4W или 8W, например на AliExpress(([[https://aliexpress.ru/item/4001145704450.html|AliExpress: Усилитель мощности Wi-Fi 4/8W 2.4/5GHz]]))(([[https://aliexpress.ru/item/1005002070402052.html|AliExpress: Усилитель мощности Wi-Fi 4/8W 2.4/5GHz]]))(([[https://aliexpress.ru/item/1005002637720376.html|AliExpress: Усилитель мощности Wi-Fi 4/8W 2.4/5GHz]])), однако от такого мощного излучения нужно экранироваться.
Подключенные узлы обнаружат себя сами благодаря технологии Local Peer Discovery. Если этого не произошло, убедитесь, что [[wpru>Пакет_(сетевые_технологии)|пакеты]] не блокируются [[wpru>Межсетевой_экран|файерволом]].
Подключившись таким образом к нашей Wi-Fi точке, пользователь получит доступ в глобальный сегмент сети Yggdrasil.
==== Заключение ====
Описан простой способ соединения устройств с использованием технологии Wi-Fi Mesh и Yggdrasil. Соединив таким образом между собой несколько маршрутизаторов со всеми подключенными к ним устройствами, можно организовать полностью независимую сеть с автоматической маршрутизацией и сквозным шифрованием. Например, так можно организовать сеть в жилом многоквартирном доме.
Компьютер в описанной схеме можно не использовать, если возможности самого беспроводного маршрутизатоа позволяют установить на него Yggdrasil. Так же, и наоборот - беспроводной маршрутизатор можно не использовать, если к компьютеру подключить Wi-Fi адаптер с поддержкой 802.11s (см. [[yggdrasil:mesh_setup#Ссылки|Ссылки]])
Проверить поддержку устройством стандарта 802.11s в Linux можно с помощью команд по ссылке: https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s#wireless_hardware_support
====== Ссылки ======
[[wpru>Ячеистая_топология|Ячеистая топология]]\\
[[wpru>Сетевая_модель_OSI|Сетевая модель 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