Por que o hostapd no IEEE 802.11a (5Ghz) não inicia na inicialização?

2

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):

  1. O hostapd usa o arquivo de configuração esperado ( /etc/hostapd/hostapd.cfg )
  2. O hostapd define o domínio do país / regulatório para o DE conforme esperado
  3. 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) )
  4. 5 verificações de pesquisa do ACS são realizadas sem mensagens de erro
  5. 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

    
por dersteps 01.11.2017 / 16:12

1 resposta

0

Parece um bug no hostapd. Estou usando as seguintes configurações para o serviço hostapd para reiniciá-lo automaticamente:

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

(pode ser adicionado com systemctl edit hostapd )

    
por 18.04.2018 / 21:21