Общие инструкции

Настройка сети, гайды для построения нормального роуминга, проверка роуминга на объекте - все тут.

Настройка роуминга на Wi-Fi сети с помощью Wimark One

Страница перенесена в Confluence

При построении Wi-Fi сетей, содержащей более одной точки доступа, возникает вопрос организации роуминга абонентов. 

Немного теории

Под роумингом понимается плавный переход абонента между точками доступа без разрывов и переподключений. И в отличии от мобильных сетей, в которых роуминг (называемый в мобильных сетях Handover) организуется протоколами самой мобильной сети (сети базовых мобильных станций), в сети Wi-Fi всегда конечное слово за клиентом.

Далее используется термин BSSID - который означает общий идентификатор для пары "имя Wi-Fi сети" (SSID) и радио интерфейс точки доступа. Как можно понять из определения, при запуске на одной двухдиапазонной (с двумя радио интерфейсами) точке доступа сети с одним именем в эфире будем видеть два BSSID, по одному на каждом диапазоне. А поэтому, вообще говоря, роуминг нужен не только при переходе между разными точками доступа, но даже при переходе с одного диапазона на другой в рамках одной точки доступа.  

Обо всем этом можно и нужно прочитать в серии статей от коллеги Евгения sfstudio.

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

  1. просканировать эфир и выбрать оптимальный BSSID для подключения
  2. отключиться от предыдущего BSSID
  3. провести ассоциацию и аутентификацию к новому BSSID
  4. (дополнительно) проверить доступность базовых сервисов сети (DNS, gateway, некоторый узел в сети Интернет)

В стандарте 802.11 сделаны некоторые моменты, с помощью которых можно ускорить пункты 1-3. Это делается с помощью расширений:

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

Пункт 4 ложится на плечи администратора сети и подразумевает правильную организацию сети для абонентов, а именно:

* если не организовать правильно сеть для абонентов, то для обеспечения плавного роуминга абонентов потребуется городить например L3 Roaming от Meraki (к сожалению, наше решение еще не способно организовать L3 roaming для прозрачной передачи IP адресов между точками доступа).

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

Настройка на практике

Для включения 802.11kvr на решении Wimark требуется пройти в настройки WLAN и в блоке Роуминг (Roaming) настроить следующее: Screen Shot 2022-11-04 at 14.59.16.png

802.11r при этом будет доступно для включения только для сетей WPA PSK и WPA EAP. 

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

Бытовое тестирование роуминга в Wi-Fi сети

Страница перенесена в Confluence

После создания Wi-Fi сети, содержащей более одной точки доступа, требуется проверить работоспособность роуминга 802.11rk в Wi-Fi сети. 

Для этого можно использовать, например, смартфон на Android и приложение WiFiMan от Ubiquity. Политика Apple, к сожалению, не позволяет приложениям получать доступ к низкоуровневым данным с Wi-Fi интерфейса, поэтому имеем что имеем.

Данное приложение позволяет:

Собственно ради второй функции мы и будет использовать приложение. 

Краткая инструкция проверки работоспособности роуминга: 

  1. Скачать приложение WiFiMan на Android смартфон
  2. Подключиться к тестируемой сети
  3. Открыть приложение и открыть текущее состояние сети (иконка Wireless), кликнуть на подключенный SSID и после перейти в Signal Mapper
  4. Пройтись между разными точками доступа
  5. В приложении при переходе должно быть отображен факт роуминга, как на скриншоте ниже: photo_2022-11-04 11.36.32.jpeg
  6. В случае проблем с настройками вместо плавного перехода будет цепочка переподключений, например: Screenshot_20221103-195155.jpg

Обычно переподключения говорят об отсутствия рабочей передачи ключей по 802.11r между точками доступа. О том как правильно настроить роуминг на сети с использованием контроллера Wimark у нас есть отдельная статья. 

QoS, bbr и fq_codel в Openwrt

Страница перенесена в Confluence

В ходе работы с сетевыми шлюзами \ роутерами на Linux стандартной задачей является "справедливое распределение канала" между пользователями. На самом деле задачу можно сформулировать просто - если 1 пользователь качает торрент, то пинг в игре у другого пользователя не должен (сильно) падать - это справедливо, это качественно.

По умолчанию в Linux используется qdisk (это часть шейпера, которая занимается сортировкой пакетов перед отправкой) типа pfifo_fast который не различает "пользователей на уровне IP" и чем больше 1 пользователь отправляет пакетов, тем меньше в аппаратной очереди достаётся другому пользователю, который отсылает меньше пакетов.

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

/etc/sysctl.conf:

net.core.default_qdisc = fq_codel

Логика работы данного qdisk в том, чтобы из каждого стрима данных (например TCP) отправлять следующий пакет не позднее чем каждые 5 милисекунд, давая приоритет более мелким пакетам и "началам стримов" (например пинг, DNS, SYN будут иметь приоритет).


Более сложный и требующий пары дополнительных пакетов (tc kmod-ifb), но работающий также для download вариант ниже

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin tc qdisc replace dev br-lan root fq_codel ip link add name ifbwan type ifb tc qdisc del dev $(uci get network.wan.ifname) ingress tc qdisc add dev $(uci get network.wan.ifname) handle ffff: ingress tc qdisc del dev ifbwan root tc qdisc add dev ifbwan root fq_codel ip link set ifbwan up # if you don't bring the device up your connection will lock up on the next step. tc filter add dev $(uci get network.wan.ifname) parent ffff: matchall action mirred egress redirect dev ifbwan

Здесь br-lan это бридж через который данные уходят в интернет, и uci get network.wan.ifname  это интерфейс входящих данных (WAN)


Также связанная задача оптимизации, это максимальная эффективность использования физического канала. С красивой анимацией и примерами она описана в статье на хабре и тут. Если коротко - чтобы избежать потери пакетов при заполненном физическом аплинке (или VPN тоннеле, например) нужно использовать пакет kmod-tcp-bbr и 

/etc/sysctl.conf:

net.ipv4.tcp_congestion_control=bbr


На момент 2022 года для роутеров с openwrt и сетевых шлюзов на Linux примерно до 1к пользователей это лучший вариант, который я использовал \ тестировал.









Тестируем скорость Wi-Fi сети

Страница перенесена в Confluence

Всем доброго времени, если вы все еще тестируете скорость Wi-Fi с помощью SpeedTest - то этот текст для вас. 

SpeedTest - утилита для измерения скорости сети. 

Дальше - TBD/

Адрес контроллера по DHCP Option 43

Точки доступа под управлением Wimark FW принимают адрес платформы / контроллера по DHCP опции 43.

Формат для dnsmasq

Расшифровка подопций (suboptions) 43 опции:

1 - ip address

2 - domain

Настройка опции (несколько адресов платформы указываются через запятую):

dhcp-option=vendor:wimark,1,10.10.3.1,10.10.3.2

Формат для isc-dhcp-server

Формат DHCP для сервера isc-dhcp-server приведен ниже.

...
     ddns-update-style interim;
     allow bootp;
     option space WIMARK_AP;
     option WIMARK_AP.server-address code 241 = array of ip-address;
     subnet 192.168.247.0 netmask 255.255.255.0 {
     authoritative;
     option routers 192.168.247.1;
     option subnet-mask 255.255.255.0;
     option domain-name "cisco.com";
     option domain-name-servers 192.168.247.2, 192.168.247.3;
     range dynamic-bootp 192.168.247.11 192.168.247.254;
     default-lease-time 300;
... 

class "Wimark_AP" {

       match if option vendor-class-identifier = "wimark";
       option vendor-class-identifier "wimark";
       vendor-option-space WIMARK_AP;
       option WIMARK_AP.server-address 192.168.247.5,192.168.247.6; }
}

Формат для KEA DHCP

Пример конфигурации для KEA DHCP:

{
"Dhcp4": {
    "authoritative": true,

    "option-def": [
        {
            "name": "server-address",
            "code": 241,
            "space": "wimark",
            "array": true,
            "type": "ipv4-address"
        }
    ],

    "client-classes": [
        {
            "name": "VENDOR_CLASS_wimark",
            "option-def": [
                {
                    "name": "vendor-encapsulated-options",
                    "code": 43,
                    "encapsulate": "wimark",
                    "type": "empty"
                }
            ],

            "option-data": [
                {
                    "name": "vendor-encapsulated-options",
                },
                {
                    "name": "server-address",
                    "space": "wimark",
                    "data": "192.168.247.5",
                    "always-send": true
                },
            ]
        },
    ],
}

Теперь адрес платформы предполагается по IP адресу 192.168.247.5.

Формат для MikroTik

  1. Преобразуйте общедоступный IP-адрес в HEX. Для работы значение параметра 43 должно быть в формате HEX.
192=C0
168=A8
200=C8
10=0A
  1. Значение опции 43 будет "0x0104" + HEX IP. В приведенном примере это: "0x0104C0A8C80A".

  2. Откройте новый терминал на вашем Mikrotik или ssh и введите следующее:

/ip dhcp-server option add code=43 name=wimark value=0x0104C0A8C80A
/ip dhcp-server network set 0 dhcp-option=wimark