Установка hostapd из исходников


Если вас не устраивают существующие роутеры или точки доступа WiFi, остаётся только один выход — сделать самому. После того как вы собрали роутер с WiFi на базе персонального компьютера и установили систему, настроили сеть, необходимо установить и настроить беспроводную сеть WiFi. Для этого устанавливают пакет hostapd из репозиториев. Но часто бывает так, что находящийся в репозитории пакет не отвечает нашим требования, например, у него не включён режим IEEE 802.11ac или там старая версия hostapd. В этом случаем нам придётся самим установить из исходников hostapd. В нашем примере мы будем устанавливать hostapd на системе Centos 6. Для этого заходим на сайт https://w1.fi/hostapd/ и скачиваем исходники (на момент написания статьи последняя версия была 2.5). В настоящее время уже есть версия 2.7 с поддержкой 802.11ax и wpa3.

#wget https://w1.fi/releases/hostapd-2.5.tar.gz

Распаковываем

#tar -zxvf hostapd-2.5.tar.gz

Входим в папку с исходниками

#cd hostapd-2.5/hostapd

В исходниках находится пример конфигурационного файла под названием defconfig, копируем его в .config

#cp defconfig .config

Открываем его редактором и настраиваем под наши нужды. В нашем случае нам необходимо включить поддержку IEEE 802.11ac

#nano .config

Приводим файл к следующему виду, сохраняем и выходим

CONFIG_DRIVER_HOSTAP=y
CONFIG_DRIVER_NL80211=y
CONFIG_LIBNL32=y
CONFIG_IAPP=y
CONFIG_RSN_PREAUTH=y
CONFIG_PEERKEY=y
CONFIG_IEEE80211W=y
CONFIG_EAP=y
CONFIG_ERP=y
CONFIG_EAP_MD5=y
CONFIG_EAP_TLS=y
CONFIG_EAP_MSCHAPV2=y
CONFIG_EAP_PEAP=y
CONFIG_EAP_GTC=y
CONFIG_EAP_TTLS=y
CONFIG_PKCS12=y
CONFIG_IPV6=y
CONFIG_IEEE80211N=y
CONFIG_IEEE80211AC=y
CONFIG_ACS=y

Подробное описание каждой настройки .config

#Пример конфигурирования hostapd
#
#Этот файл содержит список параметров конфигурации, которые используются при компиляции Hostapd
#Все строки, начинающиеся с #игнорируются. Строка с параметрами настройки должна быть закомментирована, если функция не должна быть включена, т.е. установка переменной — n не отключает функцию.
#Этот файл включен в Makefile, так как CFLAGS переменные и библиотеки также могут быть изменены здесь. В большинстве должны быть использованы «+=» для того что бы не переопределить предыдущие значения переменных.

#Интерфейс драйвера для управления точкой доступа
CONFIG_DRIVER_HOSTAP=у

#Интерфейс драйвера для проводного аутентификатора
#CONFIG_DRIVER_WIRED=у

#Интерфейс для драйверов, использующих nl80211 интерфейс ядра
CONFIG_DRIVER_NL80211=у

#Driver_nl80211.c требует библиотеку libnl. Если компилируете сами, то Вы можете указать нужной версии libnl для вашего hostapd.
#CFLAGS + = -I $ <Путь к libnl включить файлы>
#LIBS + = -L $ <Путь к libnl библиотечные файлы>

#Использовать libnl v2.0 (или 3.0) библиотеку.
#CONFIG_LIBNL20=у

#Использовать libnl 3,2 библиотеку (если выбран данный параметр, то CONFIG_LIBNL20 игнорируется)
CONFIG_LIBNL32=у

#Интерфейс драйвера для FreeBSD net80211 слоя (например, драйвер Atheros)
#CONFIG_DRIVER_BSD=y
#CFLAGS += -I/usr/local/include
#LIBS += -L/usr/local/lib
#LIBS_p += -L/usr/local/lib
#LIBS_c += -L/usr/local/lib

#Интерфейс не для драйвера (например, только RADIUS-сервер)
#CONFIG_DRIVER_NONE=у

#IEEE 802.11f / IAPP
CONFIG_IAPP=у

#WPA2 / IEEE 802.11i RSN предаутентификация
CONFIG_RSN_PREAUTH=у

#PeerKey связь станция-станция (IEEE 802.11e DLS)
CONFIG_PEERKEY=у

#IEEE 802.11w (управление защитой пакета)
CONFIG_IEEE80211W=у

#Встроенный сервер EAP
CONFIG_EAP=у

#EAP Предаутентификационный протокол (ERP), во встроенном EAP сервере
CONFIG_ERP=у

#EAP-MD5 для интегрированного EAP сервера
CONFIG_EAP_MD5=у

#EAP-TLS для интегрированного EAP сервера
CONFIG_EAP_TLS=у

#EAP-MSCHAPv2 для интегрированного EAP сервера
CONFIG_EAP_MSCHAPV2=у

#EAP-PEAP для интегрированного EAP сервера
CONFIG_EAP_PEAP=у

#EAP-GTC для интегрированного EAP сервера
CONFIG_EAP_GTC=у

#EAP-TTLS для интегрированного EAP сервера
CONFIG_EAP_TTLS=у

#EAP-SIM для интегрированного EAP сервера
#CONFIG_EAP_SIM=у

#EAP-AKA для интегрированного EAP сервера
#CONFIG_EAP_AKA=у

#EAP-AKA для интегрированного EAP сервера. Данный параметр требует включения CONFIG_EAP_AKA.
#CONFIG_EAP_AKA_PRIME=у

#EAP-PAX для интегрированного EAP сервера
#CONFIG_EAP_PAX=у

#EAP-PSK для интегрированного EAP сервера (не требуется для WPA-PSK)
#CONFIG_EAP_PSK=у

#EAP-PWD для интегрированного EAP сервера (аутентификация с безопасным паролем)
#CONFIG_EAP_PWD=у

#EAP-SAKE встроенный сервер EAP
#CONFIG_EAP_SAKE=у

#EAP-GPSK для интегрированного EAP сервера
#CONFIG_EAP_GPSK=у
#Включить поддержку шифрования SHA256 в EAP-GPSK
#CONFIG_EAP_GPSK_SHA256=у

#EAP-FAST для интегрированного EAP сервера
#Примечание: Если OpenSSL используется в виде библиотеки TLS, то для поддержки EAP-FAST требуется OpenSSL 1.0 или более поздней версии. Старые релизы OpenSSL, для добавления необходимых функций необходимо пропатчить, например, с помощью OpenSSL-0.9.8x-TLS-extensions.patch.
#CONFIG_EAP_FAST=у

#Защищённая настройка Wi-Fi (WPS)
#CONFIG_WPS=у
#Включить поддержку UPnP для внешних WPS регистраторов
#CONFIG_WPS_UPNP=у
#Включить поддержку WPS с методом конфигурации NFC
#CONFIG_WPS_NFC=у

#EAP-IKEv2
#CONFIG_EAP_IKEV2=у

#Доверенное сетевое соединение (EAP-ТНК)
#CONFIG_EAP_TNC=у

#EAP-EKE для интегрированного EAP сервера
#CONFIG_EAP_EKE=у

#Поддержка PKCS#12 (PFX) (используется для чтения закрытого ключа и сертификата из файла, который обычно имеет расширение .pfx или .p12)
CONFIG_PKCS12=у

#RADIUS аутентификационный сервер. Данная функция обеспечивает доступ к интегрированному EAP серверу для внешних хостов, используя RADIUS.
#CONFIG_RADIUS_SERVER=у

#Включение поддержки IPv6 для RADIUS сервера
CONFIG_IPV6=у

#IEEE Std 802.11r-2008 (Быстрые BSS переходы)
#CONFIG_IEEE80211R=у

#Используйте IEEE 802.11 аутентификацию hostapd (в ACL), но без способности управления IEEE 802.11 (например, FreeBSD / net80211)
#CONFIG_DRIVER_RADIUS_ACL=у

#Поддержка стандарта IEEE 802.11n (Высокая пропускная способность)
CONFIG_IEEE80211N=у

#Управление беспроводной сетью (IEEE Std 802.11v-2011)
#Примечание: Это экспериментальная и неполноценная реализация.
#CONFIG_WNM=у

#Поддержка стандарта IEEE 802.11ac (Очень высокая пропускная способность)
CONFIG_IEEE80211AC=у

#Отключить отладку кода, чтоб не выводить отладочные сообщения. Благодаря этому можно значительно уменьшить размер hostapd, если конечно отладка кода не требуется.
#CONFIG_NO_STDOUT_DEBUG=у

#Включение записи отладочной информации в файл: -f /tmp/hostapd.log По умолчанию отключена.
#CONFIG_DEBUG_FILE=у

#Включение отправки всех отладочных сообщений (независимо от отладки многословием) для объектов трассировки ядра Linux. Помогает отладить весь стэк и позволяет записывать всё, что происходит с драйвером в файл, например, с использованием трассировки-CMD.
#CONFIG_DEBUG_LINUX_TRACING=у

#Удалить поддержку учетных записей RADIUS
#CONFIG_NO_ACCOUNTING=у

#Удалить поддержку RADIUS
#CONFIG_NO_RADIUS=у

#Удалить поддержку VLAN
#CONFIG_NO_VLAN=у

#Включение полной поддержки динамических VLAN. Это позволит hostapd в автоматически создавать интерфейсы моста и VLAN, если необходимо.
#CONFIG_FULL_DYNAMIC_VLAN=у

#Использовать API ядра NetLink как основу операций для VLAN вместо IOCTL ()
#Примечание: Требуется библиотека версии libnl 3.1 или более поздней.
#CONFIG_VLAN_NETLINK=у

#Удалить поддержку для сброса внутреннего состояния с помощью команд интерфейса управления. Это может быть использовано для уменьшения размера бинарного кода за счет отключение опции отладки.
#CONFIG_NO_DUMP_STATE=у

#Включение отладки кода трассировки
#Отслеживает использование памяти ассигнований и других регистраций и отчетов неправильного использования обратной трассировкой вызова (или распределения).
#CONFIG_WPA_TRACE=у
#Для BSD, закомментируйте эти.
#LIBS + = -lexecinfo
#LIBS_p + = -lexecinfo
#LIBS_c + = -lexecinfo

#Используйте libbfd, для получения более подробной отладочной информации
#Позволяет использовать libbfd, чтобы получить более подробные значения для цепочек вызовов генерированных для CONFIG_WPA_TRACE=у.
#CONFIG_WPA_TRACE_BFD=у
#Для BSD, закомментируйте эти.
#LIBS + = -lbfd -liberty -lz
#LIBS_p + = -lbfd -liberty -lz
#LIBS_c + = -lbfd -liberty -lz

#Hostapd зависит от криптостойкой генерации случайных чисел доступных в операционной системе. При необходимости используется функция os_get_random() для выборки случайных данных, например, при генерации ключа. В системах Linux и BSD работает при чтении /dev/urandom. Следует отметить, что источник энтропии ОС должен быть правильно инициализирован перед запуском hostapd. Это особенно важно на встроенных устройствах, которые не имеют аппаратных генераторов случайных чисел и может по умолчанию начать с минимальной энтропии, доступной для генерации случайных чисел.
#Для подстраховки, hostapd по умолчанию пытается собрать дополнительную энтропию для генерации случайных данных, чтобы смешать их с данными, извлекаемыми из ОС. Само по себе не считается очень надёжным, но это может помочь в тех случаях, когда система пула не инициализируется должным образом. Тем не менее, рекомендуется система инициализации пула с достаточной энтропией, либо с помощью аппаратного генератора случайных чисел или хранение состояния между перезагрузками устройств.

#hostapd может быть настроен, чтобы поддерживать свою собственную базу энтропии поверх перезагрузок для расширения генерации случайных чисел. Это не идеально, но это гораздо более безопасно, чем использование той же последовательности случайных чисел после каждой перезагрузки. Может быть включен -е <энтропия файл> опцией командной строки. Указанный файл должен быть доступен для чтения и записи программой hostapd.
#Если os_get_random(), как известно, обеспечивает криптостойкие случайные данные (например, в Linux / BSD, доска известных вопросов имеет надежный источник случайных данных из /dev/urandom), внутренний hostapd случайным пул может быть отключён. Это позволит сэкономить бинарные данные и использование центрального процессора. Тем не менее, следует рассматривать только для сборки на устройствах, которые отвечают требованиям, описанным выше.
#CONFIG_NO_RANDOM_POOL=у

#Использовать опрос вместо выбора? Значение по умолчанию — да.
#CONFIG_ELOOP_POLL=у

#Использовать расширенный опрос вместо выбора? Значение по умолчанию — да.
#CONFIG_ELOOP_EPOLL=у

#Выберите вариант TLS
#openssl = OpenSSL (по умолчанию)
#gnutls = GnuTLS
#internal = Internal TLSv1 implementation (experimental)
#none = Empty template
#CONFIG_TLS=openssl

#Методы EAP, основанные на TLS, требуют минимум TLS v1.0. Новые версии TLS (v1.1) могут быть включены, чтобы получить более криптостойкую структуру, при использовании блочных шифров.
#CONFIG_TLSV11=у

#Методы EAP, основанные на TLS, требует минимум TLS v1.0. Новые версии TLS (v1.2) могут быть включены, чтоб разрешить использование более сильных алгоритмов шифрования.
#CONFIG_TLSV12=у

#Если CONFIG_TLS=internal используется, то дополнительная библиотека и включают в части требующие LibTomMath. Но при этом может быть использованы интегрированная, минимальная версия LibTomMath. См libtommath.c подробную информацию о преимуществах и недостатки этого варианта.
#CONFIG_INTERNAL_LIBTOMMATH=y
#ifndef CONFIG_INTERNAL_LIBTOMMATH
#LTM_PATH=/usr/src/libtommath-0.39
#CFLAGS += -I$(LTM_PATH)
#LIBS += -L$(LTM_PATH)
#LIBS_p += -L$(LTM_PATH)
#endif
#При размере дополнительного двоичного кода около 4 кбайт, внутренний LibTomMath может быть выполнен с возможностью включать в себя более быстрые процедуры для exptmod, sqr, и div для ускорения DH и RSA вычислений.
#CONFIG_INTERNAL_LIBTOMMATH_FAST=у

#Включение функциональнала улучшенной организации межсетевого обмена с внешними сетями.
#CONFIG_INTERWORKING=у

# Hotspot 2.0
#CONFIG_HS20=у

# Включить поддержку базы данных SQLite для hlr_auc_gw, EAP-SIM БД, и eap_user_file
#CONFIG_SQLITE=у

# Включить быструю передачу сессий (FST)
#CONFIG_FST=у

# Включить команды консоли для тестирования FST
#CONFIG_FST_TEST=у

#Параметры тестирования могут использоваться для того, чтобы использовать несколько вариантов тестирования (см также пример файл конфигурации), что действительно полезно только для тестирования клиентами, при подключении к этому hostapd. Эти опции позволяют, например, опустить определенный процент запросов зонда или авт/(Re)доц кадров.
#CONFIG_TESTING_OPTIONS=у

#Автоматический выбор канала позволит hostapd автоматически выбрать канал, когда канал установлен для «acs_survey» или «0». В конце концов, другие алгоритмы ACS (АВК) могут быть добавлены в подобный способ.
#Автоматический выбор в настоящее время делается только через инициализацию, позже мы надеемся сделать проверку через определённые временные интервалы, чтобы постоянно находить самые свободные каналы и переключаться на них. ACS (АВК) в настоящее время поддерживается только с помощью драйвера nl80211 и ваш драйвер должен иметь возможность анализа дампа, который заполняется драйвером во время сканирования.
#Вы можете настроить алгоритм обследования ACS hostapd.conf с переменной acs_num_scans.
#Поддерживаемые драйверы ACS:
# * ath9k
# * ath5k
# * ath10k
#
#Для получения более подробной информации обратитесь к странице http://wireless.kernel.org/en/users/Documentation/acs
CONFIG_ACS=у

Переходим в режим суперпользователя и устанавливаем необходимые библиотеки, указанные в .config файле

#su
#yum install -y libnl3-devel

Устанавливаем компилятор, если он не установлен

#yum install -y gcc

Запускаем процесс компиляции

#make && make install

Если во время компиляции возникают ошибки, значит не хватает каких либо библиотек и значит вам нужно будет посмотреть отладку и установить недостающие библиотеки.
Так как компиляция производится в папку /usr/local/bin, в RedHat системах находятся программы в папке /usr/sbin, нам придётся скопировать туда установленный hostapd

#cp /usr/local/bin/hostapd /usr/sbin/hostapd

После этого запускаем hostapd

#service hostapd start

Проверить состояние службы можно с помощью

#service hostapd status

Если служба не запускается посмотреть отладку можно командой

 #hostapd -dd
или
#/usr/local/bin/hostapd -dd

Смотрим в чём ошибка и устраняем

Полноценная работа на моём оборудовании получилась при следующих настройках hostapd.conf:

ctrl_interface=/dev/shm/hostapd
interface=wlan0
driver=nl80211
### Название сети WiFi
ssid=AC
### a для 5 ГГц, n для 2 ГГц
hw_mode=a
### Доступные каналы можно посмотреть командой iw list или iw phy
channel=149
max_num_sta=128
auth_algs=1
disassoc_low_ack=1

### DFS
# сканирование беспроводной сети для определения свободных и занятых частот, какие частоты разрешены и т.д. Без этого параметра ширина канала 80 МГц не заработала.
ieee80211h=1
# установка разрешённых каналов, зависит от страны. Без этого параметра ширина канала 80 МГц не заработала.
ieee80211d=1
# название страны по стандарту ISO 3166-1
country_code=BO

### IEEE 802.11n
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][SHORT-GI-80][RX-LDPC][TX-STBC][RX-STBC1][DSSS_CCK-40][MAX-AMSDU-7935][MAX-AMPDU-65535][MAX-MPDU-11454]

### IEEE 802.11ac
ieee80211ac=1
vht_oper_chwidth=1
# цифра в этой настройке напрямую зависит от выбранного канала! Т.е. если канал будет 36 или 48, то здесь нужно выставить 42. Обычно не совпадает с номером канала и смещена на 2 порядка и более в сторону центра. Теоретически находится в центре диапазона. Например, диапазон 36-48 => (36+48)/2=42; 149-161 => (149+161)/2=155. Приходится искать опытным путём. Без включения этого параметра ширина 80 МГц у канала не получится.
vht_oper_centr_freq_seg0_idx=155
vht_capab=[HT80+][SHORT-GI-20][SHORT-GI-40][MAX-MPDU-11454][RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP7][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN]
### WPA/IEEE 802.11i
# режим шифрования, для использования только WPA ставим 2.
wpa=2
# тип шифрования
wpa_key_mgmt=WPA-PSK
# пароль
wpa_passphrase=your_password
wpa_pairwise=CCMP

При некоторых настройках hostapd запускается, но спустя 10 секунд блокируется. При этом блокирование зависит от версии ядра линукса и версии hostapd. Т.е. при одних и тех же настройках на одном ядре работает, на другом нет, с одной версией hostapd работает, с другой нет. Если с одновременно включёнными параметрами ieee80211n=1 и vht_oper_chwidth=1 не работает, то нужно опытным путём подобрать подходящее ядро.

Для упрощения настройки строчек ht_capab= и vht_capab= нужно воспользоваться командой iw list или iw phy phy0 info и перейти в секцию «Band» интересующей нас частоты (2.4 или 5 гГц):

#iw phy phy0 info

Band x:
                Capabilities: 0x19e3
                        RX LDPC
                        HT20/HT40
                        Static SM Power Save
                        RX HT20 SGI
                        RX HT40 SGI
                        TX STBC
                        RX STBC 1-stream
                        Max AMSDU length: 7935 bytes
                        DSSS/CCK HT40
                Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                Minimum RX AMPDU time spacing: 8 usec (0x06)
                HT TX/RX MCS rate indexes supported: 0-23
                VHT Capabilities (0x338001b2):
                        Max MPDU length: 11454
                        Supported Channel Width: neither 160 nor 80+80
                        RX LDPC
                        short GI (80 MHz)
                        TX STBC
                        RX antenna pattern consistency
                        TX antenna pattern consistency

Соответственно символ «/» заменяем на _, пробел на -, а некоторые параметры пишем по-другому, например, SGI это SHORT-GI. Каждый параметр заключаем в квадратные скобки []. До строки VHT Capabilities данные относятся к ht_capab=, после к vht_capab=. В итоге получается:

ht_capab=[RX-LDPC][HT40+][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC-1][MAX-AMSDU-7935][DSSS_CCK-40][MAX-RX-AMPDU-65535]
vht_capab=[MAX-MPDU-11454][HT80+][SHORT-GI-80][RX-LDPC][TX-STBC][RX-STBC-1][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN]

Посмотреть состояние точки доступа можно командой

iw dev wlan0 info

Поделиться в:

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Мысль на тему “Установка hostapd из исходников