HoRNDIS: драйвер USB-модема для Mac OS X

Перевод статьи HoRNDIS: USB tethering driver for Mac OS X, автор - Joshua Wise

HoRNDIS (произносится: «хоррендус») - это драйвер для Mac OS X, который позволяет вам использовать usb тетеринг на Android-устройстве для получения доступа в Интернет. Он работает с Mac OS X версии 10.6.8 (Snow Leopard) - 10.12 и протестирован на большом количестве телефонов. Вы должны быть осторожны со всеми драйверами, которые устанавливаете на компьютер; тем не менее, HoRNDIS тщательно протестирован. Поэтому вы можете полноценно работать с ним на персональных компьютерах.

HoRNDIS реализуется как kext, а не как программа пользовательского пространства, которая открывает устройство TAP или TUN; Это означает, что HoRNDIS не конфликтует с другими kext-файлами TAP / TUN, которые вы, возможно, установили (например, OpenVPN, Tunnelblick или Cisco VPN). Драйвер реализует проприетарный протокол Microsoft RNDIS, который является единственным протоколом, поддерживаемым встроенными устройствами Android; хотя пользователи Linux и Windows уже несколько лет пользуются родными драйверами RNDIS, Mac OS X поддерживает только устройства CDC Ethernet)

Главным преимуществом HoRNDIS над другими модемами является то, что он использует первоклассную поддерживаемую функцию в прошивке телефона. Другие решения принимают либо стек Wi-Fi телефона без знания операционной системы Android, либо создают IP-стек эмуляции в пользовательском пространстве на телефоне; Во многих случаях встроенная поддержка USB-модема может быть более стабильной, надежной и быстрой.

Загрузка и установка HoRNDIS

HoRNDIS доступен в исходном коде со страницы проекта на GitHub и в двоичной форме на этом сайте. Для быстрого запуска:

  1. Загрузите последний бинарный пакет и откройте его в папке «Загрузки». Следуйте инструкциям в программе установки.
  2. Если установка будет продолжена без ошибок, по ее завершению подключите свой телефон к Mac по USB.
  3. Войдите в меню настроек на телефоне.
  4. В разделе соединений ниже Wi-Fi и Bluetooth выберите «Ещё ...».
  5. Выберите «Тетеринг и точки доступа.
  6. Установите флажок «USB-модем». Он должен мигать один раз, а затем полностью проверяться. В некоторых версиях OS X может появиться диалоговое окно с предложением настроить устройство; Следуйте его инструкциям. Чтобы убедиться, что устройство подключено, запустите программу «Системные настройки» и выберите «Сеть»; Вы должны увидеть свой телефон в поле слева. Если повезет, вы сможете отключить Wi-Fi на своем Mac и просматривать Интернет через сетевое подключение вашего телефона.

Примечание для 32-разрядных машин

В предыдущих версиях HoRNDIS требовалось 64-битное ядро. Если при установке HoRNDIS вы получите сообщение об ошибке поддержки 64-битной версии, попробуйте еще раз с пакетом версии 3 (или новее).

Примечания к различным версиям Mac OS X

Mac OS X 10.9 (Mavericks) и 10.10 (Yosemite) поддерживаются HoRNDIS, но есть некоторые ошибки. Если вы обновили более раннюю версию OS X, то обнаружите, что телефоны реплицируются в вашей панели управления сетью.

Один из способов обхода - очистка файлов конфигурации сети. Сделайте резервную копию  /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist и /Library/Preferences/SystemConfiguration/preferences.plist, а затем переместите или удалите их. (Обратите внимание, что это приведет к удалению пользовательской конфигурации сети). Я до сих пор не знаю, что вызывает эту проблему, и поэтому у меня нет более "красивого" обходного пути.

В версии Mac OS X 10.11 (и выше) перезаписан USB-стек, в нем больше проблем с совместимостью, чем 10.10 и ниже. К сожалению, Apple не опубликовала документацию для интерфейсов USB нового типа, представленных в 10.11, поэтому HoRNDIS использует только USB-интерфейсы, доступные в Mac OS 10.10 и ниже. Таким образом, в новейших  версиях OS X могут возникнуть трудности с подключением определенных устройств.

Удаление HoRNDIS

Если по какой-то причине вам нужно удалить HoRNDIS, вы можете просто перетащить расширение в корзину. В Finder перейдите в меню «Перейти» и выберите «Перейти в папку ...»; В этом случае введите /System/Library/Extensions. Найдите «HoRNDIS.kext» и перетащите его в Корзину. При появлении запроса введите пароль. Сделайте то же самое для «HoRNDIS.kext», который также находится в /Library/Extensions. Затем перезагрузите Mac, чтобы убедиться, что он выгружен.

Получение и создание источника

Источник доступен на GitHub; Он лицензируется в соответствии с GNU General Purpose License, версия 3. Для сборки исходного кода вам понадобится Xcode 4.0+; Для создания версии, которая будет работать под управлением Snow Leopard, вам также понадобится установленный Snow Leopard SDK. К сожалению, SDK Snow Leopard трудно найти; Вам нужно будет найти его где-нибудь в Интернете и вручную установить в папку Xcode SDK. (Для большинства приложений все в порядке, чтобы создать новый SDK, а для модуля ядра волшебные трюки с виртуальными виртуальными таблицами требуют компиляции против самого низкого общего знаменателя.)

Простого запуска xcodebuild в каталоге checkout должно быть достаточно для сборки kext. Если вы хотите упаковать пакет, вы можете запустить make, чтобы собрать пакет в каталоге build/ (хотя, пожалуйста, не публикуйте выпущенные версии, как если бы они были официальными!).

Благодарности

На плечах гигантов я стою. Мое спасибо Apple за то, что у меня есть хотя бы некоторый образец кода IOKit (хотя последний раз, когда он был успешно построен, был 10.2.x); Это было достойное начало, чтобы понять, как я могу это структурировать. Существенное спасибо David Brownell, который написал драйвер rndishost для Linux; Некоторые части HoRNDIS были перенесены из этой работы. Дэвид Браундел также написал драйвер frndis, который позволяет устройствам Android / Linux вести себя как устройства RNDIS; Чтение этого источника помогло понять, почему HoRNDIS не работал на ранних стадиях. (К сожалению, Дэвид Браунелл скончался в апреле 2011 года. Спасибо за всю вашу напряженную работу, Дэвид, дайте вам покой.)

Спасибо также тем, кто помог протестировать HoRNDIS до того, как я ее выпустил, а также всех других людей со времен проекта unrEVOked, без которых я, скорее всего, не был бы вовлечен в разработку Android.

Поддержка и контакты

После трехлетнего срока пребывания в должности, я ищу нового помощника для HoRNDIS. У меня больше нет времени, чтобы содержать HoRNDIS на должном уровне. Если вы считаете, что у вас есть навыки, необходимые для сопровождения этого программного обеспечения, сообщите мне об этом.

Будучи свободным программным обеспечением, HoRNDIS поставляется без гарантии. (Более подробно об этом читайте в лицензии). Тем не менее, я надеюсь, что это вам поможет; Если это не так, и вы можете помочь в отладке, я бы хотел услышать от вас.

Для обратной связи, пожалуйста, свяжитесь со мной!