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 — для США.
Решение
Как уже писал в самом начале, про сам «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, ни для одной ОС.