WPA Supplicant (Русский)

From ArchWiki

Jump to: navigation, search
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.

Note: Ваша информация о сети будет сохранена в обычном текстовом формате, так что вы можете изменить права доступа для только что созданного файла /etc/wpa_supplicant.conf (например chmod 0600 /etc/wpa_supplicant.conf сделает файл читаемым только для root), в зависимости от вашего осознания вопросов безопасности.

Внесение дополнительной 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" в блоке "сеть" исправляет эту проблему.

Personal tools