802.11s Створення Mesh мережі
802.11s — це відкритий стандарт для з'єднання бездротових пристроїв без необхідності створення інфраструктури. Він працює на канальному рівні (Layer 2) і забезпечує, щоб усі вузли бачили одне одного в bridged мережі рівня 2 (нібито всі підключені до одного комутатора). Будь-яка інфраструктура мережевого рівня (Layer 3) працюватиме поверх цього.
Розроблені додаткові пакунки для розширення базового рівня 2 mesh 802.11, особливо у випадках, коли необхідна підтримка кількох шлюзів в Інтернет і частково дротового каналу зв’язку (backhaul).
Ці розширені пакунки більше орієнтовані на великі інфраструктурні сценарії, наприклад — локальні спільноти або навіть міські мережі, а не на типове домашнє використання mesh.
Дивіться:
batman
mesh11sd
olsr
На противагу цьому, базова mesh-мережа 802.11s може бути простим “one hop” ретранслятором Wi-Fi у домашньому середовищі без додаткових пакунків.
Що таке Mesh?
Mesh-мережа — це multi-point канал зв’язку на рівні 2 з маршрутизацією на основі MAC-адрес, який використовується для з’єднання mesh-вузлів.
Mesh-вузли, як правило, не є користувацькими пристроями, а представляють собою маршрутизатори, точки доступу, клієнтські пристрої (CPE) тощо.
Звичайний користувацький пристрій, такий як телефон, планшет або ноутбук, не може безпосередньо підключатися до mesh-мережі.
Натомість підключення здійснюється через шлюз mesh-мережі — спеціальний тип mesh-вузла.
Ви впевнені, що вам потрібна mesh-мережа?
Якщо ви шукаєте рішення для безшовного роумінгу користувацьких пристроїв між точками доступу у вашому домі, вам потрібен 802.11r (roaming), а не 802.11s.
На жаль, деякі виробники використовують слово “Mesh” у маркетингових цілях для позначення своїх нестандартних, закритих і пропрієтарних рішень для роумінгу, що створює велику плутанину для багатьох людей, коли вони стикаються зі світом міжнародних стандартів та відкритого ПЗ для мережевої інфраструктури.
- Визнаним стандартом для mesh-мереж є ieee802.11s.
- Визнаним стандартом для швидкого роумінгу користувацьких пристроїв є ieee802.11r.
Це два абсолютно не пов’язані між собою стандарти.
Mesh 802.11s
802.11s працює стабільно у всіх актуальних версіях OpenWrt, включаючи підтримку шифрування “over the air”, за умови підтримки відповідним обладнанням і драйверами. Для цього необхідний пакунок wpad-mesh-mbedtls (або аналогічний).
Інтерфейс 802.11s потребує налаштування низки робочих параметрів ПІСЛЯ підняття інтерфейсу та його входження до складу mesh-мережі.
Деякі комбінації SoC не створюють mesh-інтерфейс досить швидко, через що налаштування цих параметрів може не спрацювати.
Однак для використання у ролі “one hop” Wi-Fi розширювача встановлення додаткових параметрів не є необхідним — цього цілком достатньо для базового, але корисного режиму.
Історично нездатність встановити mesh-параметри через те, що інтерфейс ще не був створений, іноді інтерпретувалася як “помилка ARP relay”, оскільки мережа рівня 2 (mac-маршрутизація) ніколи не активувалася одночасно між усіма вузлами mesh.
Пакунок mesh11sd був розроблений для того, щоб дозволити коректно й динамічно задавати всі наявні mesh-параметри.
802.11s Швидке розгортання
Mesh-мережу 802.11s можна швидко розгорнути, використовуючи OpenWrt Firmware Selector (або Image Builder) та пакунок Mesh11sd.
Дивіться:
Перевірка підтримки з боку бездротових драйверів
Підтримка 802.11s (режим типу mesh) залежить від бездротового драйвера. Більшість сучасних відкритих драйверів підтримують цей режим. Зверніть увагу, що деякі драйвери можуть заявляти про підтримку mesh, але мати з нею проблеми.
Наприклад, станом на грудень 2023 року драйвер ath10k-ct, який використовується в NETGEAR R7800 та інших пристроях з чіпами Qualcomm Atheros QCA988x, має проблеми з mesh — з’являються помилки та випадкові втрати бездротових інтерфейсів (повідомлення про проблему). Рекомендується створити прошивку за допомогою Firmware Selector, яка видаляє модуль -ct (наприклад, kmod-ath10k-ct) та прошивку -ct (наприклад, ath10k-firmware-qca9984-ct) і замінює їх на non-ct версії (kmod-ath10k і ath10k-firmware-qca9984) для стабільної підтримки mesh.
Скористайтеся наступною командою, щоб перевірити, чи підтримує ваше обладнання mesh:
iw list | grep "Supported interface modes" -A 9
...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
* P2P-client
* P2P-GO
...
Приклад: ath9k у маршрутизаторі
iw list
...
valid interface combinations:
* #{ managed, WDS } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1, #{ IBSS } <= 1,
total <= 2048, #channels <= 1, STA/AP BI must match
* #{ IBSS, AP, mesh point } <= 1,
total <= 1, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz }
...
Приклад: USB-стік ath9k_htc
iw list
...
valid interface combinations:
* #{ managed, P2P-client } <= 2, #{ AP, mesh point, P2P-GO } <= 2,
total <= 2, #channels <= 1
...
Встановлення та налаштування
Якщо ви хочете використовувати mesh-мережу з шифруванням, необхідно встановити версію wpad, яка підтримує шифрування для mesh.
На момент написання, потрібна або повна версія, або mesh-сумісна версія wpad.
Приклади:
wpad-mesh-mbedtls— базова версія з підтримкою mesh.wpad-mbedtls— повна, велика версія.wpad-mesh-opensslwpad-opensslwpad-mesh-wolfsslwpad-wolfssl
Встановлення підтримки шифрування для Mesh:
Потрібно видалити версію wpad без підтримки mesh, яка зазвичай встановлюється за замовчуванням. Ви можете дізнатися, яка саме встановлена, у веб-інтерфейсі Luci через меню System→Software → Update Lists..., потім введіть у поле Filter: слово 'wpad'. Та, що відмічена як Installed, і є поточною. Видаліть її та встановіть відповідну -mesh версію.
Або за допомогою командного рядка:
opkg list-installed wpad*
Далі встановіть mesh-сумісну версію, що відповідає вашій попередній:
opkg update
opkg install ...
Примітки:
- З вересня 2019 року
wpad-opensslабоwpad-wolfsslотримали підтримку шифрування 802.11s.wpad-mbedtlsдодали пізніше. - Версії
wpad-basic-*підтримують тільки 802.11r та 802.11w. - Версії
wpad-mesh-*підтримують 802.11r/w та 802.11s. wpad-*— це повна версія з підтримкою 802.11k/v/r/w і 802.11s.- Повна версія означає, що нічого не було видалено для зменшення розміру пакунка.
Приклад однієї команди для видалення базової версії wpad і встановлення mesh-версії:
УВАГА: потрібно перезавантажити пристрій або службу wpad, щоб нова версія почала працювати.
opkg update && opkg install wpad-mesh-mbedtls --download-only && opkg remove wpad-basic-mbedtls && opkg install wpad-mesh-mbedtls --cache . && rm *.ipk
Налаштування mesh у веб-інтерфейсі LuCI:
УВАГА: Не налаштовуйте mesh через LuCI, якщо ви також використовуєте mesh11sd у режимі auto_config
Оскільки LuCI створює статичну конфігурацію, а mesh11sd динамічно нею керує.
- Перейдіть у меню
Network→Wireless - Натисніть 'Add' у діапазоні 2.4GHz або 5GHz
Interface Configuration→General Setup→Mode→ виберіть '802.11s' і введіть значення 'Mesh ID', яке буде спільним для всіх вузлів у мережі- У полі
NetworkвиберітьLAN - У
Interface Configuration→Wireless Securityвиберіть 'WPA3-SAE' і задайте пароль, спільний для всіх вузлів mesh Save- Потім натисніть
Save & Apply
УВАГА: STP не впливає на mesh-мережу, оскільки трафік рівня 2 вставляється у backhaul після обробки STP у bridge-інтерфейсі
Комутаційнійні петлі МОЖЛИВІ, якщо у вас є не-mesh сегменти у backhaul (наприклад, Ethernet-з’єднання) або ви використовуєте кілька mesh backhaul (наприклад, 2.4GHz І 5GHz).
Щоб уникнути цього, потрібно або використовувати mesh11sd, або створити власні правила nftables, щоб відсікати пакети, які сприяють створенню петлі.
Файл конфігурації Wireless UCI
УВАГА: Не редагуйте файл /etc/config/wireless вручну, якщо ви також використовуєте mesh11sd у режимі auto_config.
Оскільки це статична конфігурація, а mesh11sd керує нею динамічно.
Файл /etc/config/wireless має містити розділ mesh приблизно такого вигляду:
config wifi-iface 'mesh'
option device 'radio0'
option disabled '0'
option mode 'mesh'
option ifname 'mesh0'
option network 'lan'
option mesh_id 'my-mesh-id'
option encryption 'sae' # або 'none', якщо не бажаєте використовувати шифрування
option key 'your-secret-password'
Примітка: опція network 'lan' об’єднує mesh-інтерфейс із мережевим bridge 'lan'.
Цієї конфігурації має бути достатньо для підняття mesh-мережі. Після цього можна перезапустити Wi-Fi і перевірити:
wifi iw dev mesh0 info
Вивід буде приблизно такий:
Interface mesh0
ifindex 10
wdev 0x3
addr 12:34:56:78:9a:bc
type mesh point
wiphy 0
channel 2 (2417 MHz), width: 20 MHz, center1: 2417 MHz
txpower 28.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 129166 0 0 0 0 9107016 129167
Кожен пристрій, який має брати участь у mesh, повинен бути налаштований однаково: той самий mesh_id, той самий канал, той самий ключ.
Ця UCI-конфігурація підходить для побудови mesh з двох або максимум трьох вузлів, які розміщені близько один до одного.
Але для створення органічної, автономної, самокерованої mesh-мережі з багатьох вузлів потрібні додаткові налаштування.
Mesh11sd — Встановлення параметрів і опцій
Існує багато параметрів mesh, деякі з яких є критично важливими для надійної роботи mesh-мережі.
Більшість з них потребують, щоб інтерфейс mesh був уже активним перед застосуванням параметрів.
Якщо спробувати задати ці параметри у файлі конфігурації UCI (/etc/config/wireless), це не спрацює, адже конфігурація UCI використовується для запуску або перезапуску бездротової системи, і інтерфейс mesh буде створено після завершення роботи UCI.
Параметри можна задавати вручну за допомогою утиліти `iw`, але ці налаштування збережуться лише поки інтерфейс mesh активний. Після перезавантаження, перезапуску мережі або виконання команди `wifi` параметри буде скинуто до стандартних.
Щоб задати параметри постійно, слід встановити пакунок Mesh11sd:
opkg update opkg install mesh11sd
Докладніше про Mesh11sd: mesh11sd
Автоматичне встановлення mesh-параметрів за допомогою Hotplug
Якщо ви хочете самостійно задавати параметри mesh без використання пакунка mesh11sd, АБО використовуєте інший mesh-протокол (наприклад, B.A.T.M.A.N або OLSR), і не можете скористатися перевагами автоматизації від mesh11sd, тоді можливо застосувати систему Hotplug в OpenWRT:
hotplug
Приклад коду:
/etc/hotplug.d/iface/99-my-mesh або
/etc/hotplug.d/net/99-my-mesh
#!/bin/sh
# HOTPLUG_EVENT_PARAMETER
# Ознайомтесь з Hotplug
# Вибір між /etc/hotplug.d/iface та /etc/hotplug.d/net залежить від потреб
# MY-MESH-INTERFACE-OR-DEVICE
# Ім’я інтерфейсу або пристрою (mesh0, radio0 тощо)
# HOTPLUG_ACTION
# SOME_ACTION
# Наприклад, 'ifup'
# YOUR_MESH_DEVICE
# Ваш mesh-інтерфейс (див. команду 'iwinfo')
if [ "${HOTPLUG_EVENT_PARAMETER}" = "MY-MESH-INTERFACE-OR-DEVICE" ]; then
if [ "${HOTPLUG_ACTION}" = "SOME_ACTION" ]; then
# Встановлення параметрів mesh:
iw dev "${YOUR_MESH_DEVICE}" set mesh_param <ПАРАМЕТР> <ЗНАЧЕННЯ>
# Запис у лог (див. через команду 'logread')
logger -t 'mymesh' "Mesh parameters were updated"
fi
fi
Приклад з реальними параметрами для інтерфейсу B.A.T.M.A.N:
(файл: /etc/hotplug.d/iface/99-mymesh)
#!/bin/sh
if [ "${INTERFACE}" = "mesh_bat0" ]; then
if [ "${ACTION}" = "ifup" ]; then
# Зверніть увагу:
# ${DEVICE} передається автоматично при використанні iface
iw dev "${DEVICE}" set mesh_param mesh_max_peer_links 2
iw dev "${DEVICE}" set mesh_param mesh_max_retries 5
iw dev "${DEVICE}" set mesh_param mesh_rssi_threshold -80
iw dev "${DEVICE}" set mesh_param mesh_fwding 0
iw dev "${DEVICE}" set mesh_param mesh_nolearn 1
iw dev "${DEVICE}" set mesh_param mesh_hwmp_rootmode 2
iw dev "${DEVICE}" set mesh_param mesh_gate_announcements 1
iw dev "${DEVICE}" set mesh_param mesh_connected_to_gate 1
iw dev "${DEVICE}" set mesh_param mesh_connected_to_as 0
logger -t 'mymesh' "Mesh parameters were updated"
fi
fi
Щоб дізнатись більше про динамічні параметри mesh, перегляньте: Mesh11sd - опис параметрів
Перевірити поточні параметри можна за допомогою команди:
iw dev <ІНТЕРФЕЙС> mesh_param dump
(Інтерфейс можна знайти за допомогою iwinfo або iw list — переконайтесь, що це саме mesh-інтерфейс!)
Перевірка роботи mesh-мережі
Скористайтесь командою iw, щоб переглянути активні з’єднання або таблицю досяжності вузлів у mesh:
iw dev $MESH_IFACE station dump iw dev $MESH_IFACE mpath dump
Приклад:
iw dev $MESH_IFACE station dump
Station 00:15:6d:84:14:10 (on mesh)
inactive time: 1320 ms
rx bytes: 352
rx packets: 4
tx bytes: 174
tx packets: 2
signal: -61 dBm
tx bitrate: 1.0 MBit/s
mesh llid: 32577
mesh plid: 15969
mesh plink: ESTAB
Station 00:15:6d:84:14:09 (on mesh)
inactive time: 3370 ms
rx bytes: 1064
rx packets: 12
tx bytes: 545
tx packets: 7
signal: -53 dBm
tx bitrate: 1.0 MBit/s
mesh llid: 41036
mesh plid: 24435
mesh plink: ESTAB
Додаткові матеріали
- Mesh11sd Project: у Wiki OpenWrt
- Вступ до 802.11s: від kernel.org