У меня много проблем с получением 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 строк):
- hostapd использует ожидаемый файл конфигурации (
/etc/hostapd/hostapd.cfg
) - hostapd устанавливает для страны / регулирующего домена значение DE, как ожидается
- hostapd запускает автоматический выбор канала, как и ожидалось (
channel=acs_survey
).- Кажется, здесь что-то идет не так. Драйвер (
nl80211
) сообщает о неудачной команде кадра (ret=-22 (Invalid argument)
)
- Кажется, здесь что-то идет не так. Драйвер (
- 5 опросов ACS проводятся без сообщений об ошибках
- 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).
Конечно, я много гуглил для решения моей проблемы. Я думаю, что я сузил это до некоторой проблемы с самим процессом загрузки или системными службами, мешающими друг другу. Единственная подсказка, которую я получил от этого, - отключить 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, как я пытаюсь создать? Есть намеки?
Если понадобятся какие-либо дополнительные детали, я буду рад предоставить их.
Заранее большое спасибо