OS X и проблемы с WiFi

on February 16th, 2014 by Hades | 2 Comments »

Часто пользователи OS X сталкиваются с проблемой, когда компьютеры от Apple не видят сетей Wi-Fi работающих в диапазонах 2,4 и 5 ГГц или такие сети периодически отваливаются.

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

Ниже приведен примере компьютера от Apple, официально поставляемого в Украину, с установленной внутри картой от Broadcom.

Для снятия данных о текущем режиме работы адаптера Wi-Fi, и параметрах работы с роутером, нужно заглянуть в приложение “Сведения о системе”, в раздел Wi-Fi.

WiFiInfo

Так же есть способ посмотреть то-же самое в терминале, все цитаты ниже в этой заметке получены как раз из терминала по команде:

system_profiler SPAirPortDataType

В ответе нас интересовать будут текущие параметры работы нашего адаптера Wi-Fi:

Interfaces:
en1:
Card Type: AirPort Extreme (0x14E4, 0xD6)
Firmware Version: Broadcom BCM43xx 1.0 (5.106.98.100.22)
MAC Address: b8:8d:12:41:fd:b0
Locale: RoW
Country Code: US
Supported PHY Modes: 802.11 a/b/g/n
Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165

В данном примере видно, что адаптер у нас от Broadcom, и виден текущий режим работы адаптера 802.11 a/b/g/n и поддерживаемые каналы. Также указана страна – US (Спасибо добрым монтажникам, которые настроили Wi-Fi моим соседям).

Почему это произошло? И почему я теперь не могу использовать на своем Wi-Fi роутере каналы 12 и 13?

Все это произошло при включении OS X и сканировании диапазона 2.4ГГц. Параллельно OS X также пытается определить регион в котором находится компьютер, чтобы настроить региональные ограничения – делает OS X это по протоколу 802.11d, слушая какие региональные коды выставлены в роутерах.

В случае с картами Broadcom, первую смену страны OS X старается взять с предпочтительной сети, если она видна в эфире. Если предпочтительной в эфире нет, или на ней отключено 802.11d – то код страны берется с любого соседнего роутера. Но иногда этот алгоритм сбоит, и мак цепляет код страны с чужого роутера. Особенно часто беда происходит после пробуждения из сна. Также при каждом ручном подключении к другому роутеру, драйвер для карт Broadcom обновит региональный код и соответственно список каналов, на значения из роутера к которому подключается, естественно если там вещается по 802.11d другая страна, от той, на которую мак уже настроился ранее…

Для карт Atheros под OS X алгоритм другой – драйвер не ориентируется на список предпочтительных сетей, и страна по протоколу 802.11d хватается от первого попавшегося в эфире роутера, после этого уже не важно какой код в роутере к которому подключается MacOS – для карт Atheros код выставляется один раз и до отключения адаптера!

Увидеть такую смену региональных настроек можно в системном логе. Для отображения последних срабатываний 802.11d идем в терминал и вводим команды:

– для Mac OS X 10.8 и старше:
cat /var/log/system.log | grep 802.11d -A1

– для Mac OS X 10.7:
cat /var/log/kernel.log | grep 802.11d -A1

В ответ получим большой список с историей смены регионального кода:
Feb 16 00:41:53 MacBook-Pro-Hades kernel[0]: en1: 802.11d country code set to 'X2'.
Feb 16 00:41:53 MacBook-Pro-Hades kernel[0]: en1: Supported channels 1 2 3 4 5 6 7 8 9 10 11 12 13 36 40 44 48 52 56 60 64 100 104 108 112 116 120 124 128 132 136 140 149 153 157 161 165
--
Feb 16 00:41:57 MacBook-Pro-Hades kernel[0]: en1: 802.11d country code set to 'US'.
Feb 16 00:41:57 MacBook-Pro-Hades kernel[0]: en1: Supported channels 1 2 3 4 5 6 7 8 9 10 11 36 40 44 48 52 56 60 64 100 104 108 112 116 120 124 128 132 136 140 149 153 157 161 165

В данном случае X2 – это базовый региональный код прошитый в картах Broadcom (во встроенной eeprom-памяти) для всех компьютерах Apple официально продаваемых в Европе.

Базовый региональный код задает частоты по умолчанию на которых нужно искать роутеры при первом сканировании. Для компьютеров Apple продаваемых в других регионах – базовый код будет иметь значение X0, X1 или X3.

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

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

Причем данная проблема наиболее сильно проявляет себя, когда на нужном нам роутере протокол 802.11d отключен, а вокруг вещает множество соседских роутеров, на которых 802.11d активирован и OS X приходится использовать региональные настройки с этих чужих роутеров.

Локализация проблемы

В моменты возникновения ситуации, когда компьютер от Apple не видит работающей сети в диапазоне 5 ГГц, нужно в терминале посмотреть на текущий режим работы адаптера:
system_profiler SPAirPortDataType
В ответе обращаем внимание на выделенные параметры:
Interfaces:
en1:
Card Type: AirPort Extreme (0x14E4, 0xD6)
Firmware Version: Broadcom BCM43xx 1.0 (5.106.98.100.22)
MAC Address: b8:8d:12:41:fd:b0
Locale: RoW
Country Code: US
Supported PHY Modes: 802.11 a/b/g/n
Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165

Для определения источника возникновения проблемы, с которого МакОС берет проблемную страну нужно запустить в терминале сканирование эфира по команде:

/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -s

SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
Olga 08:7a:4c:24:a9:44 -65 1 Y UA WPA(PSK/TKIP,AES/TKIP) WPA2(PSK/TKIP,AES/TKIP)
Chaka 30:85:a9:fb:44:98 -82 11 Y -- WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)
TP-LINK-302 64:70:02:6c:37:8a -54 7,+1 Y US WPA(PSK/AES/AES) WPA2(PSK/AES/AES)
Flint 64:66:b3:ec:bb:30 -81 4,+1 Y -- WPA(PSK/AES/AES) WPA2(PSK/AES/AES)
iWiFi 00:25:9c:bd:26:c2 -60 2 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP)

В данном отчете наглядно видно региональные настройки роутеров. Для этого смотрим столбец СС (Country Code):
– для роутеров с отключенным протоколом 802.11d мы увидим прочерки.
– для роутеров вещающих региональный код, будут видны две буквы.

Пути решения

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

/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -s

Если там в столбце СС для нашего роутера указана проблемная страна TW, CN, RU, UA, то нужно в настройках роутера поменять её на страну в которых меньше ограничений, например на US, UK, DE…

Если для нашего роутера стоят прочерки – то значит, что в роутере вообще отключено вещание региональных настроек по протоколу 802.11d, а это очень плохо для OS X, так как Мак будет хватать страну с первого попавшегося в эфире чужого роутера. При этом у соседей могут быть всевозможные региональные настройки, и МакОС постоянно будет настраиваться на различные каналы доспупны к использованию – что ведет как раз к ситуации, когда OS X периодически не видит сети 5ГГц.
Отсюда вытекает самое главное решение – протокол 802.11d должен быть обязательно включен в своем роутере, для избавления лишних проблем с OS X.

Также есть кардинальное решение данной проблемы – пропатчить драйвер Wi-Fi из состава OS X, выключив в нём работу протокола 802.11d. После этого OS X не будет обращать внимание на региональные настройки роутеров, и список доступных каналов и диапазонов будет неизменен.

Из практики

Ситуация с пропаданием сети 5 ГГц в большинстве своем проявляется в связке компьютера от Apple и роутеров от сторонних производителей.
Особенно часто проблемы представляют роутеры от TP-Link. Хотя в последнее время стал портиться ASUS: в современных роутерах от ASUS на чипсетах Broadcom (RT-N66U, RT-AC66U и т.д.) протокол 802.11d по умолчанию отключен, что как раз приводит в описанным в этой заметке проблемам…

Для активаци 802.11d на роутерах TP-Link, нужно в настройках параметров WIFI поменять страну. Почему-то на большинстве роутеров TP-Link по умолчанию, после включения роутера 802.11d отключен, и начинает вещать региональные настройки только после смены страны через GUI. И это делать нужно при каждой перезагрузке роутера – заново лезть в настройки роутера и менять страну…

Для активации 802.11d на роутерах от ASUS нужно использовать Telnet. К примеру рецепт для ASUS RT-N66U:
1. подключаемся по telnet
2. даём четыре команды
nvram set wl0_reg_mode=h
nvram set wl_reg_mode=h
nvram commit
reboot

У родных роутеров от Apple – проблем меньше, но тоже есть…
Протокол 802.11d, жизненно важный для правильной работы OS X, по умолчанию включен во всех роутерах от Apple и нигде в настройках не отключается – это хорошо.
Но к выбору страны нужно относиться внимательно:
Выбор страны Россия (RU) крайне не рекомендуется. Из-за этого будет пропадать режим N на OS X с Broadcom, или 5 ГГц на OS X c Atheros, как я говорил выше.
Поэтому в роутерах Apple для России нужно сменить страну на любую европейскую, например на Финляндию…