Estou tendo muitos problemas para obter hostapd
para criar um ponto de acesso quando ele é configurado para ser executado no IEEE 802.11a (5 GHz). Executá-lo manualmente a partir da linha de comando ou no IEEE 802.11g (2,4 GHz) funciona muito bem - apenas quando tento criar o AP na inicialização, ele falha.
Primeiro, deixe-me dar alguns detalhes.
Ambiente do sistema
- Debian 8.9 (Jessie) 64 bits (veja abaixo para
uname
output)
- O adaptador Wifi é um Azurewave AW-NE785H com chipset Atheros AR9280 / AR5B95 (suporta 802.11ae 802.11g, está pronto para AP)
uname -a
yields: Linux HOSTNAME 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
O que estou tentando fazer
Estou tentando criar um ponto de acesso (AP) que é executado no modo 802.11a (5 GHz) e que é iniciado quando o sistema é inicializado.
Qual é o problema
O problema é que o AP não é criado quando eu inicializo o sistema, embora exista um script de inicialização em /etc/init.d
que é realmente executado na inicialização. O que é ainda mais estranho é que quando eu tento executar o AP no modo IEEE 802.11g (2.4 GHz), tudo funciona muito bem, o AP aparece quando o sistema é inicializado. O mesmo se aplica para iniciar manualmente hostapd
, usando service hostapd start
ou hostapd <my-config-file>
.
O que eu descobri até agora / logs / config
Aqui está o meu arquivo hostapd
config ( /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
Aqui está o meu script de inicialização ( /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
arquivo de log hostapd
Como você pode ver, eu disse a hostapd
para gravar em /var/log/hostapd_log
. Eu tentei levantar o AP na inicialização mais uma vez e aqui está o que eu li do arquivo de log (a coisa toda foi quase 500 linhas):
- O hostapd usa o arquivo de configuração esperado (
/etc/hostapd/hostapd.cfg
)
- O hostapd define o domínio do país / regulatório para o DE conforme esperado
- O hostapd inicia a seleção automática de canais conforme o esperado (
channel=acs_survey
).
- Algo parece dar errado aqui. O driver (
nl80211
) relata um comando de frame com falha ( ret=-22 (Invalid argument)
)
- 5 verificações de pesquisa do ACS são realizadas sem mensagens de erro
- O ACS falha com a mensagem abaixo, então é isso.
Aqui estão as mensagens de log quando o ACS falha:
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
Quando eu executo service hostapd start
(sem tocar em nada), o AP aparece e eu vejo que o ACS faz seu trabalho muito bem (ele seleciona o canal 40).
Google
Claro que pesquisei muito por uma solução para o meu problema. Acho que reduzi a isso a ser algum tipo de problema com o processo de inicialização em si ou com os serviços do sistema interferindo uns nos outros. A única dica que recebi é desativar wpa_supplicant
(a dica que encontrei afirmou que a pessoa resolveu o problema desabilitando wpa_supplicant
e outros serviços interferentes . Infelizmente, eles nunca mencionaram os outros serviços eles desativaram.
Eu corri systemctl status wpa_supplicant
e recebi a seguinte saída:
● wpa_supplicant.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Então eu acho que não está ativo de qualquer maneira?
TL; DR
Por que hostapd
falha ao criar um ponto de acesso quando configurado para ser executado no modo 802.11a e iniciado na inicialização, mas consegue criá-lo depois que a inicialização é concluída e o mesmo comando é executado manualmente? O que tenho que fazer para conseguir o que estou tentando fazer?
Alguém aí criou com sucesso um AP como estou tentando criar? Alguma dica?
Se mais detalhes forem necessários, ficaremos felizes em fornecê-los.
Agradecemos antecipadamente