Видеозвонок обрывается при переходе из комнаты в комнату, а копирование большого файла замирает на несколько секунд. Причина одна: клиент покидает зону уверенного приёма одной точки и подключается к другой, а процесс переподключения занимает время. Три технологии из семейства стандартов беспроводной сети сокращают этот промежуток, но работают они по-разному и требуют разного от оборудования. Разбираем, что именно включать в OpenWrt, в каком порядке и как проверить, что переход действительно стал быстрым.

Что такое расширенный набор услуг и кто принимает решение о переходе

Терминология важна, поскольку половина заблуждений рождается из путаницы в названиях. Одно имя сети это SSID. Одна точка доступа, транслирующая это имя, образует базовый набор услуг, BSS, с собственным адресом BSSID. Несколько точек с одинаковым SSID образуют расширенный набор услуг, ESS.

Ключевой факт, который стоит усвоить до настройки: решение о переходе между точками принимает клиент, а не точка доступа. Смартфон, ноутбук и телевизионная приставка сами оценивают уровень сигнала и сами инициируют переподключение. Точка доступа может лишь подсказать и ускорить процесс, но не может принудить устройство уйти.

Отсюда первое практическое следствие. Одинаковое имя сети и одинаковый пароль на двух точках уже дают роуминг, просто медленный. Клиент, который цепляется за дальнюю точку до последнего, делает это не из вредности, а потому, что никто не сообщил ему о лучшей альтернативе.

Второе следствие касается названий. Обозначения 802.11k, 802.11v и 802.11r исторические: все три набора возможностей включены в основной стандарт, текущая редакция которого датируется 2024 годом. В конфигурации старые обозначения сохранились, и их удобно использовать как ярлыки.

Третье следствие самое неприятное. Некорректно включённые механизмы ухудшают ситуацию по сравнению с их отсутствием: устройство мечется между точками и тратит эфирное время на служебный обмен. Включать стоит постепенно, с проверкой после каждого шага.

Выбор пакета wpad и ловушка с базовой версией

Поддержка механизмов роуминга живёт в управляющей программе точки доступа, и в OpenWrt её возможности зависят от выбранного пакета.

Базовые варианты пакета, например wpad-basic-mbedtls, нужные расширения не поддерживают. Попытка включить их приводит не к ошибке с понятным текстом, а к тому, что беспроводной интерфейс не поднимается. Симптом выглядит как сломанное радио.

Проверка установленного пакета и замена на полный:

opkg list-installed | grep wpad
opkg remove wpad-basic-mbedtls
opkg update
opkg install wpad-mbedtls
wifi reload

Полная версия wpad-mbedtls поддерживает все три механизма. Варианты с openssl и wolfssl отличаются криптографической библиотекой, на роуминг это не влияет.

После замены пакета стоит убедиться, что радио действительно поднялось:

iwinfo
logread | grep -i hostapd | tail -20

Журнал содержит сообщения управляющей программы, и при неверной конфигурации там указана причина отказа.

Отчёты о соседях и рекомендации по переходу

Первый механизм, отчёты о соседях, решает задачу поиска. Без него клиент, решивший поискать точку получше, сканирует весь диапазон, что занимает секунды и расходует заряд. С отчётом клиент получает готовый список соседних BSSID с указанием каналов и сразу обращается к нужному.

Второй механизм, рекомендации по переходу, позволяет точке прямо сказать клиенту, что пора уйти. Отправляется управляющий кадр с предложением конкретного соседа, и послушный клиент переключается. Работает не со всеми устройствами, но даёт самый заметный эффект.

Оба механизма требуют от управляющей программы знания о том, какие точки есть вокруг. В OpenWrt эту задачу решают внешние службы, и поставить нужно одну из них:

opkg install usteer

Важная деталь: одновременно должна работать только одна такая служба. Две программы, независимо формирующие списки соседей и рекомендации, конфликтуют, и поведение сети становится непредсказуемым.

Базовая конфигурация включает флаги в разделе беспроводного интерфейса:

config wifi-iface 'wifinet0'
    option device 'radio1'
    option mode 'ap'
    option ssid 'home'
    option encryption 'psk2'
    option key 'пароль_сети'
    option network 'lan'
    option ieee80211k '1'
    option ieee80211v '1'
    option bss_transition '1'
    option wnm_sleep_mode '1'
    option ieee80211w '1'

Последняя строка не лишняя. Защищённое управление кадрами требуется для работы рекомендаций по переходу на современных клиентах, и без него часть устройств игнорирует предложения.

Быстрый переход между точками и домен мобильности

Третий механизм сокращает время самой процедуры аутентификации при переходе. Без него клиент, приходя на новую точку, проходит полный обмен ключами, что при использовании общего пароля занимает десятки миллисекунд, а при корпоративной аутентификации через внешний сервер может занимать сотни.

Включение выглядит так:

config wifi-iface 'wifinet0'
    option ieee80211r '1'
    option mobility_domain '4f57'
    option ft_over_ds '1'
    option ft_psk_generate_local '1'

Идентификатор домена мобильности это четыре шестнадцатеричных символа, и он обязан совпадать на всех точках, иначе клиент считает их разными сетями и быстрый переход не срабатывает. Значение произвольное, главное одинаковое.

Параметр ft_over_ds включает передачу служебного обмена через проводную сеть вместо радиоэфира. Без него точки должны обмениваться кадрами по воздуху, что замедляет переход и расходует эфирное время.

Параметр ft_psk_generate_local позволяет точкам вычислять ключи самостоятельно, без обмена по проводной сети. Он упрощает настройку, поскольку не требует связанности точек на уровне служебного протокола, но подходит только для сети с общим паролем.

Быстрый переход нужен не всегда. Для домашней сети с общим паролем выигрыш скромный, поскольку полная аутентификация и так короткая. Заметную пользу механизм даёт при корпоративной аутентификации с внешним сервером и при чувствительных к паузам приложениях вроде телефонии.

Чем ячеистая сеть отличается от нескольких точек с одинаковым именем

В разговорной речи ячеистой сетью называют любое решение, где несколько устройств дают одну сеть. Технически это разные вещи, и подмена понятий приводит к неверным ожиданиям.

Настоящая ячеистая сеть, описываемая стандартом 802.11s, это связь самих точек между собой по радио, с маршрутизацией трафика между узлами. Она нужна там, где кабель проложить нельзя. Цена заметная: каждый ретранслирующий узел вдвое снижает пропускную способность.

Схема из нескольких точек с одинаковым именем и кабельным соединением между ними называется иначе и работает лучше. Клиенты переходят между точками, используя описанные выше механизмы, а трафик идёт по проводу без потерь на ретрансляцию.

Вывод для квартиры простой: если между точками можно проложить кабель, его нужно проложить. Ячеистую связь по радио рассматривают, только когда другого выхода нет.

Отдельно про двухдиапазонные точки. Одно физическое устройство с радио на 2,4 и 5 ГГц, транслирующее одинаковое имя, само по себе образует расширенный набор услуг из двух соседних BSS. Переходы между диапазонами выглядят для клиента точно так же, как переходы между точками, и все три механизма применяются к ним в той же мере.

Диагностика перехода и проверка того, что механизмы действительно работают

Убедиться в работе на глаз почти невозможно, клиент о своих решениях не сообщает. Нужен перехват служебных кадров.

Создание мониторного интерфейса и запись в файл:

iw phy phy1 interface add phy1mon0 type monitor
ip link set phy1mon0 up
tcpdump -i phy1mon0 -s 0 -w /tmp/roam.pcap type mgt

Файл пишут в каталог /tmp, который находится в оперативной памяти, поскольку долгая запись изнашивает флеш-накопитель роутера.

Если места мало, поток можно направить сразу на рабочую машину:

ssh Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript..1.1 'tcpdump -U -i phy1mon0 -w - type mgt' > /tmp/roam.pcap

Дальше файл открывается в анализаторе протоколов, и проверяется наличие нужных полей. Для отчётов о соседях служит фильтр wlan.rmcap.b1, значение True означает, что возможность объявлена в служебных кадрах. Наличие самих отчётов проверяется фильтром по номеру соответствующего тега.

Со стороны точки полезно смотреть журнал подключений:

logread -f | grep -iE 'hostapd|usteer'

В нём видны моменты подключения и отключения клиентов с указанием BSSID, то есть переход между точками фиксируется. По времени между отключением и подключением оценивают длительность перехода.

С клиентской стороны картина дополняется штатными средствами операционной системы. В Linux это вывод iw dev с текущим BSSID, который меняется при переходе:

watch -n1 'iw dev wlan0 link'

Механизмы роуминга не компенсируют плохое радиопланирование, поэтому начинать стоит с него. Две точки в одной квартире обязаны работать на неперекрывающихся каналах, иначе они мешают друг другу независимо от того, кто к какой подключён.

Для диапазона 2,4 ГГц неперекрывающихся каналов три, и при двух точках берут, например, первый и одиннадцатый. Для 5 ГГц развести каналы проще, достаточно выбрать разные диапазоны, например 36 и 149.

uci set wireless.radio0.channel='1'
uci set wireless.radio1.channel='36'
uci commit wireless
wifi reload

Мощность на двух соседних точках стоит снизить, а не увеличить. Распространённая ошибка состоит в том, что обе точки выставляют на максимум, зоны покрытия перекрываются полностью, и клиент до последнего держится за дальнюю точку, поскольку её сигнал формально ещё приемлем. Уменьшение мощности сужает зону уверенного приёма и заставляет клиента переходить раньше.

Практический ориентир: в месте, где клиент должен перейти на соседнюю точку, уровень сигнала текущей должен опускаться ниже минус семидесяти дБм. Если он держится на минус пятидесяти, точка покрывает лишнее и её мощность избыточна.

Проверить картину покрытия можно обходом помещения с записью уровня:

while true; do
  printf '%s %s
' "$(date +%T)" "$(iw dev wlan0 link | grep -i bssid)" >> /tmp/walk.log
  sleep 2
done

Лог после обхода показывает, где именно клиент терял сигнал и насколько резко это происходило. Резкий провал обычно означает неверное размещение точки, а плавное снижение на большой площади говорит о том, что точек нужно больше или мощность распределена неверно.

Порядок включения механизмов и разумные ожидания от результата

Включать всё сразу распространённая ошибка, после которой невозможно понять, что именно помогло или сломало работу. Разумная последовательность такая:

  1. Заменить базовый пакет wpad на полный и убедиться, что радио поднимается без ошибок в журнале;
  2. Привести все точки к одинаковым параметрам сети: одно имя, один тип шифрования, один пароль, одинаковый идентификатор домена мобильности;
  3. Развести точки по неперекрывающимся каналам, поскольку при одинаковом канале соседние точки мешают друг другу и никакой роуминг не спасает;
  4. Включить отчёты о соседях и поставить одну службу координации, проверив журналом, что клиенты получают списки;
  5. Добавить рекомендации по переходу и защищённое управление кадрами, после чего понаблюдать за поведением проблемных устройств;
  6. Только в конце включить быстрый переход, и то если есть приложение, чувствительное к паузам.

После каждого шага стоит делать замер. Простейший тест, непрерывная передача данных с клиента, который физически перемещают между зонами покрытия. Обрывы и паузы в потоке видны сразу, и их длительность можно измерить.

Ожидания стоит скорректировать заранее. Полный переход между точками без этих механизмов занимает от одной до нескольких секунд в зависимости от клиента. С включёнными отчётами и рекомендациями типичное значение падает до сотен миллисекунд. Быстрый переход сокращает саму процедуру аутентификации до единиц и десятков миллисекунд, но он не отменяет времени, которое клиент тратит на принятие решения.

Именно последнее объясняет, почему иногда сеть из двух точек работает хуже одной. Если клиент держится за дальнюю точку, механизмы его не заставят уйти, а служебный обмен эфирное время расходует. Правильнее снизить мощность дальней точки или переместить её, чем добавлять флаги в конфигурацию.