WPA Supplicant (Русский)
From ArchWiki
i18n |
---|
English |
简体中文 |
Russian |
Contents |
Читать в первую очередь
Эта статья предполагает, что вы общаетесь на "ты" со своим "железом" и способны не заблудиться в конфигурационных файлах и настройках вашей системы. Также очень важно, чтобы вы *прочли и поняли* статью Wireless Setup (Русский), потому что это базис для всего того, что мы попытаемся тут объяснить.
Предыдущая статья была расширена с использованием ABS - The Arch Build System (Russian) и Сетевых Профилей, упомянутых в Wireless Setup (Русский). Я считаю, что лучшее понимание системы всегда помогает, но, как правило, отвлекают целей и, в конечном итоге влияет на масштабы этого документа.
Наконец, эта статья не является обязательной, если ваше "железо" работает из коробки или с использованием демона типа Network Manager или подобного. Если вы предпочитаете использовать графическую для настройки соединений, вам не следует читать это.
Что такое WPA Supplicant?
Вероятно вы слышали о присущей WEP уязвимости. Сеть, защищенная статическим ключом WEP легко может быть подвержена риску со стороны заинтересованного взломщика. WPA решает проблему статического ключа, изменяя его в пакете отданных\полученных частот, или каждый раз по прошествию какого-то времени. Этот процесс предоставляется демоном, который тесно связан с беспроводным оборудованием.
Плохие драйверы (в частности те, которые используют ndispluginwrapper) могут привести к бесплодным попыткам настройки сети, когда они используются вместе с wpa_supplicant, итак, если возможно, то используйте "железо" с соответствующей поддержкой и высоким качеством драйверов.
Для подробной информации можно использоваться домашнюю страницу проекта WPA Supplicant: http://hostap.epitest.fi/wpa_supplicant/
Установка
wpa_supplicant установлен по умолчанию, когда вытягивается группа 'base' из репозиториев. Используя pacman, пакет может быть установлен явно:
pacman -S wpa_supplicant
Пакет был собран для поддержки очень большого диапозона беспроводного оборудования. Для вашего сведения, вот список, который можно получить, выполнив 'wpa_supplicant ", без кавычек в вашей строке запроса Bash.
# wpa_supplicant ... Driver list: # список драйверов *HostAP *Prism54 *Madwifi *NDISWrapper *AMTEL *IPW (both 2100 and 2200 drivers) *WEXT (Generic Linux wireless extensions) *Wired ethernet
Большая часть беспроводного оборудования поддерживается по умолчанию в wpa_supplicant. Даже если производитель вашего чипсета не перечислен (что проиходит в большинстве возможных случаев), вы по прежнему можете вынудить использовать Generic Wireless Extensions для соединения с защищенной WPA сетью. Основываясь на своем богатом опыте, 75% "железа" поддерживается WEXT, около 20% совместимо после перекомпиляции wpa_supplicant/драйверов из исходников и, к сожалению, 5% вообще несовместимо по определению. Я буду говорить о несовместимости позже, но если вы в полном отчаяние, используйте ABS как вариант. WPA Supplicant доступен в /var/abs/core/wpa_supplicant.
Процесс
/etc/wpa_supplicant.conf содержит все настройки для wpa_supplicant. Их содержание довольно простое, несмотря на то, что файл-пример ужасно запутанный. Для упрощения: под учетной записью root переименуйте стандартный файл wpa_supplicant.conf. Он не нужен в данный момент.
# mv /etc/wpa_supplicant.conf /etc/wpa_supplicant.conf.original
SSID и пароль для вашей зашифрованной сети должен быть кодирован в шестнадцатиричную строку. Это легко выполняется при использовании утилиты wpa_passphrase, которая является частью пакета wpa_supplicant. Используйте синтаксис wpa_passphrase [ssid] [passphrase]
- Пример:
# wpa_passphrase mywireless secretpassphrase
должно сгенерироваться что-то наподобии представленного ниже:
network={ ssid="mywireless" #psk="secretpassphrase" psk=b90e230f1f2f5361a9b2d3acf276745ee3c751c0724a3b0052d6df15ec420e69 }
Это базовые настройки для того, чтобы зашифрованная сеть заработала. Первая строка "заявляет" об открытии сети, вторая содержит SSID для базовой станции с которой вы хотите соединиться, третья - пароль, и четвертная содержит hex-код, который требуется для связи с сетью.
- Воспользуйтесь wpa_passphrase, укажите актуальный SSID и пароль, а затем передайте вывод в файл /etc/wpa_supplicant.conf:
# wpa_passphrase myssid mypassphrase > /etc/wpa_supplicant.conf
изменяйте информацию на применимую лично к вам. Эта команда создаст базовый файл /etc/wpa_supplicant.conf из вывода команды wpa_passphrase.
Внесение дополнительной WPA-защищенной сети может быть сделано так:
# wpa_passphrase additional_ssid additional_passphrase >> /etc/wpa_supplicant.conf
Знаки '>>' добавят вывод команды в конец файла /etc/wpa_supplicant.conf без перезаписи.
Существует большое количество настроек, которые можно применить для вашей сети, их вы можете изучить просмотрев оригинальный конфигурационный файл. В большинстве случаев вы можете пользоваться настройками по умолчанию, и не выполнять из последующего ничего.
Последнее, впишите эти дополнительные строки в самый верх файла /etc/wpa_supplicant.conf, используя ваш любимый редактор:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
Если вам необходимо соединяться с несколькими сетями, просто укажите блоки для другой сети в этом же файле. Изменяйте приоритеты по желанию, приоритет с большим числом обрабатывается в первую очередь.
Теперь можно попробовать соединиться вручную.
Сначала поднимите сетевой wifi интерфейс. Для этого, в последующем примере используется интерфейс wlan0.
# ifconfig wlan0 up
Далее, укажите интерфейсу SSID точки доступа:
# iwconfig wlan0 essid [ssid]
После того как SSID будет принят (около 10 секунд в среднем), вам необходимо будет запустить wpa_supplicant для завершения ассоции шифрования. Как правило, у вас будет возможность использовать драйвер W'ireless EXTensions, если нет, то вы можете узнать в интернете как это сделать для вашего беспроводного оборудования.
Выполните следующее с правами root:
# wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
Что сообщит wpa_supplicant об использовании стандартной конфигурации "железа" (WEXT - Linux Wireless EXTensions) и привяжет к SSID, указанному в /etc/wpa_supplicant.conf. Кроме того, это объединение должно осуществляться посредством беспроводного интерфейса wlan0 и этот процесс должен перейти на задний план (-B). Для подробного вывода добавьте -d или -dd (для отладки), чтобы в консоль получить больше информации.
В выводе консоли должна быть строка 'Associated:' и последующий за ней MAC-адрес. Все что теперь необходимо - получить IP-адрес.
С правами root выполните:
# dhcpcd wlan0
- Заметка: *Не* запрашивайте IP сразу! Вы должны подождать, чтобы быть уверенным, что привязка прошла. Если вы используете скрипт, то можно добавить "sleep 10s", чтобы подождать 10 секунд.
Проверьте, получил ли интерфейс IP-адрес, воспользуйтесь ifconfig:
# ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr 00:1C:BF:66:4E:E0 inet addr:192.168.0.62 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::21c:bfff:fe66:4ee0/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:140387 errors:0 dropped:0 overruns:0 frame:0 TX packets:96902 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:125513183 (119.6 Mb) TX bytes:12299192 (11.7 Mb)
Если вывод похож на представленный выше, значит вы соединены. Если это так, то вы можете заняться изучением скриптов netcfg2 для настройки на более постоянных условиях и получить работающую сеть при запуске компьютера. В зависимости от того, какой подход к настройке беспроводной сети вы избрали, вы можете решить использовать графическую, но не такую "захватывающую" утилиту, например Wicd или выбрать использование сетевых профилей, поддерживаемых netcfg.
Более продвинутые настройки, такие как EAPOL и RADIUS аутентификации очень хорошо описаны в man-странице wpa_supplicant.conf. Эти настройки выходят за пределы этой статьи.
Но блин, у меня оно не работает - (Перекомпиляция wpa_supplicant из исходников)
Возьмите копию исходных текстов wpa_supplicant на домашней странице проекта или из ABS. После того как скачаете и распакуете, взгляните на файл '.config' (да, он скрыт). Файл выглядит как файл конфигурации ядра, но намного меньше. Обратите внимание на секцию с заголовком CONFIG_DRIVER_DRIVERNAME и выберите "да" или "нет", в зависимости от вашего драйвера. Будьте осторожны с выбором, потому что вам понадобится указать дополнительный путь к исходным текстам драйвера беспроводных устройств, чтобы правильно скомпилировать компоненты ассоциирующиеся на низком уровне. Некоторые странные карты Atheros могут потребовать новой компиляции wpa_supplicant со сборкой последней доступной версией madwifi из SVN. Если это тот случай, вот пример для демонстрации процесса компиляции:
пример с madwifi: отредактируйте следующие строки в файле конфигурации, чтобы они выглядели как те, что ниже. Это предполагает, что вы собрали madwifi из ABS и исходники сохранены в /var/abs/local/madwifi/src/.
#Интерфейс драйвера для madwifi CONFIG_DRIVER_MADWIFI=y #Измените приведенные директории, чтобы они совпадали с локальными CFLAGS += -I/var/abs/local/madwifi/src/madwifi
Достаточно настроить один раз, далее можно будет использоваться makepkg.
Управление
Wicd
Установка:
# pacman -S wicd
Очень просто. Ищите сети, вводите требуемые данныи и соединяетесь. Возможно понадобится добавить
/usr/lib/wicd/autoconnect.py
в ваши init-скрипты и скрипты управления питанием для соединения с вашими сетями, если необходимо автосоединение.
netcfg
Это очень минималистичный вариант, который работает в большинстве случаев. Я говорю "в большинстве случаев", потому что я видел некоторые проблемы соединения, которые я не смог отладить, с частью настроек. Большинство этих проблем так или иначе связаны с DHCP (таймауты), их можно исправить перезапустив dhcpcd.
Конфигурация профиля предельно проста. Отредактируйте профиль согласно вашим нуждам, уделяя особое внимание на:
SECURITY="wpa" KEY="вашпароль"
Эта конфигурация должна работать в большинстве систем. Если ваше "железо" показывает любой признак отказа работы, вы можете изменить значение связанные с драйвером wpa_supplicant.
Пример профиля, использующего для соединения с сетью wekonet карту ralink на channel 11
# # Network Profile # DESCRIPTION="Example WPA Network Profile" # Network Settings INTERFACE=ra0 HOSTNAME=wekonet # Interface Settings (use IFOPTS="dhcp" for DHCP) IFOPTS="dhcp" #GATEWAY=192.168.0.1 # DNS Settings (optional) #DOMAIN=localdomain #DNS1=192.168.0.1 #DNS2= # Wireless Settings (optional) ESSID=wekonet #KEY= IWOPTS="mode managed essid $ESSID channel 11" #WIFI_INTERFACE=wlan0 # используйте эту строку, если вы хотите указать специальный беспроводной интерфейс, # который обращается к реальному $INTERFACE #WIFI_WAIT=5 # количество секунд для ожидания ассоциации сетевой карты # прежде чем интерфейс поднимется USEWPA="yes" # запуск wpa_supplicant из профиля WPAOPTS="-D ralink" # используйте "" для обычной работы или укажите особые дополнительные # опции (например, "-D ipw") # смотите /etc/wpa_supplicant.conf для настройки
Общие проблемы
99.9% проблем связаны с ассоциацией карты. Итак, внимательно посмотрите на вывод wpa_supplicant, когда обнаружено отклонение. Добавьте "-d" (для отладки), чтобы повысить подробности вывода. Обычно "-dd" бывает достаточно, в то время как "-dddd" может убить все.
Когда будете просматривать запись (лог), обратите внимание на строки типа:
ioctl[ЧТО УГОДНО]: Operation not supported
В этом случае вы сталкиваетесь с проблемой драйвера. Обновите драйвер или измените параметр -D.
Другая распространенная проблема - это сообщение No suitable AP found. Wpa_supplicant, очевидно, испытывает трудности в обнаружении скрытых ESSID. Обычно установка "scan_ssid=1" в блоке "сеть" исправляет эту проблему.