Быстрый роуминг (802.11r) в WiFi сети на базе Lede (aka OpenWRT)

    Всем привет. Решил я закрепить полученный результат написав статью. А результат этот — это объединение нескольких WiFi точек доступа в сеть в одну неразрывную сеть, ещё её называют бесшовную. Смысл сего действия состоял в том, что моя «локальная» домашняя сеть разрослась до нескольких WiFi точек по причине её (сети) большой площади и невозможности достичь надлежащего качества всего одной точкой.

    image

    Первое и лобовое решение было поставить ещё несколько WiFi AP с тем же BSSID и с виду вроде всё работало, но как оказалось не всё. К примеру мой Android based телефон нормально переваривал эту ситуацию перепрыгивая с точки на точку при потере сигнала от одной и обнаружении сигнала от другой, но у пользователей чудного яФона возникла с этим проблема, сие устройства напрочь отказывались отключаться от уже пропавшей из радиуса действия точки и подключаться к новой, хоть и с более жирным сигналом. Ну и как полагается у сего контингента (никакой неприязни — просто сухие факты) началась вонь, что всё вокруг Г. мой чудный телефончик не может работать с этим барахлом. И начал я искать методы борьбы с этим.

    Мои поиски привели меня к стандарту 802.11r. В котором нам обещают полную прозрачность для WiFi устройств сети их нескольких AP. И даже Apple подтверждает, что умеет так.

    Ну ладно, ради спокойствия души своей и любителей яблок освоим новую дисциплину. Беглое изучение теории и практики показало, что hostapd вроде как умеет сие чудо. Все мои роутеры уже давно на Lede (кто не в курсе, это бывший OpenWRT) ну и как бы в этой связи настройка не должна была бы создать проблем. Но как всегда не всё так просто, либо я туговат :)

    Для начала в lede по умолчанию устанавливается пакет wpad-mini, в нём собрана основная поддержка WiFi AP с минимумом возможной, дабы работало. Меня такой расклад не устраивает. Поэтому необходимо заменить пакет на wpad.

    В простейшем случае для этого нужно выполнить команду:

    opkg install wpad

    пакет притянет с собой всё необходимое и заменит собою wpad-mini. В идеальном же варианте не плохо просто пере собрать образ прошивки средствами ImageBuilder.

    После установки пакета нужно его под настроить. Если вы используете luci интерфейс, то в настройках WiFi сети в разделе Wireless Security появится галочка Enables fast roaming among access points that belong to the same Mobility Domain.



    Включив которую нам предоставляют кучу полей для настройки функции роуминга между AP.
    Если же у вас нет luci или вы предпочитаете настраивать железку изменяя кофиги, то это же делается строчкой:

    option ieee80211r '1'

    в секции config wifi-iface файла конфигурации /etc/config/wireless. Я надеюсь не нужно объяснять, что это надо проделать на всех AP участвующих в роуминге.

    Это было самое простое. А вот далее началось веселье.

    Чтобы объяснить всем точкам, что они в одном роуминге надо это дело как-то настроить. Все мануалы что мне удалось найти упорно сводятся к настройке этого всего дела с использованием RADIUS авторизации. Но у меня нету и RADIUS и не нужен он мне, как я думаю и большинству из нас. Поэтому пришлось эксперементировать.

    Пробежимся по полям, которые предлагает нам заполнить luci:

    NAS ID — как я понял идентификатор текущей точки доступа в RADIUS сервере. И не нужен при отсутствии последнего, но Luci не даёт сохранить настройки, если это поле не заполнено. Ну чтож — заполним. Обычно все рекомендуют вписывать туда MAC адрес устройства без разделителей.

    Mobility Domain — идентификатор конкретно вашей сети. Должен быть один у всех участвующих в роуминге точек. Представляет из себя 16битное число в шестнадцетиричной форме (HEX).

    External R0 Key Holder List — вот тут будут участвовать NAS ID, а говорили нужен только для RADIUS. Или же эта функция не участвует без RADIUS? Поясните кто в курсе? Тут я добавил столько строк, сколько у меня точек доступа в сеть. В формате: MAC-адрес, NAS-ID, 128-bit ключ в виде HEX строки
    Например: 12:fe:ed:6d:bf:ea, 12feed6dbfea, 8a7fcc966ed0691ff2809e1f38c16996
    И так несколько раз с каждой точкой доступа, ключ я использовал один и тот же. Тоже, если кто в курсе как правильно?

    External R1 Key Holder List — аналог предыдущей секции, только вместо NAS-ID некий R1KH-ID.

    Я заполнил так: 12:fe:ed:6d:bf:ea, 12:fe:ed:6d:bf:ea, 8a7fcc966ed0691ff2809e1f38c16996

    В итоге получилось примерно вот так:



    В виде конфига всё это выглядит так:

            option ieee80211r '1'
            option mobility_domain '4f57'
            option pmk_r1_push '1'
            list r0kh '12:fe:ed:6d:bf:ea,12feed6dbfea,8a7fcc966ed0691ff2809e1f38c16996'
            list r0kh 'e8:94:f6:e5:46:72,e894f6e54672,8a7fcc966ed0691ff2809e1f38c16996'
            list r1kh '12:fe:ed:6d:bf:ea,12:fe:ed:6d:bf:ea,8a7fcc966ed0691ff2809e1f38c16996'
            list r1kh 'e8:94:f6:e5:46:72,e8:94:f6:e5:46:72,8a7fcc966ed0691ff2809e1f38c16996'
            option nasid '12feed6dbfea'
            option r1_key_holder '12feed6dbfea'
    

    Сохранив и перезагрузив все устройства не первый взгляд всё продолжило работать. У меня на Телефоне с Android с виду ничего не изменилось. Владельцы iPhone пока довольны — будем наблюдать. WiFi Анализатор видит мою сеть по прежнему как несколько точек, но помимо WPA-PSK авторизации добавилась FT-PSK.

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

    Комментарии 44

      0
      Я правильно понял, что для этой магии нужно иметь все точки доступа с Lede/OpenWRT? Просто роутер с OpenWRT с пакетом wpad и экстендер (например: tp-link RE200) не будет работать?
        +1
        Нужны устройства, которые умеют 802.11r и дают его самостоятельно настроить. Lede/OpenWRT или что там ещё внутри — не столь важно.
        0

        Точки доступа как-то между собой обмениваются информацией? Если да, то как? По мультикасту?

          +1
          А вот это первое ваше «лобовое» решение — пробовали на всех точках доступа установить одинаковый номер канала? У меня так работает уже три года и поддерживается всеми имеющимися системами ios, android, ubuntu, windows. И даже с медиа проблем нет (ну подвиснет иногда на пару секунд при переключении между точками)
            0
            да, они все на одном канале. Оно работает, но постоянно жалуются люди, что перейдя с этажа на этфж связь ухудшается, но если перезапустить WiFi в телефоне, то всё значительно лучше становится. Простая статистика показала, что жалуются в основном владельцы iOS.
            Ничего не имею против iOS, но если бы они мне так не надоедали, даже бы и не заморочился. Только ради них.
              0
              После включения 802.11r тоже могут начать жаловаться, ещё не встречали проблемные устройства?
                0
                Оно работает, но постоянно жалуются люди, что перейдя с этажа на этфж связь ухудшается, но если перезапустить WiFi в телефоне, то всё значительно лучше становится.


                Классическое и простое решение проблемы — настроить пороги для уровня сигнала клиента на точках. Так чтоб, если у клиента ухудшается сигнал, то его точка сама отключит, чтоб он в дальнейшем переключился на точку с хорошим сигналом.
                  0
                  Keenetic так случайно не умеет?
                    0
                    Не могу сказать, у меня всё на микротиках.
              0
              Подскажите пробовали ли MESH решения не использующие 802.11r, например, https://habrahabr.ru/post/277721/?
                0
                Нет не пробовал. 802.11r показался проще в быстрой реализации.
                  0
                  MESH очень медленный.
                  0
                  А пачка таких штук не была бы проще/дешевле/надежней?
                    0

                    Вы вищимо из столичного региона? У нас такого днем с огнем не найти. На заказ от 27 дней.
                    Дешевле? Только если даром, чтобы настроить OpenWrt нужно 0р. 00 коп.

                      0

                      Вы видимо из столичного региона? У нас такого днем с огнем не найти. На заказ от 27 дней.
                      Дешевле? Только если даром, чтобы настроить OpenWrt нужно 0р. 00 коп.

                        0
                        Дмитрий, вы же, надеюсь, не предлагаете этот кал ставить вместо хендмейда, в котором хоть можно отдебажить проблемы? Даже настроя мониторинг всего и вся (rssi/dbi/tof/etc) клиентских устройств и точек (zabbix lld), фиг это помогает на этих устройствах. Просто пустите туда больше 30 клиентов на точку и смотрите, как оно умирает.
                        Можно даже включить псевдороуминг, но тут уже при 20 клиентах начнутся неинтересные вещи.
                        И таки, да, я имею опыт хендмейда, cisco, и печальный опыт в убикьюти и микротах.
                        ТС, нижеуказанные полезняшки в вашем случае не рабочие?
                        disassoc_low_ack
                        rsn_preauth
                        И я вот чё-то слабо представляю безрадиусную безшовщину, но исходя из логов и дебага у людей сие работает, хотя я пробовал онли WPA-Ent
                          +1
                          Ну автор вроде для дома юзкейс воплощает, какие уж там 30 клиентов на точку)
                          0
                          Так у юбиквити как раз с роумингом печалька пока.
                            0
                            Возможно что то не донастроено было, но на моей прошлой работе их роуминг работах крайне плохо
                            0
                            Не из самого столичного. Из мск заказывал на той неделе железку этого же производителя, доставили за 3 дня и 350р. OpenWrt же на каком-то железе ненулевой стоимости работает? Да, комплект не дешев, но и качество другого уровня.

                            Промахнулся, ответ в эту ветку
                              0

                              Были у меня Кинетики и Тплинки, их я и зашил. Пока работают, полет нормалтный.

                              +1
                              На форумах филологов неразрывные Wi-Fi-сети обычно называют бесшовными.
                              Извините.
                                0
                                Не спорю
                                +1

                                А MikroTik? Вполне себе умеют в бесшовный роуминг из коробки, доступны по всей стране, недороги.
                                Разворачивал бесшовный роумниг на них (RB20XXui + набор wAP) — делается на изи, работает на ура. Ubnt, кстати, можно и подождать — их железки того стоят. Так же стоит отметить, что у каждого вендора своя реализация бесшовного переключения между точками (BSSFT тут как одно из средств), поэтому, даже при использовании непроприетарных протоколов дружбы между устройствами не случиться — не выйдет к микроше прицепить циску. C OpenWRT то же самое.


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

                                  0
                                  Ну тут, как я уже говорил, все сводилось к работе на том что есть.
                                  Ну микротики у меня есть, но и их я зашил в WRT, поэтому они тоже у меня в одной саязке.
                                  Мне роднее linux, чем все эти микротиковые оси с их наворотами. Мне проще линухи, уж простите.
                                    +1
                                    routeros — linux 3.3.* с мордой и некоторым количеством проприетарных расширений. Вплоть до некоторых нюансов работы iptables. После понимания как работает линукс, разобраться в routeros проблем нет.
                                    +1
                                    А MikroTik? Вполне себе умеют в бесшовный роуминг из коробки, доступны по всей стране, недороги.
                                    Разворачивал бесшовный роумниг на них (RB20XXui + набор wAP) — делается на изи, работает на ура.


                                    Настоящий, 802.11r, бесшовный роуминг не умеют. Если вы говорите про точки на одной частоте и фильтры по уровни приёма, то это псевдобесшовный.
                                    +1
                                    Немного комментариев с хабра для понимания «бесшовности» или роуминга:

                                    Как я создавал бесшовный Wi-Fi (EDIMAX)
                                    протоколы 802.11r и 802.11k. Эти протоколы отвечают за быстрое, практически мгновенное переключение абонентов от одной точки к другой.


                                    Источник
                                    Во-первых, далеко не все клиенты умеют что в r что в k
                                    Во-вторых, по-настоящему бесшовного роуминга (а-ля WiMAX или 3G или DECT) вы не получите никогда, это просто невозможно ввиду «особенностей» протокола WiFi.
                                    Так что «роуминг» был, есть и остается маркетинговой фичей, за которую можно срубить бабла с ло..^W с клиента. почитайте обсуждения на форуме НАГа, хотя бы, там знающие люди сидят.


                                    Источник
                                    Пара слов о бесшовном роуминге на Mikrotik, если кратко — его нет и никогда не было, ни на Mikrotik ни на Ubiquiti UniFi. Причем Ubiquiti уже достаточно давно отказались от своего Zero-Handoff, т.к. он не дал желаемых результатов.

                                    Роуминг от одной AP к другой AP, как и ранее — прерогатива самого клиента. Именно клиент решает, когда ему переходить на другую точку, а когда нет. Стандарты 802.11a/b/g/n/ac, к сожалению, не предусматривают возможности сообщить клиенту о ближайших AP и уровне их загрузки.
                                      0
                                      «Бесшовный» роуминг нужен только при реальной необходимости поддерживать какую-то потоковую передачу, типа человек идет от точки к точке и говорит по sip-телефону. То есть — почти никогда.
                                      Посему, не зная реальных условий, рискну предположить, что у точек хорошо бы настроить мощность передатчика (Tx power) и, как сказано выше, порог отключения клиентов со слабым сигналом
                                        0
                                        Одного не понял, точки в итоге должны быть на одном канале и ssid/пароль иметь одинаковые, или разные можно?
                                          0
                                          SSID/пароль одинаковые.

                                          А с каналами нет общего мнения. Я долгое время считал, что каналы должны быть разными, чтобы точки не пересекались в диапазоне. Но потом выяснилось, что у многих (например UniFi) требование наоборот — одинаковый канал.
                                            0
                                            Каналы не должны пересекаться в зоне покрытия. Т.е., если представить длинный холл, покрытый 3-мя AP, то каналы будут, например, 1-6-1
                                              0
                                              Есть мнение, что переключение между каналами создает большую паузу (потери). То есть для «бесшовности» лучше одинаковый канал, но в тоже время, нужно ограничить мощность точек для из наименьшего пересечения.
                                                0
                                                Это мнение неверно. И еще раз повторю, что «бесшовность» нужна чрезвычайно редко. Например, если вы бегаете по дому и параллельно ведете онлайн-трансляцию о своих перемещениях. И то, в этом случае нужно быстрое возобновление передачи данных приложением. Т.е. телефон-то переключится на точку быстро, но быстрой переадресации потока данных приложения может и не произойти.
                                                Тем более, в вашем случае, применение 802.11r изначально было продиктовано не жаждой бесшовности, а тем, что этот протокол позволил исправить косяки с разбалансированной настройкой вашей wi-fi сети, так как содержит в себе средства анализа радиоэфира.
                                                  0
                                                  Строить заведомо убого работающую сеть с интерференцией между соседними точками в угоду роумингу — это пять! Даже сама идея бредовая.
                                                    0
                                                    Оно какой-то практический интерес представляет? Просто у меня на псевдороуминге (один SSID, одна частота, отключение клиентов со слабым сигналом) даже VoIP без помех работает при переходе от точки к точке.


                                                    А зачем на одной частоте делать?

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

                                                    Еще так советуют микротиковцы. :-D


                                                    UniFi для роуминга прямо требуют одну и ту же частоту на всех точках.


                                                      0
                                                      Одна и таже частота требуется для ZHO, не имеет отношения к 802.11r и самими разработчиками признано плохой идеей.
                                                      ZHO does have some limitations. When enabled, all APs in the network use the same radio channel, effectively converting the entire network into a single AP. While this completely eliminates roaming latency, all wireless traffic must compete for airtime on a single channel. The result is a more sluggish network, especially with several clients online.


                                                      Вообще, надо понимать, что wifi-роуминг в любом случае инициируется клиентом.
                                                      802.11r, может сократить время аутентификации при инициированном клиентом переходе на другую АР, но не время первичной сессии аутентификации в сети. Без 802.11k не будет бесшовности.

                                                      И еще, быстрее всего будет роуминг при открытых точках, если сделать фильтрацию по MAC. Тут никакой 802.11r не угонится.
                                                        0
                                                        И еще, быстрее всего будет роуминг при открытых точках, если сделать фильтрацию по MAC. Тут никакой 802.11r не угонится.


                                                        Я не уловил смысла. Вы подразумеваете, что при открытой сети авторизация будет мгновенной и не будет разрывов?
                                                          0
                                                          Я говорю, что open-AP будет заведомо быстрее FT-PSK по 802.11r. Будут ли при этом разрывы? В теории — их будет меньше, чем при использовании 802.11r без 802.11k.

                                                          Короче, вся эта муть с 802.11r/k/v придумана чтобы продавать дорогущие железки энтерпрайз-корпорату, где роуминг с повторным запросом к RADIUS действительно медленный. А для PSK выигрыш в скорости невелик.
                                            +2
                                            Проверил ieee80211r на паре TP-LINK 842ND v1 — реально работает.
                                            Исчезли две проблемы:
                                            1. Телефоны держали дальнюю wifi точку до упора, даже если сигнал намного хуже чем у второй (например подойти ко второй точке вплотную, а держится за дальнюю в другой комнате, хоть скорость срезал уже до 1 мбит).
                                            2. При переключении между wifi точками телефоны переходили на секунду в режим сотовой связи и опять подключались к wifi, что приводило к затыкам в тел.разговорах whatsApp / sip и т.п.

                                            Теперь на телефонах wifi точки переключатся не дожидаясь ухудшения сигнала wifi и не переходя в режим сотовой связи.
                                            Проверено на samsung s7 и xiaomi redmi note3 pro.

                                            Из экспериментов —
                                            1.название сети SSID должно быть одинаковое, иначе не сработает.
                                            2.Каналы могут быть разными — на переключение не влияет. (на одной точке поставил 1 канал, на второй 11 канал — всё мгновенно переключает)

                                            Из непоняток, зачем усложнили — сделали два почти дублирующих раздела External R0 Key Holder List и External R1 Key Holder List отличаются только синтаксисом.

                                              +1
                                              Наконец то положительный комментарий :) Я думал не осталось людей без недовольств.
                                              0
                                              Наконец unifi тарелки не нужны с отдельным серваком.
                                                0
                                                Заметил что Ipad 3 (2012 года выпуска) без обрывов не переключается. Видимо старые устройства не знают о 802.11r.
                                                Вот нашел ссылку поддержки стандартов — support.apple.com/ru-ru/HT202628
                                                  +1
                                                  Хотелось бы уточнить несколько моментов. 12:fe:ed:6d:bf:ea — чем мак мы указываем в данном случае? WAN, WWAN, LAN?
                                                  Mobility Domain — что нужно указывать? Все что угодно? Могу FFFF вписать?
                                                  8a7fcc966ed0691ff2809e1f38c16996 — это что? Где это взять? Это пример WPA2 ключа в HEX? Или что это?

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое