Macos WiFi: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 1: Строка 1:
[[Категория:Mac OS]]
+
[[Категория:MAC OS]]
 
=Mac OS и проблема с WiFi=
 
=Mac OS и проблема с WiFi=
 
Этат статья - 90% копипаста + мои размышления по ходу
 
Этат статья - 90% копипаста + мои размышления по ходу

Версия 10:19, 24 октября 2013

Mac OS и проблема с WiFi

Этат статья - 90% копипаста + мои размышления по ходу

Немного теории

Часто пользователи Mac OS X сталкиваются с проблемой, когда компьютеры от Apple не видят сетей Wi-Fi работающих в диапазоне 5 ГГц или такие сети периодически отваливаются. Основная проблема в данном случае возникает из-за того, что Mac OS X любит ограничивать использование каналов и диапазонов из-за различных региональных требований.
Возникновение проблемы рассмотрим на примере компьютера от Apple, официально поставляемого в Россию, с установленной внутри картой от Broadcom.
Для снятия данных о текущем режиме работы адаптера Wi-Fi, и параметрах работы с роутером, нужно заглянуть в приложение "Сведения о системе", в раздел Wi-Fi. Так же есть способ посмотреть то-же самое в терминале, все цитаты ниже в этой заметке получены как раз из терминала по команде:

system_profiler SPAirPortDataType

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

en1:
Card Type: AirPort Extreme (0x14E4, 0xХХ)
Firmware Version: Broadcom BCM43xx 1.0 (5.10.131.36.15)
Locale: RoW
Country Code: X2
Supported PHY Modes: 802.11 a/b/g/n
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

У меня было вот так:

#system_profiler SPAirPortDataType
Wi-Fi:

      Software Versions:
          CoreWLAN: 3.0.2 (302.12)
          CoreWLANKit: 2.0.2 (202.10)
          Menu Extra: 8.0.2 (802.7)
          configd plug-in: 8.3.2 (832.18.1)
          System Information: 8.0 (800.1)
          IO80211 Family: 5.2.2 (522.4)
          WiFi Diagnostics: 1.1 (110.26)
          AirPort Utility: 6.2 (620.33)
      Interfaces:
        en1:
          Card Type: AirPort Extreme  (0x14E4, 0x8D)
          Firmware Version: Broadcom BCM43xx 1.0 (5.106.98.100.16)
          MAC Address: 00:26:bb:01:93:f7
          Locale: FCC
          Country Code: GB
          Supported PHY Modes: 802.11 a/b/g/n
          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
          Wake On Wireless: Supported
          AirDrop: Supported
          Status: Connected
          Current Network Information:
            Mirantis WiFi:
              PHY Mode: 802.11n
              BSSID: de:9f:db:1b:bf:a7
              Channel: 132
              Country Code: GB
              Network Type: Infrastructure
              Security: WPA2 Enterprise
              Signal / Noise: -57 dBm / -92 dBm
              Transmit Rate: 117
              MCS Index: 14


В данном примере видно, что адаптер у нас от Broadcom, и виден текущий режим работы адаптера 802.11 a/b/g/n и поддерживаемые каналы. Также указана страна - X2. В данном случае X2 - это базовый региональный код прошитый в картах Broadcom (во встроенной eeprom-памяти) для всех компьютерах Apple официально продаваемых в Европе (Россия в том числе). Базовый региональный код задает частоты по умолчанию на которых нужно искать роутеры при первом сканировании. Для компьютеров Apple продаваемых в других регионах - базовый код будет иметь значение X0, X1 или X3.
При первом сканировании MacOS начинает проверять эфир с диапазона 2.4ГГц и составлять для себя список имеющихся в эфире роутеров, чтобы потом подключиться к роутеру с наибольшим приоритетом выставленным в сетевых настройках в MacOS. Параллельно MacOS также пытается определить регион в котором находится компьютер, чтобы настроить региональные ограничения - делает MacOS это по протоколу 802.11d, слушая какие региональные коды выставлены в роутерах.
В случае с картами Broadcom, первую смену страны Мак старается взять с предпочтительной сети, если она видна в эфире. Если предпочтительной в эфире нет, или на ней отключено 802.11d - то код страны берется с любого соседнего роутера. Но иногда этот алгоритм сбоит, и мак цепляет код страны с чужого роутера. Особенно часто беда происходит после пробуждения из сна. Также при каждом ручном подключении к другому роутеру, драйвер для карт Broadcom обновит региональный код и соответственно список каналов, на значения из роутера к которому подключается, естественно если там вещается по 802.11d другая страна, от той, на которую мак уже настроился ранее...
Для карт Atheros под Мак алгоритм другой - драйвер не ориентируется на список предпочтительных сетей, и страна по протоколу 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 

В ответ получим большой список с историей смены регионального кода:

...
en1: 802.11d country code set to 'CN'.
en1: Supported channels 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 149, 153, 157, 161, 165
...
en1: 802.11d country code set to 'TW'.
en1: Supported channels 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165
...

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

system_profiler SPAirPortDataType
en1:
Card Type: AirPort Extreme (0x14E4, 0xХХ)
Firmware Version: Broadcom BCM43xx 1.0 (5.10.131.36.15)
Locale: RoW
Country Code: TW
Supported PHY Modes: 802.11 a/b/g/n
Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165


В данном случае вместо базового кода X2 стал отображаться региональный код TW и поменялись доступные к использованию каналы.
Дальнейший поиск сетей происходит уже по обновленному списку доступных каналов, и очень часто из-за этого возникают ситуации, когда MacOS перестает видеть роутеры работающие на частотах которые отсутствуют в обновленном списке каналов, особенно работающие в диапазоне 5ГГц.
Причем данная проблема наиболее сильно проявляет себя, когда на нужном нам роутере протокол 802.11d отключен, а вокруг вещает множество соседских роутеров, на которых 802.11d активирован и MacOS приходится использовать региональные настройки с этих чужих роутеров.

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

В моменты возникновения ситуации, когда компьютер от Apple не видит работающей сети в диапазоне 5 ГГц, нужно в терминале посмотреть на текущий режим работы адаптера:

system_profiler SPAirPortDataType

В ответе обращаем внимание на выделенные параметры:

Card Type: AirPort Extreme  (0x14E4, 0x8E)
Firmware Version: Broadcom BCM43xx 1.0 (5.106.198.19.22)
Locale: RoW
Country Code: TW
Supported PHY Modes: 802.11 a/b/g/n
Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165

В данном примере показана ситуация, когда Мак обнаружил страну TW (Тайвань), и скорректировал список каналов для соответствия региональным требованиям. Данная страна TW приносит много хлопот пользователям MacOS, так-как запрещает работать в диапазоне 5 ГГц на каналах 36, 40, 44, 48 и 52, из-за того,что они запрещены для использования в Тайване. И если наш роутер работает на одном из этих каналов, то MacOS увидеть его никак не сможет.

Очень похоже на Тайвань действует и обнаружение маком страны Китай (CN):

Card Type: AirPort Extreme (0x14E4, 0x8E)
Firmware Version: Broadcom BCM43xx 1.0 (5.106.98.100.16)
Locale: RoW
Country Code: CN
Supported PHY Modes: 802.11 a/b/g/n
Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 149, 153, 157, 161, 165

Данная страна CN ещё больше ограничивает каналы в диапазоне 5 ГГц. Для использования разрешено лишь пять каналов 149, 153, 157, 161 и 165.
Также вредной для МакОС является установка на роутере страны RU (Россия):

Card Type: AirPort Extreme  (0x14E4, 0x8E)
Firmware Version: Broadcom BCM43xx 1.0 (5.106.198.19.22)
Locale: RoW
Country Code: RU
Supported PHY Modes: 802.11 a/b/g
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

В данной ситуации, драйвер для карт Broadcom при обнаружении страны RU - отключает режим N. То есть в диапазоне 2.4 ГГц можно использовать только режимы 802.11b/g, а в диапазоне 5 ГГц можно использовать только режим 802.11a. Соответственно если на роутере для диапазона 5 ГГц стоит режим n-only - то мак подключиться к ней не сможет. Чтобы хоть как-то роутер смог подключиться к сети работающей на 5 ГГц, в роутере в настройках сети 5 ГГц должен стоять режим 802.11a/n - в этом случае Мак с картой от Broadcom подключится в а-режиме, но будет работать на максимальной для этого режима скорости 54 Мбит/с...

Драйвер для карт Atheros при обнаружении страны RU действует по другому:

en1:
Card Type: AirPort Extreme (0x168C, 0x17AA)
Firmware Version: Atheros 9280: 4.0.67.5-P2P
Locale: RoW
Country Code: RU
Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

В данной ситуации вместо отключения режима N, происходит отключение диапазона 5 ГГц, то есть в диапазоне 2.4 ГГц - можно использовать все режимы 802.11b/g/n, а в диапзоне 5ГГц - вообще нельзя использовать ни 802.11a, ни 802.11n. Иначе говоря, Мак в такой ситуации сетей работающих в 5 ГГц вообще видеть не будет.
Аналогичное поведение происходит и со страной UA:

  • драйвер для карт Broadcom при обнаружении страны UA отключает режим N в обоих диапазонах.
  • драйвер для карт Atheros при обнаружении страны UA отключает диапазон 5 ГГц.


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

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

В ответ мы получим список роутеров которые видит наш Мак:

SSID           BSSID                    RSSI    CH   HT   CC   SECURITY (auth/unicast/group)
dlink178      1c:7e:e5:d0:df:хх   -65   1,+1  Y     RU   WPA(PSK/TKIP,AES/TKIP)
hh245          cc:5d:4e:fb:8f:хх    -67   1       Y     TW   WPA2(PSK/AES/AES) 
Dread          00:22:90:90:07:хх -69   11      N     --      WPA(PSK/TKIP/TKIP) 
MajorWiFi   50:46:5d:cc:c2:хх  -41   6       Y     --      WPA2(PSK/AES/AES) 
sohc             f0:7d:68:9b:da:хх  -75   6       N     --      WPA(PSK/TKIP/TKIP)

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

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

Также полезно поизучать лог последних срабатываний 802.11d. Для этого вводим в терминал команду для 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 

Пути решения


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

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


Если там в столбце СС для нашего роутера указана проблемная страна TW, CN, RU, UA, то нужно в настройках роутера поменять её на страну в которых меньше ограничений, например на US, UK, DE...
Если для нашего роутера стоят прочерки - то значит, что в роутере вообще отключено вещание региональных настроек по протоколу 802.11d, а это очень плохо для MacOS, так как Мак будет хватать страну с первого попавшегося в эфире чужого роутера. При этом у соседей могут быть всевозможные региональные настройки, и МакОС постоянно будет настраиваться на различные каналы доспупны к использованию - что ведет как раз к ситуации, когда Мак периодически не видит сети 5ГГц.
Отсюда вытекает самое главное решение - протокол 802.11d должен быть обязательно включен в своем роутере, для избавления лишних проблем с MacOS. Также желательно перевести сеть 2,4 ГГц вещающую в своем роутере на канал номер 1, чтобы при первоначальном поиске наш роутер попался раньше соседей, и региональный код МакОС взяла с нашего роутера, а не схватила с первого попавшегося соседа...

Также есть кардинальное решение данной проблемы - пропатчить драйвер Wi-Fi из состава MacOS, выключив в нём работу протокола 802.11d. После этого МакОС не будет обращать внимание на региональные настройки роутеров, и список доступных каналов и диапазонов будет неизменен. Подробности в заметке - отключение 802.11d в Mac 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, жизненно важный для правильной работы MacOS, по умолчанию включен во всех роутерах от Apple и нигде в настройках не отключается - это хорошо.
Но к выбору страны нужно относиться внимательно:
В роутерах Apple официально поставляемым в Россию - есть для использования выбор страны Россия (RU), но использовать её крайне не рекомендуется. Из-за этого будет пропадать режим N на Маках с Broadcom, или 5 ГГц на Маках c Atheros, как я говорил выше.
Поэтому в роутерах Apple для России нужно сменить страну на любую европейскую, например на Финляндию...


Отключение 802.11d

Немного теории.


Протокол 802.11d предназначен для адаптации различных Wi-Fi-устройств к специфическим условиям различных стран. Используя протокол 802.11d, MacOS ограничивает использование некоторых каналов и диапазонов запрещенных в отдельных странах.
Необходимость отключения 802.11d может возникнуть из-за проблем с работой WiFi в диапазоне 5 ГГц под Mac OS X...
Для отключения 802.11d необходим бинарный патч драйвера WiFi.
В составе MacOS несколько драйверов для различных адаптеров WiFi от Broadcom и Atheros. Из-за этого патчить нужно текущий используемый драйвер.
Для определения текущего драйвера нужно выполнить в терминале команду:

sudo kextstat | grep AirPort

В ответе будет указан используемый драйвер:

skvo$ kextstat | grep AirPort
56 0 0x11c2000 0x228000 0x227000 com.apple.driver.AirPort.Brcm4331 (561.7.22) <55 44 14 7 5 4 3 1>

У меня

46 0 0xffffff7f81730000 0x1f9000   0x1f9000   com.apple.driver.AirPort.Brcm4331 (614.20.16) <45 37 10 7 5 4 3 1>

Т.е. похоже такой же
В данном случае используется драйвер AirPort.Brcm4331.
Также в ответе можно увидеть AirPort.Brcm43224, AirPort.Atheros21, AirPort.Atheros40.
В зависимости от ответа - выбираем необходимый патч ниже.

Отключение 802.11d в драйвере AirPort.Brcm4331


Для отключения 802.11d нужно выполнить две команды в терминале:

первая команда на бинарный патч драйвера AirPortBrcm4331:

sudo perl -pi -e 's|\x81\x78\x30\x6B\x10\x00\x00\x0F\x85|\x81\x78\x30\x6B\x10\x00\x00\x90\xE9|' /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortBrcm4331.kext/Contents/MacOS/AirPortBrcm4331

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

sudo touch /System/Library/Extensions/


После этих команд нужно подождать минуту пока создаются новые системные кэши, и перезагрузить свой компьютер.
После перезагрузки в "Сведениях о системе" в разделе WiFi вы должны видеть прошитый в картах Broadcom исходный региональный код X0, X1, X2, X3. Для примера на Маках продаваемых официально в России - будет X2. Никакие региональные настройки роутеров сбивать этот код не будут. Режимы работы и список каналов будет всегда постоянен:

Interfaces:
en1:
Card Type: AirPort Extreme (0x14E4, 0xХХ)
Firmware Version: Broadcom BCM43xx 1.0 (5.10.131.36.15)
Locale: RoW
Country Code: X2
Supported PHY Modes: 802.11 a/b/g/n
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

Данный патч прошел проверку и работоспособен в системах Mac OS X 10.7.5 и OS X 10.8.4. Также обязан сработать на любой системе 10.7.х и 10.8.х.

Отключение 802.11d в драйвере AirPort.Brcm43224


Для отключения 802.11d нужно выполнить две команды в терминале:
первая команда на бинарный патч драйвера AirPortBrcm43224:

sudo perl -pi -e 's|\x81\x78\x28\x6B\x10\x00\x00\x0F\x85|\x81\x78\x28\x6B\x10\x00\x00\x90\xE9|' /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AppleAirPortBrcm43224.kext/Contents/MacOS/AppleAirPortBrcm43224

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

sudo touch /System/Library/Extensions/

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

Данный патч прошел проверку и работоспособен в системах Mac OS X 10.7.5 и OS X 10.8.4.
Также обязан сработать на любой системе 10.7.х и 10.8.х.

Отключение 802.11d в драйвере AirPort.Atheros40


Вначале патч для текущей системы OS X 10.8.4! Также он без проблем сработает и на любых 10.8.x.
Для отключения 802.11d нужно выполнить две команды в терминале:
первая команда на бинарный патч драйвера AirPort.Atheros40:

sudo perl -pi -e 's|\x75\x3A\x48\x85\xF6\x75\x0D\x31\xC0\xF6\x43\x59\x80\x75\x2D|\x90\x90\x48\x85\xF6\x90\x90\x31\xC0\xF6\x43\x59\x80\x90\x90|' /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros40.kext/Contents/MacOS/AirPortAtheros40

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

sudo touch /System/Library/Extensions/

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

После перезагрузки в "Сведениях о системе" в разделе WiFi вы должны видеть пустое поле с названием страны. Базовый список каналов зависит от регионального кода (regdomain) прошитого в картах Atheros. Никакие региональные настройки роутеров сбивать этот базовый список не будут. Для примера отчет с iMac официально продаваемого в России:

Interfaces:
en0:
Card Type: AirPort Extreme  (0x168C, 0x17AA)
Firmware Version: Atheros 9280: 4.0.72.0-P2P
Locale: RoW
Country Code: 
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
 При этом вокруг два роутера с включенным 802.11d, и к одному из них мы подключены:
SSID         BSSID                    RSSI   CH    HT     CC    SECURITY (auth/unicast/group)
Panda      a0:f3:c1:89:9f:xx     -58     6       Y       RU    WPA2(PSK/AES/AES) 
TerLink    00:26:18:c8:3a:xx   -57     11      Y       US    WPA2(PSK/AES/AES)

Теперь про патч для системы Mac OS X 10.7.5. Он идет в двух вариантах, в зависимости от разрядности вашей системы (32 или 64 бит).
Для определения разрядности системы в терминале запускаем uname -a, и смотрим последний параметр на разрядность ядра.

Для систем i386 (32-бит) патч для AirPort.Atheros40 под Mac OS X 10.7.5:

sudo perl -pi -e 's|\x75\x33\x85\xC9\x75\x0B\xF6\x46\x3D\x80\x75\x29|\x90\x90\x85\xC9\x90\x90\xF6\x46\x3D\x80\x90\x90|' /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros40.kext/Contents/MacOS/AirPortAtheros40

Для систем x86_64 (64-бит) патч для AirPort.Atheros40 под OS X 10.7.5:

sudo perl -pi -e 's|\x75\x34\x48\x85\xF6\x75\x0B\xF6\x43\x59\x80\x75\x29|\x90\x90\x48\x85\xF6\x90\x90\xF6\x43\x59\x80\x90\x90|' /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros40.kext/Contents/MacOS/AirPortAtheros40

вторая команда одинакова для обоих версий:

sudo touch /System/Library/Extensions/

Примечание

При обновлении системы Combo или Delta обновленим - данный патч слетит, так как обновление системы обновляет драйвера WiFi.

Поэтому, если патч применялся на системе OS X 10.8.2, то нужно повторно его выполнить после обновления системы на версию OS X 10.8.3...