hostapd startet nicht über "service" - sondern direkt

19

Ich habe Probleme, hostapdals Dienst zu beginnen. Es schlägt fehl, wenn ich versuche, es zu starten:

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

Soweit ich weiß, verwendet dies die Konfiguration in /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"

Meine Daemon-Konfigurationsdatei sieht wie folgt aus:

$ 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

Obwohl der Dienst nicht gestartet werden konnte, kann ich ihn ohne Fehler direkt selbst starten:

$ 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
quelle
Wenn Sie Probleme haben, hostapdüber init.d( service hostapd start) ausgeführt zu werden, und anscheinend nichts auftritt, lesen Sie diesen Forumsbeitrag .

Antworten:

14

Alles was Sie tun müssen, ist diesen Befehl zu schreiben:

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

Es listet alle Fehler auf und Sie können sie in der hostapd.confDatei korrigieren

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

Sie müssen konfigurieren:

sudo nano /etc/default/hostapd

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

Suchen Sie die obige Zeile und teilen Sie der Standardkonfiguration mit, wo sich Ihre befindet.

Matt
quelle
11

Das war auch für mich ein Problem und ist offensichtlich noch vorhanden. Ich habe die Fehler behoben, indem ich hostapd aus /etc/rc2.d/ und /etc/networking/if-pre-up.d/ entfernt habe.

/ etc / network / interfaces steuert jetzt hostapd.

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

Ein Neustart hat bestätigt, dass die Schnittstelle aufgerufen wird. und Stationen verbinden gut. Früher musste ich ssh in und isc und hostapd stoppen und tun, was das Post-Up jetzt macht (in dieser Reihenfolge)

Sir_Scofferoff
quelle
@lordvlad ist korrekter, ich hatte die Einstellung DAEMON_CONF verpasst, weshalb die Option -B für mich funktioniert hat.
Sir_Scofferoff
"Richtig" funktioniert, und dieses funktioniert auf systemd, wobei es eine Reihe anderer Probleme überspringt, die die anderen nicht lösen.
John Mee
1
@Teoma, tatsächlich ist @lordvlad falsch, wenn Sie den typischen Anweisungen von hostapd folgen und DAEMON_CONF /etc/defaults/hostapdso einstellen, wie @Matt (nicht ich) es in einer anderen Antwort vorschlägt (anstatt es hacker einzutragen, /etc/init.d/hostapdwie vlad es vorschlägt). Ihre spezielle Antwort hier geht jedoch auf eine Race-Bedingung ein, die auch nach dem Setzen von DAEMON_CONF besteht. Dies ist mehr ein Fehler bei der Implementierung der Start-Skripte von hostapd als alles andere. Also, danke dafür !!
Matt
1
Dies ist die einzige Möglichkeit, mit raspbian, rpi3, zu arbeiten. Und das mit> 15 Jahren Unix-Erfahrung. Systemd start-stop-daemonhat einen beschissenen Job beim Starten eines Sysv-Daemons gemacht (sowohl udhcpd als auch hostapd). Ich habe keine Ahnung, was falsch sein könnte, denn was das System angeht, hat es seinen Job gemacht (und der Daemon "beendet"). Also, wenn Sie post-up haben, verwenden Sie es.
Melvyn
3

Ich bin gerade auf dieses Problem gestoßen. Standardmäßig wird hostapd auf meinem Raspian Wheezy als S01 in den Diensten gestartet. Damit kann es ifplugdlosgehen, bevor eth0 und wlan0 konfiguriert werden. Der Grund dafür ist, dass S01h[ostapd]< S01i[fplugd]Skripte zur Ausführung in alphabetischer Reihenfolge sortiert werden.

Ich denke, dass es der Bridge schwer fällt, sich vor allem anderen zu konfigurieren. Das Verschieben nach S05 hat auch nicht geholfen, also habe ich es stattdessen nach rc.local verschoben, was nach allem anderen "eine Weile" ausgeführt wird. Ich habe auch alle Links von rc [2-5] .d nach entfernt hostapd. Ich denke, dass S05 noch zu früh ist, als dass dhclient es richtig beenden könnte. Ich bin nicht sicher, ob dies den Best Practices entspricht. Was jetzt zu passieren scheint, ist, dass ifplugd nicht aufruft, br0sondern eth0kooperativer ist. Ich bin mir nicht sicher, warum wpa_supplicant hier scheitert, wahrscheinlich weil wlan0es schon versprochen ist br0. Es muss sowieso deaktiviert werden. Später versucht hostapd es br0erneut und hat Erfolg, da eth0es in Ordnung ist und niemand die Kontrolle übernommen hat wlan0.

Es gibt eine andere mögliche Konfiguration, in der Sie eine post-up/ pre-down-Option für br0in /etc/network/interfaces(man-Schnittstellen) angeben können. Sie könnten hostapdvon dort aus starten / stoppen . Ich habe es jedoch nicht geschafft, es zum Laufen zu bringen, aber das sieht nach einer viel saubereren Lösung aus.

Eric
quelle
1

Ich denke, das Problem liegt in Ihren Zitaten in Zeile 11 von /etc/default/hostapd:

”/etc/hostapd/hostapd.conf”

Welches sollte lauten:

"/etc/hostapd/hostapd.conf"

Ihr Beitrag hat mir tatsächlich geholfen, mein Problem zu lösen. Vielen Dank!

Bart Joosten
quelle
1

Sie müssen festgelegt DAEMON_CONFin /etc/init.d/hostpad.

Es ist wirklich ziemlich offensichtlich, wenn man sich /etc/init.d/hostapddas anschaut. Die Standardeinstellung sieht so aus:

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

Da DAEMON_CONFes zu Beginn leer ist, wird das Skript in Zeile 24 beendet. Schade, dass keine Fehlermeldung oder etwas anderes angezeigt wird. Zeile 17 auf ändern

 DAEMON_CONF=/etc/hostapd/hostapd.conf

und das Einfügen der Konfiguration in die angegebene Datei hat bei mir funktioniert.

Lordvlad
quelle
1
Wenn man die typischen Installationsanweisungen für hostapd befolgt hat, ist diese Antwort falsch und verwirrt wahrscheinlich. In Zeile 23 werden die Variablen abgerufen, die in der Datei definiert sind, auf die DAEMON_DEFS verweist, in der wiederum normalerweise DAEMON_CONF definiert ist. Daher wird dieses Skript nur in Zeile 24 beendet, wenn DAEMON_CONF weder /etc/init.d/hostapdin der ersten Zeile (die Sie als hostPAD falsch geschrieben haben) noch in der ersten Zeile definiert ist /etc/defaults/hostapd.
Matt
0

Unter Arch Linux, wo systemd die Norm über rc / init.d zu sein scheint, hatte ich ein ähnliches Problem. Diese Antwort unterscheidet sich von den anderen in folgenden Punkten:

  1. Die Konfigurationsdatei befindet sich nicht in, /etc/init.dsondern irgendwo darunter /etc/systemd/system/. Insbesondere /etc/systemd/system/multi-user.target.wants/hostapdin meinem Fall, wo die ExecStartLinie auf die verwendete Konfigurationsdatei zeigt.

  2. Wichtig ist, dass diese Konfigurationsdatei auch auf die verwendete Binärdatei verweist, nämlich /usr/bin/hostapd.

Das Update ist dann, um zu überprüfen, welche Hostapd-Datei Sie tatsächlich ausführen. Laufen whereiswird Ihnen sagen, welche Versionen verfügbar sind und wo sie sich befinden. So

whereis hostapd

produziert so etwas wie

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

Das Testen jedes einzelnen durch systematisches Aufrufen PATH/hostapd /etc/hostapd/hostapd.confjedes einzelnen PATHidentifiziert, welches Sie tatsächlich aufrufen und welches Systemd aufruft. Wieder ist in meinem Fall der letzte Pfad, den ich angerufen habe, als ich eingedrungen bin sudo hostapd /etc/hostapd/hostapd.conf. Das zweite ist das, was systemd aufgerufen hat.

Der Trick besteht darin, die Binärdatei von /usr/bin/localnach zu kopieren /usr/binoder systemd auf das funktionierende hostapd zu verweisen. Ich glaube, ersteres ist die "sicherere" Option.

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

Auch in meinem Fall kam die Binärdatei unter /usr/bin/localvon der Kompilierung des Realtek-Treibers aus der Quelle von ihrer Website, wie hier beschrieben . Wir danken Realtek für die Unterstützung von Linux.

Hoffe das hilft, ist nicht systemspezifisch (Arch (Arm) Linux auf einem Raspberry Pi B) und qualifiziert sich als passende Antwort nach den UE-Regeln.

Carel
quelle
0

Das Hinzufügen von 10 Sekunden Schlaf in der Datei hat /etc/init.d/hostapddas Problem für mich behoben.

1) sudo nano /etc/init.d/hostapd 2) In die sleepin start)Abschnitt wie unten

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
quelle