O hostapd não será iniciado via "serviço" - mas será iniciado diretamente

19

Estou tendo problemas hostapdpara começar como um serviço. Falha quando tento iniciá-lo:

$ sudo service hostapd start
[FAIL] Starting advanced IEEE 802.11 management: hostapd failed!

Pelo que entendi, isso usa a configuração em /etc/default/hostapd:

$ cat /etc/default/hostapd 
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
#DAEMON_CONF=""
DAEMON_CONF=”/etc/hostapd/hostapd.conf”

# Additional daemon options to be appended to hostapd command:-
#   -d   show more debug messages (-dd for even more)
#   -K   include key data in debug messages
#   -t   include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
DAEMON_OPTS="-d"

Meu arquivo de configuração do daemon é o seguinte:

$ cat /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
driver=rtl871xdrv
country_code=USA
ctrl_interface=wlan0
ctrl_interface_group=0
ssid=KITT
hw_mode=g
channel=1
wpa=3
wpa_passphrase=georgeisyourfriend
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3
macaddr_acl=0
wmm_enabled=1
eap_reauth_period=360000000

Apesar de o serviço falhar ao iniciar, eu posso iniciá-lo diretamente por conta própria, sem erros:

$ sudo hostapd -d /etc/hostapd/hostapd.conf
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
ctrl_interface_group=0
drv->ifindex=3
Configure bridge br0 for EAPOL traffic.
BSS count 1, BSSID mask 00:00:00:00:00:00 (0 bits)
Completing interface initialization
Mode: IEEE 802.11g  Channel: 1  Frequency: 2412 MHz
RATE[0] rate=10 flags=0x1
RATE[1] rate=20 flags=0x1
RATE[2] rate=55 flags=0x1
RATE[3] rate=110 flags=0x1
RATE[4] rate=60 flags=0x0
RATE[5] rate=90 flags=0x0
RATE[6] rate=120 flags=0x0
RATE[7] rate=180 flags=0x0
RATE[8] rate=240 flags=0x0
RATE[9] rate=360 flags=0x0
RATE[10] rate=480 flags=0x0
RATE[11] rate=540 flags=0x0
Flushing old station entries
Deauthenticate all stations
+rtl871x_sta_deauth_ops, ff:ff:ff:ff:ff:ff is deauth, reason=2
rtl871x_set_key_ops
rtl871x_set_key_ops
rtl871x_set_key_ops
rtl871x_set_key_ops
Using interface wlan0 with hwaddr 80:1f:02:d3:cb:b8 and ssid 'KITT'
Deriving WPA PSK based on passphrase
SSID - hexdump_ascii(len=4):
     4b 49 54 54                                       KITT
PSK (ASCII passphrase) - hexdump_ascii(len=18): [REMOVED]
PSK (from passphrase) - hexdump(len=32): [REMOVED]
rtl871x_set_wps_assoc_resp_ie
rtl871x_set_wps_beacon_ie
rtl871x_set_wps_probe_resp_ie
urandom: Got 20/20 bytes from /dev/urandom
GMK - hexdump(len=32): [REMOVED]
Key Counter - hexdump(len=32): [REMOVED]
WPA: group state machine entering state GTK_INIT (VLAN-ID 0)
GTK - hexdump(len=32): [REMOVED]
WPA: group state machine entering state SETKEYSDONE (VLAN-ID 0)
rtl871x_set_key_ops
rtl871x_set_beacon_ops
rtl871x_set_hidden_ssid ignore_broadcast_ssid:0, KITT,4
rtl871x_set_acl
wlan0: Setup of interface done.
gnychis
fonte
Se você está tendo problemas hostapdpara rodar via init.d( service hostapd start) e nada parece estar ocorrendo ... consulte esta postagem no fórum .

Respostas:

14

Tudo o que você precisa fazer é escrever este comando:

sudo hostapd -d /etc/hostapd/hostapd.conf

ele listará todos os erros, você poderá corrigi-los no hostapd.confarquivo

sudo nano /etc/hostapd/hostapd.conf
Salah laaroussi
fonte
14

você precisa configurar:

sudo nano /etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Encontre a linha acima e diga à configuração padrão onde está a sua.

Matt
fonte
11

Este foi um problema para mim também e obviamente ainda existe. Corrigi os erros removendo o hostapd de /etc/rc2.d/ e /etc/networking/if-pre-up.d/

/ etc / network / interfaces controla o hostapd agora ..

iface wlan0 inet static
         post-up /usr/sbin/hostapd -B /etc/hostapd/hostapd.conf
         post-up service isc-dhcp-server restart
         address 192.168.10.1
         netmask 255.255.255.0

Uma reinicialização confirmou que abre a interface; e estações conectam bem. Anteriormente, eu tinha que ssh e parar o isc e o hostapd e fazer o que o post-up agora faz (nessa ordem)

Sir_Scofferoff
fonte
@ Lordvlad está mais correto, eu tinha perdido a configuração DAEMON_CONF, e é por isso que a opção -B funcionou para mim.
Sir_Scofferoff
'Correto' é o que funciona, e este funciona no systemd, evitando claramente um monte de outros problemas que os outros não resolvem.
John Mee
1
@ Tomoma, na verdade, @ lordvlad está incorreto se você seguir as instruções típicas do hostapd e definir DAEMON_CONF /etc/defaults/hostapdcomo @Matt (não eu) sugere em outra resposta (em vez de colocá-lo de maneira hackily /etc/init.d/hostapdcomo sugere vlad). Dito isto, sua resposta específica aqui aborda uma condição de corrida que existe mesmo depois que DAEMON_CONF é definido, o que é mais um bug na maneira como os scripts de inicialização do hostapd são implementados. Então, obrigado por isso!!
Matt
1
Esta é a única maneira que eu poderia fazê-lo funcionar no raspbian, rpi3. E isso com mais de 15 anos de experiência em unix. O Systemd foi seqüestrado start-stop-daemone faz um trabalho de baixa qualidade ao iniciar um daemon sysv (udhcpd e hostapd). Eu não tenho idéia do que poderia estar errado, porque no que diz respeito ao systemd, ele fez seu trabalho (e o daemon "saiu"). Portanto, se você tiver um post-up, use-o.
precisa
3

Acabei de encontrar este problema. Por instalação padrão no meu raspian wheezy, o hostapd é iniciado como S01 nos serviços. Isso faz com que seja iniciado antes do ifplugdqual configura eth0 e wlan0. A razão para isso é que S01h[ostapd]< S01i[fplugd]como os scripts são classificados em ordem alfabética para execução.

Eu acho que a ponte fica difícil de configurar antes de tudo. Mover para S05 também não ajudou, então mudei para rc.local, que é executado "um tempo" depois de todo o resto. Também removi todos os links de rc [2-5] .d para hostapd. Eu acho que S05 ainda é muito cedo para o dhclient terminar corretamente. Não tenho certeza se isso está de acordo com as melhores práticas. O que parece acontecer agora é que o ifplugd não br0aparece, mas eth0é mais cooperativo. Não sei por que o wpa_supplicant falha aqui, provavelmente porque wlan0já foi prometido br0. Ele precisa ser desativado de qualquer maneira. Mais tarde, o hostapd tenta br0abrir novamente e consegue, pois eth0está tudo bem e ninguém assumiu o controle wlan0.

Há outra configuração possível em que você pode especificar uma opção post-up/ pre-downpara br0em /etc/network/interfaces(interfaces de homem). Você pode começar / parar a hostapdpartir daí. No entanto, não consegui fazê-lo funcionar, mas isso parece uma solução muito mais limpa.

Eric
fonte
1

Eu acho que o problema está com suas citações na linha 11 de /etc/default/hostapd:

”/etc/hostapd/hostapd.conf”

O que deve ler:

"/etc/hostapd/hostapd.conf"

Sua postagem realmente me ajudou a resolver meu problema, então obrigado!

Bart Joosten
fonte
1

Você precisa definir DAEMON_CONFno /etc/init.d/hostpad.

É realmente bastante óbvio se você olhar /etc/init.d/hostapd, o padrão é assim:

...
14 PATH=/sbin:/bin:/usr/sbin:/usr/bin
15 DAEMON_SBIN=/usr/sbin/hostapd
16 DAEMON_DEFS=/etc/default/hostapd
17 DAEMON_CONF=
18 NAME=hostapd
19 DESC="advanced IEEE 802.11 management"
20 PIDFILE=/var/run/hostapd.pid
21
22 [ -x "$DAEMON_SBIN" ] || exit 0
23 [ -s "$DAEMON_DEFS" ] && . /etc/default/hostapd
24 [ -n "$DAEMON_CONF" ] || exit 0
...

porque DAEMON_CONFestá vazio para começar, o script sai na linha 24. Pena que não há mensagem de erro ou algo assim. Alterando a linha 17 para

 DAEMON_CONF=/etc/hostapd/hostapd.conf

e colocar a configuração no arquivo especificado funcionou para mim.

lordvlad
fonte
1
Se alguém seguiu as instruções de instalação típicas do hostapd, esta resposta está incorreta e provavelmente confusa. A linha 23 puxa variáveis ​​definidas no arquivo referenciado por DAEMON_DEFS, que por sua vez normalmente possui DAEMON_CONF definido nele. Portanto, esse script só sairá na linha 24 se DAEMON_CONF não estiver definido em nenhum /etc/init.d/hostapd(que você digitou incorretamente como hostPAD em sua primeira linha) nem /etc/defaults/hostapd.
Matt
0

No Arch linux, onde systemd parece ser a norma sobre o rc / init.d, tive um problema semelhante. Esta resposta difere das outras das seguintes maneiras:

  1. O arquivo de configuração não reside, /etc/init.dmas em algum lugar abaixo /etc/systemd/system/. Especificamente /etc/systemd/system/multi-user.target.wants/hostapd, no meu caso, onde a ExecStartlinha aponta para o arquivo de configuração usado.

  2. É importante ressaltar que esse arquivo de configuração também aponta para o binário usado, a saber /usr/bin/hostapd.

A correção é verificar o arquivo hostapd que você está realmente executando. A execução whereisinformará quais versões estão disponíveis e onde elas estão localizadas. tão

whereis hostapd

produz algo como

/sbin/hostapd /usr/bin/hostapd /usr/local/bin/hostapd

O teste de cada um chamando sistematicamente PATH/hostapd /etc/hostapd/hostapd.confcada um PATHidentifica qual deles você está realmente chamando e qual sistema está chamando. Novamente, no meu caso, o último caminho é o que eu estava invocando quando entrei sudo hostapd /etc/hostapd/hostapd.conf. O segundo é o que systemd estava invocando.

O truque é copiar o binário a partir /usr/bin/localde /usr/binou para ponto systemd ao hostapd de trabalho. Eu acredito que o primeiro é a opção "mais segura".

sudo mv /usr/bin/hostapd /usr/bin hostapd.bkp     # delete later as necessary
sudo cp /usr/local/bin/hostapd /usr/bin

Novamente, no meu caso, o binário abaixo /usr/bin/localveio da compilação do driver Realtek a partir da fonte do site, conforme descrito aqui . Parabéns à Realtek por oferecer suporte ao Linux.

Espero que isso ajude, não seja específico do meu sistema (Arch (Arm) Linux em um Raspberry Pi B)) e seja qualificado como uma resposta adequada de acordo com as regras da UE.

Carel
fonte
0

Adicionar 10 segundos de suspensão no arquivo /etc/init.d/hostapdcorrigiu o problema para mim.

1) sudo nano /etc/init.d/hostapd 2) Adicione a seção sleepem start)como abaixo

case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        sleep 10
        start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \
                --pidfile "$PIDFILE" -- $DAEMON_OPTS >/dev/null
        log_end_msg "$?"
        ;;
junaid
fonte