В настоящее время интерференция наиболее актуальна для диапазона 2.4 ГГц, который перенасыщен работой вездесущих точек доступа. В статье я рассмотрел, какие возможности по исследованию радиочастотного спектра имеются на борту RouterOS, сформулировал рекомендации по выбору рабочей частоты точки доступа, работающей в сети без контроллера, а также предложил авторскую реализацию её автоматической смены. Предыстория такова, что ко мне обратилась компания Coffee Cup, у которой имеется сеть точек продаж формата кофе с собой, размещённых в разнокалиберных торговых центрах различных городов. Для работы кассового оборудования жизненно необходима работа Wi-Fi именно в диапазоне 2.4 ГГц, который, как следует ожидать, сильно зашумлён даже в огромных ТРЦ. Проблема оказалась настолько острой, что периодически устройства не могли нормально выйти в интернет, войдя в пике попыток переподключений к точке доступа. Вот в этом контексте и будет идти повествование, с отвлечением на моделирование других ситуаций.

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


Всего каналов 14. При этом не все разрешены в той или иной государственной локации. Классической гик-рекомендацией является использование «запрещённого для свободного использования» канала (речь идёт об 2484 МГц) в соответствии с постановлением Правительства РФ от 12.10.2004 N 539 (ред. от 22.12.2018) «О порядке регистрации радиоэлектронных средств и высокочастотных устройств», а именно пункта 24, который гласит, что не подлежат регистрации устройства малого радиуса действия, используемые в сетях беспроводной передачи данных, и другие устройства с функцией передачи данных в полосе радиочастот 2400 — 2483,5 МГц, с прямым расширением спектра и другими видами модуляции с максимальной эквивалентной изотропно-излучаемой мощностью не более 100 мВт.

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

Интерференции бывают разнородные. Межканальные интерференции (neighboring channel interference) возникают, когда сигналы от устройств, работающих на разных, но расположенных недостаточно далеко частотах, частично накладываются друг на друга. Результат – интерференция на обоих каналах. Внутриканальные интерференции (co-channel interference) – это наложение сигналов от устройств, работающих на одинаковой частоте. Кроме этого помехи и интерференции могут создавать устройства, не имеющие отношения к IEEE 802.11, например: Wi-Max, Bluetooth, микроволновые печи, некоторые радиотелефоны, летающие за окном квадрокоптеры.


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


Для упрощения ниже будут представлены измерения в лабораторных условиях, где нет высокой загруженности. Классический для беспроводных точек доступа вывод состояния эфира представлен ниже. На нём отображены (в порядке очерёдности) MAC-адрес соседних Wi-Fi точек доступа, имена вещаемых ими сетей (SSID), занимаемые частоты, ширина каналов и возможности по расширению спектра, используемый стандарт, уровень принимаемого от них сигнала, уровень шума на занимаемой частоте и соотношение сигнал/шум:

/interface wireless scan yourInterfaceName 
Flags: A - active, P - privacy, R - routeros-network, N - nstreme, T - tdma, W - wds, B - bridge 
	ADDRESS				SSID			CHANNEL			SIG   NF SNR
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2412/20-Ce/gn	-80 -104  24
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2412/20-Ce/gn	-76 -104  28
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2417/20-Ce/gn	-61 -104  43
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2417/20/gn		-90 -104  14
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2432/20-Ce/gn	-83 -105  22
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2457/20-eC/gn	-74 -105  31
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2462/20/gn		-80 -102  22
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2462/20-eC/gn	-57 -102  45
AP	XX:XX:XX:XX:XX:XX	XXXXXXXXXXXXXX	2462/20-eC/gn	-91 -102  11

Современные стандарты Wi-Fi (IEEE 802.11n и новее) умеют объединять каналы по 40 МГц и более (channel aggregation) и, соответственно, расплываться на соседей. Сделано это для увеличения скорости передачи информации. Поэтому сразу отмечаем, что если необходимо быстро и без задержек предавать современный тяжёлый мультимедийный контент, то использовать стоит только 5 ГГц. 2.4 ГГц оставить там, где важно работать на большом расстоянии или через стены. А также для тех устройств, которые по-другому не умеют. Так как наша основная задача — уменьшить интерференции, поэтому разумно будет использовать более узкую полосу, например, в 5 МГц. Странные аббревиатуры Ce, eC, XX обозначают, в какую сторону от центральной частоты может быть выполнено расширение extended для channel aggregation (Ce – право, eC – влево, XX – в любую сторону). Для понимания, какую же частоту всё-таки выбрать, лучше использовать другие консольные команды, отсекающие лишнюю информацию и агрегирующие вывод в более удобном виде:

/interface wireless snooper snoop yourInterfaceName 
CHANNEL			USE        BW 		NET-COUNT 	NOISE-FLOOR 	STA-COUNT
2412/20/gn		20.3%	223.7kbps	4			-104			9
2417/20/gn		10.7%	74.5kbps	3			-104			7
2422/20/gn		17.8%	29.1kbps	1			-105			1
2427/20/gn		7.7%	66.8kbps	0			-105			0
2432/20/gn		10.9%	371.9kbps	1			-105			3
2437/20/gn		8.4%	59.9kbps	0			-105			0
2442/20/gn		8.1%	174.9kbps	0			-104			0
2447/20/gn		0.9%	6.8kbps		0			-103			1
2452/20/gn		5.2%	47.0kbps	0			-105			1
2457/20/gn		13%		105.4kbps	1			-106			1
2462/20/gn		14.2%	129.7kbps	4			-103			7

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

/interface wireless frequency-monitor yourInterfaceName
FREQ			USE			NF
2412MHz			12.9%		-104
2417MHz			19.4%		-105
2422MHz			15.4%		-106
2427MHz			4.8%		-116
2432MHz			15.8%		-118
2437MHz			1.2%		-104
2442MHz			8.4%		-105
2447MHz			1.6%		-104
2452MHz			2.5%		-107
2457MHz			13.5%		-106
2462MHz			15.8%		-103

Дополнительно на борту имеется вот такой режим тексто-графического спектрального сканирования, показывающего мощность излучения в текущий момент времени. В каждой строке на графике отображается частота (столбец FREQ), среднее значение мощности (столбец DBM) и графическое представление мощности в виде точек (столбец GRAPH). Двоеточие «:» обозначает среднее значение мощности. Точками «.» обозначены средние пиковые значения:

/interface wireless spectral-scan yourInterfaceName 
FREQ  DBM GRAPH
2381  -85 :::::::::::::::::::::::::::::::::::::::::::::.
2383  -84 ::::::::::::::::::::::::::::::::::::::::::::::::.
2386  -85 ::::::::::::::::::::::::::::::::::::::::::::::.........
2389  -86 :::::::::::::::::::::::::::::::::::::::::::......
2391  -85 ::::::::::::::::::::::::::::::::::::::::::::::...
2394  -87 ::::::::::::::::::::::::::::::::::::::::...............
2397  -85 ::::::::::::::::::::::::::::::::::::::::::::::............
2399  -84 ::::::::::::::::::::::::::::::::::::::::::::::::.
2402  -86 :::::::::::::::::::::::::::::::::::::::::::............................
2405  -86 :::::::::::::::::::::::::::::::::::::::::::..............................................
2408  -83 ::::::::::::::::::::::::::::::::::::::::::::::::::::....................................................
2410  -83 ::::::::::::::::::::::::::::::::::::::::::::::::::::....................................................

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


Более подробно про весь инструментарий, имеющийся в RouterOS для спектрального анализа радиоэфира, можно почитать в докладе Дмитрия Скоромнова на MikroTik User Meeting в 2019 году в Москве. Желающим во всём этом хорошо разбираться могу порекомендовать пройти у него обучение на онлайн-курсе по программе «Устройство, проектирование и диагностика беспроводных сетей 802.11 (Wi-Fi)».

Выбор рабочей частоты должен быть остановлен на той, которая наименее загружена и имеет наименьший уровень шума. Но есть ещё кое-что, о чём нужно обязательно помнить. Если нет возможности уйти на свободный смежный канал, то лучше работать на том же канале, на котором работает современный роутер (здесь и далее под роутером понимается access point) не сильно удалённого соседа. Не нужно выбирать соседнюю с ним частоту. Тут логика следующая: работая на общем канале и слыша друг друга, точки доступа смогут договариваться насчёт совместной поочерёдной работы. Важным моментом является то, что они должны воспринимать друг друга не за шум, а за устройство IEEE 802.11. И желательно, чтобы у них не было других помех, и они обе могли работать на высоких скоростях, тем самым повышая утилизацию эфирного времени. И ещё чтобы к ним не было подключено постоянно скачивающее что-то из интернета устройство-динозавр, занимающее эфир медленной загрузкой. Переводя своё устройство на соседнюю частоту, мы делаем хуже обоим, лишь увеличивая интерференции. Интерференция – неизбежное зло для 2,4 ГГц. Проблема будет проявляться только при одновременной передаче. Нежелательно настраивать близлежащие передатчики на несмежных каналах. Стоит также помнить, чем выше скорость, тем выше требования к SNR.

В идеальном мире на 2.4 ГГц все роутеры работают только на смежных каналах. При этом высокоскоростные устройства занимают одну общую частоту. Роутеры, поддерживающие только старые стандарты, работают на отдельных частотах. «Медленные» клиенты (не поддерживающие высокие скорости, из-за которых происходит снижение утилизации эфирного времени) из сетей исключены. И никто в эту идиллию инженерной мысли постоянно вмешаться не пытается.

Выбор рабочей частоты можно доверить и самому MikroTik, включив режим auto в настройках:

/interface wireless set yourInterfaceName frequency=auto

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

/int wireless monitor [find name=yourInterfaceName] once 
                 status: running-ap
                channel: 2447/20-eC/gn
      wireless-protocol: 802.11
            noise-floor: -102dBm
         overall-tx-ccq: 95%
     registered-clients: 8
  authenticated-clients: 8
            wmm-enabled: yes
      current-tx-powers: 1Mbps:24(24/29),2Mbps:24(24/29),5.5Mbps:24(24/29),11Mbps:24(24/29),
                         6Mbps:24(24/29),9Mbps:24(24/29),12Mbps:24(24/29),18Mbps:24(24/29),
                         24Mbps:24(24/29),36Mbps:23(23/28),48Mbps:22(22/27),54Mbps:21(21/26),
                         HT20-0:24(24/29),HT20-1:24(24/29),HT20-2:24(24/29),HT20-3:24(24/29),
                         HT20-4:24(24/29),HT20-5:23(23/28),HT20-6:21(21/26),HT20-7:20(20/25),
                         HT40-0:24(24/29),HT40-1:24(24/29),HT40-2:24(24/29),HT40-3:24(24/29),
                         HT40-4:24(24/29),HT40-5:23(23/28),HT40-6:21(21/26),HT40-7:20(20/25)
    notify-external-fdb: no

Для нас здесь интересна характеристика CCQ (Client Connection Quality). Она интерпретирует значение в процентах, насколько эффективно используется полоса пропускания относительно максимально возможного значения. Рассчитывается как среднее отношение двух временных интервалов: делителем выступает реально затраченный промежуток времени на передачу кадра, числителем является минимально возможное время (с максимальной скоростью и без повторных попыток отправить кадр). Если его значение начнёт снижаться, значит, количество повторных отправок стало расти, а этому виной интерференция. Подведём промежуточные итоги. Нами выбрана оптимальная частота Wi-Fi, интерференции есть, но лучше не сделаешь:


В пятницу вечером поступает звонок: у клиента всё упало, не работает CRM, касса, камера. А всё потому, что соседние точки доступа до этого несколько раз были перезагружены и поменяли свои настройки излучения, а у нас частота задана жёстко. Режим auto часто тоже не помогает, не в этой, так другой аналогичной ситуации. Клиентские устройства постоянно разрывают соединение с точкой доступа. В логе видим примерно следующее:

2023-03-16T14:01:36.013859+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: disconnected, unicast key exchange timeout, signal strength -33
2023-03-16T14:01:37.985225+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: connected, signal strength -25
2023-03-16T14:01:42.985967+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: disconnected, unicast key exchange timeout, signal strength -26
2023-03-16T14:01:48.994610+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: connected, signal strength -26
2023-03-16T14:01:53.983365+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: disconnected, unicast key exchange timeout, signal strength -26
2023-03-16T14:02:06.466390+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: connected, signal strength -27
2023-03-16T14:02:12.565514+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: reassociating
2023-03-16T14:02:12.616101+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: disconnected, ok, signal strength -27
2023-03-16T14:02:12.616101+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: connected, signal strength -23
2023-03-16T14:02:16.003368+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: reassociating
2023-03-16T14:02:16.056218+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: disconnected, ok, signal strength -23
2023-03-16T14:02:16.056218+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: connected, signal strength -24
2023-03-27T14:52:27.815225+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: disconnected, group key exchange timeout
2023-03-27T14:52:27.856921+03:00 192.168.15.25 wireless,info BA:5B:4E:A6:FF:0F@wlan1-COFFEECUP_2_staff: disconnected, group key exchange timeout
2023-03-27T14:52:31.770148+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: connected, signal strength -54

Для начала разберёмся, что же тут происходит. Мы видим неудачные попытки подключения клиентов с отличным уровнем сигнала по причине какого-то timeout. Group key exchange (Unicast key exchange аналогичен ему) – это процедура обновления временного ключа в WPA. Ключ общий для всех клиентов и периодически сменяется роутером. В MikroTik по умолчанию интервал обновления 5 минут:


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

2023-03-20T11:08:12.185476+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: disconnected, extensive data loss
2023-03-20T11:08:12.399566+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: connected, signal strength -44
2023-03-20T11:08:51.069290+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: disconnected, extensive data loss
2023-03-20T11:08:51.155986+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: connected, signal strength -44
2023-03-20T11:12:06.857901+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: disconnected, extensive data loss
2023-03-20T11:12:06.931950+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: connected, signal strength -45
2023-03-20T11:15:40.124038+03:00 192.168.15.17 wireless,info 72:5E:1F:46:5B:A0@wlan4-COFFEECUP_2: connected, signal strength -59
2023-03-20T11:15:40.525311+03:00 192.168.15.17 wireless,info 72:5E:1F:46:5B:A0@wlan4-COFFEECUP_2: disconnected, received deauth: sending station leaving (3), signal strength -59
2023-03-20T11:15:54.109104+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: disconnected, extensive data loss
2023-03-20T11:15:54.236219+03:00 192.168.15.25 wireless,info AA:D2:21:F2:04:A8@wlan1-COFFEECUP_2_staff: connected, signal strength -35
2023-03-16T14:02:12.565514+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: reassociating
2023-03-16T14:02:12.616101+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: disconnected, ok, signal strength -27
2023-03-16T14:02:12.616101+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: connected, signal strength -23
2023-03-16T14:02:16.003368+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: reassociating
2023-03-16T14:02:16.056218+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: disconnected, ok, signal strength -23
2023-03-16T14:02:16.056218+03:00 192.168.15.17 wireless,info 60:01:94:20:4A:C9@wlan1-COFFEECUP_2_staff: connected, signal strength -24

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

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

KeyExchangeTimeoutSeacher.lua
{
    # KeyExchangeTimeoutSeacher v1.1 (202303)
    # Скрипт меняет частоту WiFi при обнаружении в логе сообщений:
    # "unicast key exchange timeout" или "group key exchange timeout"
    # Имя интерфейса с проблемами
    :local interfaceName "yourInterfaceName";
    # 2407 2412 2417 2422 2427 2432 2437 2442 2447 2452 2457 2462 2467
    # Минимальная рабочая частота, разрешенная конфигурацией устройства
    :local frequencyMin 2412;
    # Максимальная рабочая частота, разрешенная конфигурацией устройства
    :local frequencyMax 2452;

    :local smtpServer "XXX";
    :local emailFrom "XXX";
    :local emailTo "XXX";
    :local smtpUser "XXX";
    :local smtpServerPort 465;
    :local smtpUserPass "XXX";
    # Максимальное количество ошибок, после которых меняем частоту
    :local countTreshold 5;
    # Время, через которое обнуляется countTreshold (секунд)
    :local timeTreshold 600;

    :global count;
    :global time;
    :local frequency;
    # EpochTime - функция для вычисления UnixTime
    :global EpochTime do={
        :local ds [/system clock get date];
        :local months;
        :if ((([:pick $ds 9 11]-1)/4) != (([:pick $ds 9 11])/4)) do={
            :set months {"an"=0;"eb"=31;"ar"=60;"pr"=91;"ay"=121;"un"=152;"ul"=182;"ug"=213;"ep"=244;"ct"=274;"ov"=305;"ec"=335};
        } else={
            :set months {"an"=0;"eb"=31;"ar"=59;"pr"=90;"ay"=120;"un"=151;"ul"=181;"ug"=212;"ep"=243;"ct"=273;"ov"=304;"dec"=334};
        }
        :set ds (([:pick $ds 9 11]*365)+(([:pick $ds 9 11]-1)/4)+($months->[:pick $ds 1 3])+[:pick $ds 4 6]);
        :local ts [/system clock get time];
        :set ts (([:pick $ts 0 2]*60*60)+([:pick $ts 3 5]*60)+[:pick $ts 6 8]);
        :return ($ds*24*60*60 + $ts + 946684800 - [/system clock get gmt-offset]);
    }
    :local currentFrequency [/interface wireless get $interfaceName frequency];
    :local mikrotikName [/system identity get name];
    :local stringSearch1 "$interfaceName: disconnected, unicast key exchange timeout";
    :local stringSearch2 "$interfaceName: disconnected, group key exchange timeout";
    :local setStringSearch {$stringSearch1; $stringSearch2};
    # Инициализация массива
    :local logArray [ :toarray "" ];
    :foreach stringSearch in=$setStringSearch do={
        :foreach line in=[/log find buffer=wireless message~$stringSearch] do={
            :set logArray ($logArray, $line);
        }
    }
    # Если массив не пустой
    :if ($logArray != ({})) do={
        # Очищаем лог от старых обнаружений
        :log info "Wireless log clear by wifi analyzer script!";
        :execute "/system logging action set wireless memory-lines=1";
        :execute "/system logging action set wireless memory-lines=1000";
        # Парсим лог
        :foreach string in=$logArray do={
            # Определяем текущее время
            :local nowTime [$EpochTime];
            :local nowTimeWithDelta ($nowTime - $timeTreshold);
            # Много ли времени прошло с момента обнаружения последней ошибки
            :if ($nowTimeWithDelta > $time) do={
                :set count 0;
                :set time $nowTime;
            }
            :if ($count < $countTreshold) do={
                :set count ($count + 1);        
            } else={
                :set count 0;
                :set time [$EpochTime];
                if ($currentFrequency = $frequencyMax) do={
                    :set frequency $frequencyMin;
                } else={
                    :set frequency ($currentFrequency + 5);
                }
                :execute "/interface wireless set $interfaceName frequency=$frequency";
                # Отправка уведомления на email
                /tool e-mail send from=$emailFrom to=$emailTo server=$smtpServer \
                    port=$smtpServerPort user=$smtpUser password=$smtpUserPass start-tls=tls-only \
                    subject="$mikrotikName change frequency to $frequency MHz" \
                    body=("Good luck!");
                :log info "$mikrotikName change frequency to $frequency MHz";
                # Прекращаем выполнение скрипта, чтобы в будущем проанализировать
                # работу на новой частоте (несмотря на количество оставшихся не обработанных сообщений лога)
                :error "$mikrotikName change frequency to $frequency MHz";
            }
        }
    }
}


Код парсит лог в буфере wireless и ищет в нём сообщения, содержащие ключевые слова disconnected, unicast key exchange timeout или disconnected, group key exchange timeout – триггеры появившихся проблем, которые придётся решать сменой рабочей частоты. Если они встретились, тогда определяется текущее время, которое переводится в Unix Time Stamp. Из коробки RouterOS не поддерживает этот формат, поэтому пришлось использовать найденную в интернете функцию EpochTime. Далее код обращает внимание, давно ли до этого встречалось подобное сообщение (здесь удобно использовать Unix Time Stamp в арифметических операциях). Если давно, то выставляет счётчик на ноль и начинает подсчитываться количество произошедших таймаутов (сообщений об ошибках). Отмечу, что время будет впервые рассчитано только после того, как счётчик единожды превысит указанный порог. Если превышен порог, то точка доступа переключается на следующую рабочую частоту и отправляет администратору уведомление. Перед выполнением скрипта необходимо внести изменение в конфигурацию устройства, указав беспроводному интерфейсу жёстко заданную рабочую частоту, и добавить дублирование сообщений в логе для тем wireless и info в новый буфер wireless, например:

/interface wireless set yourInterfaceName frequency=2412
/system logging add action=wireless topics=wireless,info
/system logging action add name=wireless target=memory


Для устройств, работающих на RouterOS 7, в коде отправки сообщения вместо start-tls=tls-only необходимо написать tls=yes. В планировщике необходимо запланировать выполнение скрипта:

/system scheduler
add interval=150s name=KeyExchangeTimeoutSeacher on-event="/system script run KeyExchangeTimeoutSeacher" policy=\
    ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup

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

:log info "60:01:94:20:4A:C9@yourInterfaceName: connected, signal strength -24";
:log info "60:01:94:20:4A:C9@yourInterfaceName: disconnected, unicast key exchange timeout, signal strength -33";
:log info "AA:D2:21:F2:04:A8@yourInterfaceName: disconnected, group key exchange timeout";

При таком тестировании добавленное дублирование сообщений в логе для тем wireless и info необходимо выключить, а в код внести изменения:

...
:foreach line in=[/log find buffer=memory message~$stringSearch] do={
...
:execute "/system logging action set memory memory-lines=1";
:execute "/system logging action set memory memory-lines=1000";
...

Ещё одна задача автоматизирована. Роутеры стараются подобрать рабочую частоту, на которой беспроводные клиенты смогут работать без навязчивых ошибок. Выбор у них на самом деле невелик. При желании можно допилить код, продумав более сложные алгоритмы по смене частоты. Или реакцию на появление других сообщений в логе. Или заняться более детальным переконфигурированием беспроводных интерфейсов. А также можно выйти на другие диапазоны, где на текущий момент интерференция не столь актуальна. MikroTik здесь выступает швейцарским ножом, с помощью которого можно, приложив усилия и фантазию, получить интересные автономные решения. Обобщая сказанное, выше рассмотрены причины появления разнородных интерференций в работе Wi-Fi-оборудования, показаны возможности по анализу радиоэфира, имеющиеся на борту в RouterOS. Сформулированы в некотором отношении противоречивые рекомендации по назначению рабочей частоты точки доступа. И самое интересное, представлен скрипт для её автоматической смены при появлении характерных ошибок.

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх ????️

Комментарии (26)


  1. AcckiyGerman
    11.04.2023 12:54
    +5

    Проблема решается в три строчки:

    1. Кассовое оборудование - по кабелю.
    2. Беспроводные клиенты - в 5ГГц.
    3. 2.4 ГГц на даче.

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


    1. shteyner
      11.04.2023 12:54
      +1

      Собственно да, но если есть уже оборудование, вроде старых ручных терминалов, у которых нет ethernet и есть только wifi 2.4? Хотя и тут лучше заморочится и посмотреть драйвера на эти кассы, они часто умеют по блютусу интернет получать или через usb. А совсем старых касс уже не осталось т.к все кассы в 17 году начали переводить на обязательный онлайн, а простейшие терминалы нужно было заменять т.к там возможностей апгрейда не было, а это всегото 6 лет назад, так что совсем старья не должно быть.


    1. event1
      11.04.2023 12:54
      +1

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

      А у вас проблема по сути не решена, а чуток отложена.

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


      1. edo1h
        11.04.2023 12:54
        +1

        На нашей грешной земле, провести кабель к кассовому оборудованию вам не даст дизайн магазина или каприз начальства

        Подвести электричество эти капризы не мешают же

        А если не работает, надо просто подождать 2 минуты и он снова заработает сам по себе.

        Представляю какими словами вспоминали бы авторов такого решения в продуктовой рознице


        1. event1
          11.04.2023 12:54

          Представляю какими словами вспоминали бы авторов такого решения в продуктовой рознице

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


          1. olegtsss Автор
            11.04.2023 12:54

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


    1. olegtsss Автор
      11.04.2023 12:54
      +1

      Я здесь презентую автономный скрипт по смене частоты Wi-Fi при появлении в логах характерных проблем. Но это только во второй ее половине. В первой части даются классические рекомендации по назначение рабочей частоты с объяснением сути происходящего.


  1. dabrahabra
    11.04.2023 12:54

    А не сталкивались с проблемами отключения радиотракта микротика в виду детекции излучения радара?


    1. olegtsss Автор
      11.04.2023 12:54

      Очень интересно, можно подробнее?


      1. chaynick
        11.04.2023 12:54

        Это не микрота трабла а спецификации Wi-Fi, зовется DFS. https://www.cisco.com/c/en/us/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.pdf


    1. BoreaAlex
      11.04.2023 12:54

      Так детект радара вроде отключается. На вкладке Wireless нужного интерфейса жмете Advanced mode и там строчка skip DFS channels, ставите disabled. По крайней мере у меня после этого детект перестал активироваться.


  1. red5
    11.04.2023 12:54
    +1

    А еще в каждой AP Mikrotik есть не безизвестный CAPsMAN, который можно настроить локально, что бы он управлял своими же радио-интерфейсами. И этот CAPsMAN без всяких скриптов умеет делать background scan радио-обстановки и менять частоты.


    1. olegtsss Автор
      11.04.2023 12:54

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


      1. red5
        11.04.2023 12:54

        Сильно подозреваю, что так же как и auto, только не на момент старта, а с заданной переодичностью.


  1. aPiks
    11.04.2023 12:54
    -1

    Вообще, я удивлён, что это является проблемой. У меня вокруг квартиры 12 достаточно сильных сигналов от роутеров на 2.4 ГГц. При этом, у меня самого ни с Wi-Fi на 2.4 ГГц ни на 5ГГц проблем нет. Даже BT 5.0 выдаёт около 1.6 Мб/с в секунду на максимуме, что с таким загаженым каналом довольно редкое явление.

    Все работает на автомате, я ни частоты ни канал не выбирал. Вырубил Wi-Fi на операторском GPONе, раскидал по дому 3 штуки google nest Wi-Fi на 123 квадрата и ниже -60 dB нигде по квартире нет. Поднял сетку дома за 20 минут и три тыка приложении, год работает - проблем нет.

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


    1. vadimk91
      11.04.2023 12:54

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


      1. DaemonGloom
        11.04.2023 12:54
        +1

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


      1. aPiks
        11.04.2023 12:54

        То, что вы описываете, скорее всего, не результат проблемы, описанной в статье, а использование дешевой точки доступа или неправильной её конфигурации или маленького интернет-канала. Загруженные wi-fi каналы тут ни при чём. Обычно, в отелях висит по 1 точке на 6-10 комнат, а количество клиентов в эфире сильно ниже, чем в человейнике, где приставки, тв-боксы, смарт-тв, смартфоны, ноутбуки, устройства умного дома и т.д. На самом деле, самые хреновые места с точки зрения организация Wi-Fi покрытия - это как раз таки многоквартирные дома. Особенно, когда люди начинают маяться фигнёй и покупают всякие промышленные точки доступа себе в квартиру, вместо создания той-же mesh-сети или покупки нескольких точек доступа, если есть разводка ethernet по дому.


  1. AtachiShadow
    11.04.2023 12:54
    +2

    Дело не в том, сколько точек у вас видно или какой RSSI у точки, а в том, сколько клиентов в радио доступности вашей точки и какой SNR. Не знаю, почему автор написал "2.4 сильно зашумлён !даже! в огромных ТРЦ" но именно в местах скопления клиентов у радиосети и будут проблемы. Автор видимо не понимает принципа, как работает Wi-Fi, потому что сказать, что не работает "даже" в ТЦ это как сказать, что не работает "даже" на стадионе во время спортивного матча, когда болельщиков пару тысяч.

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


    1. olegtsss Автор
      11.04.2023 12:54
      -2

      Кофебар обошьем противокумулятивным экраном (читай, клеткой фарадея). "Но именно в местах скопления клиентов у радиосети и будут проблемы " - не верно. Узким горлышком Wi-Fi AP не является количество беспроводных клиентов. "2.4 сильно зашумлён даже в огромных ТРЦ" написано потому, что в подобного рода объектах ожидаешь централизованные решения со стороны ТРЦ, а не существующий зоопарк. Вы объясните, как работает Wi-Fi, раз уж обладаете столь уникальными знаниями, особенно касательно слотов для подключенных устройств.


  1. ZloiDevil
    11.04.2023 12:54

    Спасибо, меня Plume устраивает. Когда микротик хотя бы наполовину приблизится по возможностям, позовите


    1. olegtsss Автор
      11.04.2023 12:54

      Расскажите о вашем опыте, будет интересно послушать.


    1. init0
      11.04.2023 12:54

      Вы предлагаете деградировать? Спасибо, не надо


  1. Fasterpast
    11.04.2023 12:54
    +1

    Ну 2.4 диапазон, конечно, довольно проблемный... Вот например поменяли в офисе микроволновку, с обычной на инвертор. При включении оной на полную мощность в офисе начал падать весь 2.4, включая бт колонки и мыши. Мы уж испугались, что там экранирование нарушено или еще что, но нет, по факту оказалось, что мощность излучения вполне паспортная, но частотный диапазон ровнехонько ложится на весь "нужный" 2.4 эфир... А старая излучала в довольном узком диапазоне. На спектрограмме обе печки на одном и том же месте, роутер примерно в метре от неё. Если бы она была, предположим, не наша, а соседская за гипсокартонной стеной, вероятно нас ждало бы не мало веселья.


    1. aPiks
      11.04.2023 12:54

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


      1. Fasterpast
        11.04.2023 12:54

        LG... Писали в поддержку (русскую правда), ответ - "в инструкции сказано, что может вызывать помехи bt и wifi, сказано. Чего вы хотите?"