Почему hostapd в IEEE 802.11a (5 ГГц) не запускается при загрузке?

1059
dersteps

У меня много проблем 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который фактически запускается при загрузке. Что еще более странно, это то, что когда я пытаюсь запустить точку доступа в режиме 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 " >&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(ничего не трогая), появляется AP, и я вижу, что 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, как я пытаюсь создать? Есть намеки?

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

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

2

1 ответ на вопрос

0
xuhcc

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

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

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