hostapd no se iniciará a través del "servicio", sino que se iniciará directamente


19

Tengo problemas hostapdpara comenzar como servicio. Falla cuando intento iniciarlo:

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

Por lo que entiendo, esto usa la configuración en /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"

Mi archivo de configuración de daemon es el siguiente:

$ 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

A pesar de que el servicio no puede iniciarse, puedo iniciarlo directamente por mi cuenta sin error:

$ 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.

Si tiene problemas hostapdpara ejecutar via init.d( service hostapd start) y parece que no ocurre nada ... consulte esta publicación del foro .

Respuestas:


14

Todo lo que tienes que hacer es escribir este comando:

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

te mostrará todos los errores, luego puedes corregirlos en el hostapd.confarchivo

sudo nano /etc/hostapd/hostapd.conf

14

tienes que configurar:

sudo nano /etc/default/hostapd

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

Encuentra la línea de arriba y dile a la configuración predeterminada dónde está tu.


11

Esto también fue un problema para mí y obviamente todavía existe. Solucioné los errores eliminando hostapd de /etc/rc2.d/ y /etc/networking/if-pre-up.d/

/ etc / network / interfaces controla hostapd ahora ..

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

Un reinicio confirmó que muestra la interfaz; y las estaciones se conectan bien. Anteriormente tuve que entrar y parar ingresar ISC y Hostapd y hacer lo que ahora hace la publicación (en ese orden)


@lordvlad es más correcto, me había perdido la configuración DAEMON_CONF, razón por la cual la opción -B funcionó para mí.
Sir_Scofferoff

'Correcto' es lo que funciona, y este funciona en systemd, dejando de lado un montón de otros problemas que los otros no resuelven.
John Mee

1
@Teoma, en realidad @lordvlad es incorrecto si sigues las instrucciones típicas de hostapd y configuras DAEMON_CONF /etc/defaults/hostapdcomo @Matt (no para mí) sugiere en otra respuesta (en lugar de ponerlo /etc/init.d/hostapdcomo lo sugiere vlad). Dicho esto, su respuesta particular aquí aborda una condición de carrera que existe incluso después de que se establece DAEMON_CONF, que es más un error en la forma en que se implementan los scripts de inicio de hostapd que cualquier otra cosa. ¡¡Así que gracias por eso!!
mate

1
Esta es la única forma en que podría hacer que funcione en raspbian, rpi3. Y eso con más de 15 años de experiencia en Unix. Systemd secuestrado start-stop-daemony hace un trabajo horrible al iniciar un demonio sysv (tanto udhcpd como hostapd). No tengo idea de qué podría estar mal, porque en lo que respecta a systemd hizo su trabajo (y el demonio "salió"). Entonces, si tienes post-up, úsalo.
Melvyn

3

Acabo de encontrarme con este problema. Por defecto, instalar en mi raspian wheezy, hostapd se inicia como S01 en los servicios. Esto hace que comience antes de ifplugdque configure eth0 y wlan0. La razón de esto es que S01h[ostapd]< S01i[fplugd]ya que las secuencias de comandos se ordenan alfabéticamente para su ejecución.

Creo que el puente tiene dificultades para configurarse antes que todo lo demás. Moverlo a S05 tampoco ayudó, así que lo moví a rc.local, que se ejecuta "un rato" después de todo lo demás. También eliminé todos los enlaces de rc [2-5] .d a hostapd. Creo que S05 aún es demasiado pronto para que dhclient termine correctamente. No estoy seguro de que esto sea de acuerdo con las mejores prácticas. Lo que parece suceder ahora es que ifplugd no br0aparece pero eth0es más cooperativo. No estoy seguro de por qué wpa_supplicant falla aquí, probablemente porque wlan0ya se prometióbr0 . Necesita ser deshabilitado de todos modos. Más tarde, hostapd intenta volver br0a aparecer y tiene éxito, ya que eth0está bien y nadie tomó el control wlan0.

Hay otra configuración posible en la que podría especificar una opción post-up/ en (interfaces de usuario). Podrías comenzar / detenerte desde allí. Sin embargo, no pude hacerlo funcionar, pero parece una solución mucho más limpia.pre-downbr0/etc/network/interfaceshostapd


1

Creo que el problema es con sus citas en la línea 11 de /etc/default/hostapd:

”/etc/hostapd/hostapd.conf”

Que debería leer:

"/etc/hostapd/hostapd.conf"

Tu publicación realmente me ayudó a resolver mi problema, ¡así que gracias!


1

Es necesario establecer DAEMON_CONFen/etc/init.d/hostpad .

Es bastante obvio si lo analizas /etc/init.d/hostapd, el valor predeterminado se ve así:

...
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á vacío para empezar, el script sale en la línea 24. Lástima que no haya ningún mensaje de error ni nada. Cambiando la línea 17 a

 DAEMON_CONF=/etc/hostapd/hostapd.conf

y poner la configuración en el archivo especificado funcionó para mí.


1
Si uno ha seguido las instrucciones de instalación típicas para hostapd, esta respuesta es incorrecta y puede confundir. La línea 23 extrae variables definidas en el archivo al que hace referencia DAEMON_DEFS, que a su vez normalmente tiene definido DAEMON_CONF. Por lo tanto, este script solo saldrá en la línea 24 si DAEMON_CONF no está definido en ninguno /etc/init.d/hostapd(que ha escrito mal como hostPAD en su primera línea) ni /etc/defaults/hostapd.
mate

0

En Arch Linux, donde systemd parece la norma sobre rc / init.d tuve un problema similar. Esta respuesta difiere de las demás en las siguientes formas:

  1. El archivo de configuración no reside en, /etc/init.dsino en algún lugar debajo /etc/systemd/system/. Específicamente /etc/systemd/system/multi-user.target.wants/hostapd, en mi caso, donde la ExecStartlínea apunta al archivo de configuración utilizado.

  2. Es importante destacar que este archivo de configuración también apunta al binario utilizado, a saber /usr/bin/hostapd.

La solución es verificar qué archivo hostapd está ejecutando realmente. ejecutar whereisle dirá qué versiones están disponibles y dónde se encuentran. Entonces

whereis hostapd

produce algo como

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

La prueba de cada uno llamando sistemáticamente PATH/hostapd /etc/hostapd/hostapd.confa cada uno PATHidentifica cuál está invocando realmente y cuál está invocando systemd. Nuevamente, en mi caso, el último camino es el que estaba invocando cuando entré sudo hostapd /etc/hostapd/hostapd.conf. El segundo es lo que invoca systemd.

El truco consiste en copiar el binario de /usr/bin/locala /usr/bino a punto de systemd a la hostapd de trabajo. Creo que la primera es la opción "más segura".

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

Nuevamente, en mi caso, el binario debajo /usr/bin/localvino de compilar el controlador Realtek desde la fuente de su sitio web como se describe aquí . Bien hecho a Realtek por soportar Linux.

Espero que esto ayude, no es específico para mi sistema (Arch (Arm) Linux en una Raspberry Pi B) y califica como una respuesta adecuada de acuerdo con las reglas de la UE.


0

Agregar 10 segundos de suspensión en el archivo /etc/init.d/hostapdsolucionó el problema para mí.

1) sudo nano /etc/init.d/hostapd 2) Agregue la sección sleepen start)como a continuación

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 "$?"
        ;;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.