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

Проблема

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

Работает надежнее и быстрее, чем использование публичных сетей, даже в поезде или гостинице.

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

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

Причем проблемы с подключением были не со всем клиентским оборудованием и не со всеми ОС, так что дело было явно не в самой мобильной точке.

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

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

Так что наконец решил разобраться с проблемой окончательно.

Тут стоит указать, что хотя все действия происходили на FreeBSD, сама проблема актуальна для любых ОС, включая внезапно встроенные.

Были скопированы настройки сети с «соседнего устройства», где все работало, после чего попытался подключиться полностью вручную — указав название точки, пароль, SSID и номер канала.

Мобильная точка выбирает номер канала случайным образом при каждом включении и на момент отладки выпал номер 13.

Внезапно, при попытке указать канал с этим «чертовым» номером появилась ошибка:

unknown/undefined channel number 13 flags 0x0

Которая немедленно была забита в поисковик и выдала кучу сообщений с похожими проблемами:

Как в FreeBSD-системах:

Так и в Linux:

И даже в прошивках роутеров:

Если думали, что проблеме подвержены только открытые ОС и любимая Windows или MacOS от такого не страдают — у меня для вас плохие новости: раз, два.

Проклятие тринадцатого канала

Посмотрев на номер уже было подумать, что все это происки «темных сил», шатающих WiFi автора темными ночами.

Но ведь FreeBSD это система с красным чертом на логотипе, по идее 13й канал должен быть наоборот самым стабильным и работать безупречно.

Как же так?

Все дело оказалось в.. так называемом Regulatory Domain:

FreeBSD's net80211 stack has basic regulatory domain support, enforcing restrictions on frequency, operating modes, transmission power and general behavior.

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

А теперь читаем:

While the USA restricts 2.4 GHz Wi-Fi to eleven channels, channels 12 through 14 are available elsewhere in the world. You might even be able to activate them by changing your router settings, although you should not do so. Channel 14 is the most tempting to people, as it would have even less interference---but it's illegal to operate your router on this channel in the USA.

Круто?

Как думаете, что произойдет если при установке системы (любой) будет выбрана страна по-умолчанию — США?

Помимо очевидной английской локали, форматов дат и времени, будет применен еще и этот самый «regulatory domain» для Wifi — для США.

И вы получите описанную проблему с подключением и каналами. Ну разве 21 век это не чудо?

Решение

Как уже писал в самом начале, про сам «regulatory domain» знает любой более-менее опытный сисадмин, но вот как его неправильный выбор влияет на работу WiFi-карты — не знает почему-то никто (проверено).

Поэтому вполне допускаю, что описанное окажется сюрпризом и для вас.

К счастью для исправления ситуации, на этот раз не надо патчить драйвера или пересобирать ядро, достаточно указать в /etc/rc.conf правильный regulatory domain:

create_args_wlan0="country RU"

Затем перезагрузить всю систему, либо поддержку сети:

 /etc/rc.d/netif restart

Для того чтобы убедиться в правильности выбора и что описанная проблема вас не коснется, существует команда:

ifconfig wlan0 list regdomain

Так выглядит выдача поддерживаемых каналов:

:regdomain NONE country RU anywhere -ecm
Channel   1 : 2412      MHz 11b          Channel   7 : 2442      MHz 11g          
Channel   1 : 2412      MHz 11g          Channel   8 : 2447      MHz 11b          
Channel   2 : 2417      MHz 11b          Channel   8 : 2447      MHz 11g          
Channel   2 : 2417      MHz 11g          Channel   9 : 2452      MHz 11b          
Channel   3 : 2422      MHz 11b          Channel   9 : 2452      MHz 11g          
Channel   3 : 2422      MHz 11g          Channel  10 : 2457      MHz 11b          
Channel   4 : 2427      MHz 11b          Channel  10 : 2457      MHz 11g          
Channel   4 : 2427      MHz 11g          Channel  11 : 2462      MHz 11b          
Channel   5 : 2432      MHz 11b          Channel  11 : 2462      MHz 11g          
Channel   5 : 2432      MHz 11g          Channel  12 : 2467*     MHz 11b          
Channel   6 : 2437      MHz 11b          Channel  12 : 2467*     MHz 11g          
Channel   6 : 2437      MHz 11g          Channel  13 : 2472*     MHz 11b          
Channel   7 : 2442      MHz 11b          Channel  13 : 2472*     MHz 11g     

Как видите, «проклятый» 13 канал тут есть.

После перенастройки regulatory domain, проблема с мобильной WiFi-точкой исчезла как по волшебству — удивительно какого размера свиней временами подкладывают разработчики стандартов и оборудования простым пользователям.

Еще один удивительный момент:

ни одна нейросеть не смогла найти связь между проблемами с подключением к WiFi и выбором regulatory domain, ни для одной ОС.

Хотя по идее это старая и широко известная история.

P.S.

Оригинал как обычно в нашем блоге, копия на Яндекс Дзене.

Стоит еще добавить, что на самом деле проблема касается двух каналов: 12 и 13. А еще есть 14, использование которого разрешено только в Японии, поэтому для его использования придется переключиться на их regulatory domain.

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