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

Введение

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

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

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

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

  • компьютер (можно использовать одноплатный компьютер, например RaspberryPi)
  • беспроводной маршрутизатор с поддержкой стандарта IEEE 802.11s и возможностью прошивки в него OpenWrt (подробнее см. Ссылки)

Примечание: это требуется в данном конкретном примере, но возможно подключение с использованием только маршутизатора или только компьютера (см. ниже).

Подготовка

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

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

/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. Соединив таким образом между собой несколько маршрутизаторов со всеми подключенными к ним устройствами, можно организовать полностью независимую сеть с автоматической маршрутизацией и сквозным шифрованием. Например, так можно организовать сеть в жилом многоквартирном доме.

Компьютер в описанной схеме можно не использовать, если возможности самого беспроводного маршрутизатоа позволяют установить на него Yggdrasil. Так же, и наоборот - беспроводной маршрутизатор можно не использовать, если к компьютеру подключить Wi-Fi адаптер с поддержкой 802.11s (см. Ссылки)

Проверить поддержку устройством стандарта 802.11s в Linux можно с помощью команд по ссылке: https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s#wireless_hardware_support

Ссылки

Ячеистая топология
Сетевая модель 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

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