Создаем точку доступа Wi-Fi под Linux из USB модема
Все началось, когда я заменил материнскую плату в своем домашнем компьютере. В старой плате был встроенный USB Wi-Fi адаптер на обычном Realtek 8187, который два года исправно работал точкой доступа под Windows. В новой плате Wi-Fi модуля не было, зато у меня появился целый сервер на замечательном Intel Atom 525 с одним маленьким недостатком — в нем было очень мало PCI слотов.
Немного поразмышляв, я решил сделать невинную, как мне сначала казалось вещь — запустить программную Wi-Fi точку доступа на обычном USB адаптере. Если бы меня предупредили что меня ожидает, я бы отказался от идеи с самого начала! Я раздобыл недорогой адаптер и, только в процессе возни с ним, стал осознавать что использование «неправильного» USB на «неправильном» чипсете это настоящее насилие для Linux! Гуру Линукса отказывались от помощи!
Тем не менее, мне удалось подружить Debian 6.0 с чипсетами Ralink 2870/3070 и Atheros 9170, и я готов раскрыть эту страшную тайну всему миру!
Предисловие
В последние годы Wi-Fi система в ядре Linux подверглась серьезной доработке. Идея была очень простой — разбить подсистему на модули, вынести повторяющиеся процедуры MAC уровня в отдельные модули ядра и отдельные демоны и переписать заново драйвера физических устройств. Так появилась пачка компонентов, про которые можно почитать на сайте разработчиков: wireless.kernel.org/en/users/Documentation
Как это часто бывает, красивые теории подверглись воздействию суровой прозе жизни. В нашем случае это выглядит так: для каждого чипсета Ralink 2870/3070 и Atheros 9170 в ядро включены две версии драйверов — «old school», которые работают из коробки, но не могут быть запущена в режиме Master (режим для запуска Access Point) и новые «net-link style» которые все умеют но не работают из коробки. По-умолчанию взаимоисключающие драйвера пытаются запуститься одновременно с печальным результатом. Но довольно сетований, скорее за дело!
Запускаем драйвера. Wi-Fi, просто Wi-Fi
Если вы обычный пользователь, и хотите просто подключаться к имеющимся Wi-Fi сетям, то на Debian 6 (и других подобных убунтариях) вам нужно сделать следующее:
Для чипсета RT2870/3070 на коем собраны популярные Dlink DWA-140, TL-WN727N рекомендую оставить драйвер старого стиля rt2870sta, к которым не забываем скачать firmware.
apt-get install firmware-ralink wireless-tools
Далее идем в /etc/modprobe.d/blacklist.conf и блокируем запуск драйверов нового стиля:
После чего можно подключить USB свисток и внимательно посмотреть dmesg. Если в нем будут писать про конфликты драйверов, то вы ошиблись или не запретили все конфликтующие драйвера. Если будет написано про отсутствие firmware, значит у вас отсутствует firmware (чертовски неожиданно?). Наберите ls -l /lib/firmare должно быть что то типа такого:
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2561.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2561s.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2661.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2860.bin
-rw-r—r— 1 root root 8192 Мар 19 11:46 rt2870.bin
-rw-r—r— 1 root root 4096 Янв 4 05:40 rt2870.bin.old
-rw-r—r— 1 root root 8192 Дек 28 2009 rt2870.bin.ralink
-rw-r—r— 1 root root 4096 Мар 6 22:34 rt3070.bin
-rw-r—r— 1 root root 4096 Мар 6 22:34 rt3071.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt3090.bin
-rw-r—r— 1 root root 2048 Мар 6 22:34 rt73.bin
Пытливый читатель наверно заметил подвох, мы еще вспомним о нем.
Для Ar9170 аналогичная процедура. На нем собраны Dlink DWA-130, 160 а так же очень популярный в узких кругах TL-WN821N v2. В мои же руки попал Netgear WNA1000.
apt-get install firmware-atheros wireless-tools
Блеклистим carl9170 и вперед!
Потом идем в /etc/network/interfaces и пишем там нечто вроде:
Запускаем ifup wlan0 . Далее какой нибудь графической утилитой можно подключиться к сети. Для окончательной настройки подойдет, например, «Network manager»
Если у тебя, уважаемый хабраюзер уже замигал Wi-Fi и больше ничего не требуется, то смело закрывай тему.
Запускаем драйвера. Сильные духом
Итак, настойчивый хабраюзер, несмотря на скепсис признанных гуру, мы все еще хотим запустить USB Wi-Fi в режиме точки доступа.
Для начала два простых совета по выбору адаптера:
- Все что угодно, только не Realtek!
- Остальные чипсеты/драйвера смотрим в справочнике: wireless.kernel.org/en/users/Devices/USB
Теперь вычеркнем все рекомендации из раздела «просто Wi-Fi»! 90% блогов в интернете забиты этой ерундой. Мы будем отключать драйвера старого стиля и запускать новые, которые ни черта не работают из коробки даже в новейших версиях ядер, а значит пришло время компиляции. Пока ты читаешь эту хабрастатью, разработчики наверняка исправили 1-2 бага в драйверах и добавили новый, а значит качаем самую свежую версию compat-wireless: www.orbit-lab.org/kernel/compat-wireless-2.6
Она совместима с драйверами начиная от 2.6.14
Далее следуем инструкциям: wireless.kernel.org/en/users/Download/stable
Компилируется все очень долго игнорируя флаг включения многопоточности:
declare -x CONCURRENCY_LEVEL=»4″
После компиляции и инсталляции не забываем отключить старый стиль в /etc/modprobe.d/blacklist.conf
И конечно не забываем выгрузить ранее загруженные драйвера:
Драйвера нового стиля корректно выгружать так (пригодится при отладке):
Страшная тайна firmware!
Кажется все. Запускаем modprobe … и полное разочарование! В логах опять ругается на firmware. Дело в том что новые драйвера имеют и фирмваре другое. Для Ralinka идем сюда: www.ralinktech.com/support.php?s=2 и скачиваем нечто вида RT2870_Firmware_V22.
Распаковываем и пишем в /lib/firmware, удивляясь как это файл с одинаковым именем может отличаться ровно в два раза по размеру! Внимательный читатель уже отметил этот факт раньше. Дело в том, что несколько месяцев назад разработчики объединили драйвера для чипсетов rt2870 и rt3070 в один. Не мудрствуя лукаво назвали драйвера и фирмваре по имени 2870. Вы видели на странице Ралинка фирмваре 3070? И я не видел, а оно там есть! Адаптер DWA-140 сделан на чипсете 3070 и распознается драйверами rt2800usb.
С Атеросом немного проще, идем на страницу разработчиков и скачиваем свежую версию: wireless.kernel.org/en/users/Drivers/carl9170#Firmware
Чтобы точно разобраться с фирмваре, смотрим что хочет модуль драйвера, например:
modinfo carl9170 | grep firm
А потом проверяем что необходимое фирмваре есть:
ls /lib/firmware/
Далее уже привычные манипуляции с rmmod, modprobe и lsmod и ура! Мы подняли правильные драйвера, а значит пришло время набрать заветную команду
iwconfig wlan0 mode Master
Бах! Ошибка! SET failed on device wlan0 ; Invalid argument. Неужели все было проделано зря? Конечно нет. Просто у новой подсистемы свой путь, и как это часто бывает с новым и хорошим, он категорически отрицает старое и хорошее. На форумах этот вопрос обсуждают примерно так:
— Why?
— RTFM!
— Cам ты RTFW! Небо, небо не видело такого кю!
Мануал сообщает нам что отныне все настройки для точки доступа делаются через программу hostapd: wireless.kernel.org/en/users/Documentation/hostapd
Подключаем репозиторий sid в Дебиан (во всех остальных безнадежно старые версии) и ставим новые утилиты работы с радио fw и демон hostapd
apt-getinstall iw hostapd
После чего пишем iw list и видим заветные Supported interface modes: AP, а заодно и список частот.
Танцы с бубном. Hostapd
Перед началом настройки конфига нужно знать три важные вещи.
1. Внутри этого демона сидит маленький и вредный поганец, который непредсказуемым образом меняет состояние интерфейса в процессе запуска/перезапуска. Иногда wlan0 исчезает, иногда у него исчезает IP, иногда помогает ifdown ifup, иногда не помогает. Ralink в таких условиях совсем плох, Атерос чуть стабильнее. Поэтому перед любом запуске hostapd проверяем, что радиоинтерфейс поднят, и IP адрес на нем жив. Если не удается поднять интерфейс значит применяем насилие — ребутим Линукс! (Да да это не шутка!)
2. Все настройки сначала проверяем без шифрования! И не забываем проверять dhcpd, который тоже любит умирать при перезагрузке интерфейсов. Вот почему Linux + USB = ненависть! Лучше настройку hostapd проводить без dhcp, с фиксированным IP адресе на клиенте, и лишь в конце перейти к настройке dhcpd.
3. Для проверки всегда сначала запускаем hostapd -d /etc/hostapd/hostapd.conf c диагностикой в консоль.
Теперь конфиг hostapd с пояснением. ( Update: поправлены комментарии, # не работает в конце строки)
После запуска прежде всего набираем ifconfig и видим что появился специальный интерфейс
mon.wlan0 Link encap:UNSPEC HWaddr 30-46-9A-00-6D-04-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:42603 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3887500 (3.7 MiB) TX bytes:0 (0.0 B)
Теперь в консоли (если запускали hostapd -d) смотрим что происходит в процессе аутентификации. Если настроен WPA и соединиение не проходит дальше фазы 2/4 значит ошибочно набран пароль. Там еще можно увидеть множество непонятных сообщений.
Лирическое отступление
Так получилось, что ковырясь с hostapd я потерял всякую надежду запустить свой Dlink DWA-140 на чипсете Ralink 3070. Мне совершенно точно удалось запустить его в работу без шифрования, но при включении шифрования или я допускал ошибку, или действительно этот модуль плохо взаимодействует с ядерными модулями шифрования ( на форумах я видел описание проблемы и одна из версий решения указывала на модули шифрования ecb и arc4).
Финальный аккорд с включением шифрования я уже реализовал на Netgear WNA1000 на чипсете Atheros 9170, который действительно лучше работает и корректно подгружает все модули шифрования.
Теперь я думаю что можно таки было запустить Ralink с шифрованием и призываю поставить жирную точку в том вопросе счастливых обладателей DWA-140. Пишите о своих успехах или проблемах в комментариях, попробуем разобраться вместе.
Вместо послесловия
Теперь у нас в кладовке или на шкафу тихо жужжит маленький сервер с USB Wi-Fi адаптером, можно насладиться проделанной работой. Но не тут то было! В современной многоэтажке нашпигованной точками доступа со всех сторон идут помехи. Чтобы выбрать канал я советую изучить эфир программой InSSIDer
Вот так выглядел выбор канала у меня вечерком у окошка:
Источник
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
- Главная
- Установка Wi-Fi адаптера в Ubuntu.
Установка Wi-Fi адаптера в Ubuntu.
С поддержкой W-Fi адаптеров в Ubuntu наблюдаются определенные проблемы. Хорошо если можно выбрать заведомо совместимую модель при покупке, но чаще приходится использовать то оборудование, которое есть. В этом случае придется устанавливать адаптер самостоятельно. Сегодня мы рассмотрим как раз такой случай.
Забегая вперед, скажем, что ничего сложного в подключении неподдерживаемых Wi-Fi адаптеров нет. Несмотря на то, что ряд производимых нами действий можно выполнить при помощи графического интерфейса, мы будем работать исключительно в консоли, что позволит использовать рекомендации данной статьи как для настольных, так и для серверных версий Ubuntu.
Для примера рассмотрим подключение в Ubuntu 12.04 LTS недорогого USB-адаптера TP-Link TL-WN725N.
Как это обычно бывает, вы купили Wi-Fi адаптер, распаковали, подключили. И никаких признаков жизни. Становится очевидно, что данная модель не поддерживается используемым дистрибутивом. Что делать?
Прежде всего убедимся, что система видит само USB-устройство. Для этого выполним команду
В выводе вы должны увидеть строку, соответсвующую подключенному устройству, скорее всего она будет содержать информацию о чипе, на котором собран адаптер. В нашем случае это Realtek. Если вы не уверены, что адаптер присутсвует в списке, выполните команду два раза, с подключенным и отключенным устройством.
Следующим шагом вам нужно выяснить модель чипа, на котором собран адаптер. Для этого уточните его полную маркировку и аппаратную версию, так как под одним и тем же наименованием могут выпускаться устройства на разных чипах. Вся необходимая информация указана на этикетке, также она может быть продублирована на самом устройстве.
Как видим перед нами устройство с аппаратной версией Ver:2.0, располагая этой информацией несложно выяснить что в основу адаптера положен чип Realtek RTL8188EUS. Мы советуем воспользоваться ресурсом wikidevi.com (по ссылке настроеный пример семантического поиска по бренду TP-Link), перейдя на страницу адаптера мы не только узнаем его чип, но и получим ссылку на Linux драйвера.
Перейдем в домашнюю директорию и скачаем архив репозитория, предварительно повысив права до суперпользователя:
Распакуем архив (при необходимости установив unzip).
Как можно увидеть из вывода команды, содержимое архива распаковалось в директорию rtl8188eu-master, перейдем в нее и выполним сборку модуля:
После сборки модуля в директории должен появиться файл 8188eu.ko, это и есть искомый модуль ядра. Теперь установим его командой:
Осталось включить наш модуль, выполнив команду:
или просто отключить и подключить заново адаптер. В настольной системе вы сразу увидите сообщение о возможности подключиться к беспроводной сети.
Или выполните в консоли команду:
В выводе вы увидите появившийся беспроводной интерфейс wlan0.
Как видим ничего сложного нет. Однако следует помнить, что модуль собирается и устанавливается под текущую версию ядра, и при его обновлении будет необходимо выполнить сборку и установку модуля заново. Если такой возможности нет, то следует, удерживая Shift при загрузке, выбрать и загрузить версию ядра, для которой собран модуль.
Источник