# WPA Supplicant (Русский)

## Читать в первую очередь

Эта статья предполагает, что вы общаетесь на "ты" со своим "железом" и способны не заблудиться в конфигурационных файлах и настройках вашей системы. Также очень важно, чтобы вы *прочли и поняли* статью Wireless Setup (Русский), потому что это базис для всего того, что мы попытаемся тут объяснить.

Предыдущая статья была расширена с использованием Arch Build System (Русский) и Сетевых Профилей, упомянутых в 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.

Обратите внимание: Ваша информация о сети будет сохранена в обычном текстовом формате, так что вы можете изменить права доступа для только что созданного файла /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" в блоке "сеть" исправляет эту проблему.

Categories:

- Русский
- Networking (Русский)