Если вас не устраивают существующие роутеры или точки доступа 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 файле
#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
Пингбэк: Правильная настройка wifi