2

У меня много проблем с получением hostapd для создания точки доступа при загрузке системы, когда она настроена для работы в IEEE 802.11a (5 ГГц). Запуск его вручную из командной строки или в IEEE 802.11g (2,4 ГГц) работает просто отлично - только когда я пытаюсь создать точку доступа при загрузке, происходит сбой.

Во-первых, позвольте мне дать вам некоторые детали.

Системная среда

  • Debian 8.9 (Jessie) 64-битный (см. Ниже вывод uname )
  • Адаптер Wi-Fi - это Azurewave AW-NE785H с чипсетом Atheros AR9280/AR5B95 (поддерживает как 802.11a, так и 802.11g, поддерживает AP)

uname -a возвращает : Linux HOSTNAME 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux

Что я пытаюсь сделать

Я пытаюсь создать точку доступа (AP), которая работает в режиме 802.11a (5 ГГц) и запускается при загрузке системы.

В чем проблема

Проблема в том, что точка доступа не создается при загрузке системы, хотя в /etc/init.d есть скрипт init, который фактически запускается при загрузке. Что еще более странно, это то, что когда я пытаюсь запустить точку доступа в режиме IEEE 802.11g (2,4 ГГц), все работает просто отлично, точка доступа появляется при загрузке системы. То же самое относится к запуску hostapd вручную, используя service hostapd start или hostapd <my-config-file> .

Что я узнал до сих пор /logs /config

Вот мой конфигурационный файл hostapd (/etc/hostapd/hostapd.cfg):

interface=wlan0
driver=nl80211

country_code=DE
ieee80211n=1
ieee80211ac=1
wmm_enabled=1

ssid=MYSSID
hw_mode=a
channel=acs_survey
macaddr_acl=0
auth_algs=1

ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=supersecretpassphrasehere
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

dump_file=/tmp/hostapd.dump

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

Вот мой скрипт инициализации (/etc/init.d/hostapd):

#!/bin/sh

### BEGIN INIT INFO
# Provides:     hostapd
# Required-Start:   $remote_fs $network $syslog
# Required-Stop:    $remote_fs $network $syslog
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
# Short-Description:    Advanced IEEE 802.11 management daemon
# Description:      Userspace IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP
#           Authenticator
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON_SBIN=/usr/sbin/hostapd
DAEMON_DEFS=/etc/default/hostapd
DAEMON_CONF=/etc/hostapd/hostapd.cfg
NAME=hostapd
DESC="advanced IEEE 802.11 management"
PIDFILE=/run/hostapd.pid
LOGFILE=/var/log/hostapd_log

[ -x "$DAEMON_SBIN" ] || exit 0
[ -s "$DAEMON_DEFS" ] && . /etc/default/hostapd
[ -n "$DAEMON_CONF" ] || exit 0

DAEMON_OPTS="-dd -f $LOGFILE -B -P $PIDFILE $DAEMON_OPTS $DAEMON_CONF"

. /lib/lsb/init-functions

case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAME"
    start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \
        --pidfile "$PIDFILE" -- $DAEMON_OPTS >/dev/null
    log_end_msg "$?"
    ;;
  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"
    start-stop-daemon --stop --oknodo --quiet --exec "$DAEMON_SBIN" \
        --pidfile "$PIDFILE"
    log_end_msg "$?"
    ;;
  reload)
    log_daemon_msg "Reloading $DESC" "$NAME"
    start-stop-daemon --stop --signal HUP --exec "$DAEMON_SBIN" \
        --pidfile "$PIDFILE"
    log_end_msg "$?"
    ;;
  restart|force-reload)
    $0 stop
    sleep 8
    $0 start
    ;;
  status)
    status_of_proc "$DAEMON_SBIN" "$NAME"
    exit $?
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|force-reload|reload|status}" >&2
    exit 1
    ;;
esac

exit 0

файл журнала hostapd

Как видите, я сказал hostapd написать в /var/log/hostapd_log . Я попытался поднять AP при загрузке еще раз, и вот что я прочитал из файла журнала (все это было почти 500 строк):

  1. hostapd использует ожидаемый файл конфигурации (/etc/hostapd/hostapd.cfg)
  2. hostapd устанавливает для страны / регулирующего домена значение DE, как ожидается
  3. hostapd запускает автоматический выбор канала, как и ожидалось (channel=acs_survey).
    • Кажется, здесь что-то идет не так. Драйвер (nl80211) сообщает о неудачной команде кадра (ret=-22 (Invalid argument))
  4. 5 опросов ACS проводятся без сообщений об ошибках
  5. ACS терпит неудачу с сообщением ниже, тогда это все.

Вот сообщения журнала, когда ACS отказывает:

ACS: Trying survey-based ACS
ACS: Unable to collect survey data
ACS: All study options have failed
Interface initialization failed
wlan0: interface state ACS->DISABLED
wlan0: AP-DISABLED 
ACS: Possibly channel configuration is invalid, please report this along with your config file.
ACS: Failed to start
wlan0: AP-DISABLED 
wlan0: Deauthenticate all stations
[cut some lines here]
hostapd_free_hapd_data: Interface wlan0 wasn't started
[cut some more lines here]
Interface wlan0 disabled

Когда я запускаю запуск service hostapd start (ничего не трогая), запускается точка доступа, и я вижу, что ACS отлично справляется со своей работой (выбирает канал 40).

Google

Конечно, я много гуглил для решения моей проблемы. Я думаю, что я сузил это до некоторой проблемы с самим процессом загрузки или системными службами, мешающими друг другу. Единственная подсказка, которую я получил от этого, - отключить wpa_supplicant (подсказка, которую я обнаружил, гласит, что человек решил проблему, отключив wpa_supplicant и другие мешающие сервисы. К сожалению, они никогда не упоминали другие службы, которые они отключили.

Я запустил systemctl status wpa_supplicant и получил следующий вывод:

● wpa_supplicant.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Так что, я думаю, он не активен?

TL; DR

Почему hostapd не может создать точку доступа, когда настроен для работы в режиме 802.11a и запущен при загрузке, но удается создать ее после завершения загрузки и выполнения той же самой команды вручную? Что мне нужно сделать, чтобы добиться того, что я пытаюсь сделать?

Кто-нибудь успешно создал AP, как я пытаюсь создать? Есть намеки?

Если понадобятся какие-либо дополнительные детали, я буду рад предоставить их.

Заранее большое спасибо

1 ответ1

0

Похоже, ошибка в hostapd. Я использую следующие настройки для службы hostapd, чтобы перезапустить его автоматически:

[Service]
Restart=on-failure
RestartSec=30
# hostapd fails with exit code 0 when ACS is enabled
RestartForceExitStatus=0

(может быть добавлено с помощью systemctl edit hostapd)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .