unix
Today

WiFi, который не ловил

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

Проблема

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

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

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

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

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

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

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

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

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

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

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

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

unknown/undefined channel number 13 flags 0x0

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

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

Так и в Linux:

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

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

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

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

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

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

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

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

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, ни для одной ОС.

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