hostapd не запускается через «сервис» - но запускается напрямую


19

У меня проблемы hostapdс началом работы в качестве службы. Не удается, когда я пытаюсь запустить его:

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

Из того, что я понимаю, это использует конфигурацию в /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"

Мой файл конфигурации демона выглядит следующим образом:

$ 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

Несмотря на то, что служба не запускается, я могу запустить ее самостоятельно без ошибок:

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

Если у вас возникли проблемы hostapdс запуском через init.d( service hostapd start) и кажется, что ничего не происходит ... обратитесь к этому сообщению на форуме .

Ответы:


14

Все, что вам нужно сделать, это написать эту команду:

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

в нем будут перечислены все ошибки, вы можете исправить их в hostapd.confфайле

sudo nano /etc/hostapd/hostapd.conf

14

Вы должны настроить:

sudo nano /etc/default/hostapd

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

Найдите строку выше и сообщите конфигурации по умолчанию, где находится ваша.


11

Это было проблемой для меня и, очевидно, все еще существует. Я исправил ошибки, удалив hostapd из /etc/rc2.d/ и /etc/networking/if-pre-up.d/

/ etc / network / interfaces теперь управляет 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

Перезагрузка подтвердила, что вызывает интерфейс; и станции подключаются нормально. Раньше я был SSH и остановить ISC и hostapd и делать то , что вверх пост теперь делает (в таком порядке)


@lordvlad более правильно, я пропустил настройку DAEMON_CONF, поэтому опция -B у меня сработала.
Sir_Scofferoff

«Правильно» - это то, что работает, и этот работает на systemd, аккуратно обходя кучу других проблем, которые другие не решают.
Джон Ми

1
@Teoma, на самом деле @lordvlad является неправильным , если вы будете следовать инструкциям типичные hostapd и множество DAEMON_CONF в /etc/defaults/hostapdкачестве @ Matt (не я) предлагает в другой ответ (а не hackily положить его в /etc/init.d/hostapdкак предполагает влад). Тем не менее, ваш конкретный ответ здесь касается состояния гонки, которое существует даже после того, как DAEMON_CONF установлен, что является скорее ошибкой в ​​том, как реализуются сценарии запуска hostapd, чем чем-либо еще. Итак, спасибо за это!
матовый

1
Это единственный способ заставить его работать на Rasbian, rpi3. И это с> 15-летним опытом работы в Unix. Systemd угнал start-stop-daemonи делает дрянную работу при запуске демона sysv (как udhcpd, так и hostapd). Я понятия не имею, что может быть не так, потому что, насколько идет systemd, он сделал свою работу (и демон "вышел"). Так что, если у вас есть пост-ап, используйте его.
Мелвин

3

Я просто столкнулся с этой проблемой. По умолчанию устанавливается на моем raspian wheezy, hostapd запускается как S01 в ​​сервисах. Это заставляет его запускаться до того, как ifplugdнастроить eth0 и wlan0. Причина этого заключается в том, что S01h[ostapd]< S01i[fplugd]сценарии сортируются в алфавитном порядке для выполнения.

Я думаю, что мосту тяжело настраиваться раньше всего остального. Перемещение на S05 тоже не помогло, поэтому я переместил его на rc.local, который выполняется через некоторое время после всего остального. Я также удалил все ссылки с rc [2-5] .d на hostapd. Я думаю, что S05 еще слишком рано, чтобы dhclient смог закончить правильно. Я не уверен, что это в соответствии с лучшими практиками. Похоже, что сейчас происходит то, что ifplugd не может быть запущен, br0но eth0более готов к сотрудничеству. Я не уверен, почему wpa_supplicant терпит неудачу здесь, вероятно, потому что wlan0это уже обещано br0. Это должно быть отключено в любом случае. Позже, hostapd пытается br0снова подняться и преуспевает, так eth0как все в порядке, и никто не взял контроль над ним wlan0.

Существует другая возможная конфигурация, где вы можете указать параметр post-up/ pre-downдля br0in /etc/network/interfaces(man interfaces). Вы можете начать / остановить hostapdоттуда. Однако мне не удалось заставить его работать, но это выглядит намного более чистым решением.


1

Я думаю, что проблема с вашими цитатами в строке 11 из /etc/default/hostapd:

”/etc/hostapd/hostapd.conf”

Который должен читать:

"/etc/hostapd/hostapd.conf"

Ваш пост фактически помог мне решить мою проблему, так что спасибо!


1

Вы должны установить DAEMON_CONFв /etc/init.d/hostpad.

Это действительно довольно очевидно, если вы посмотрите на /etc/init.d/hostapd, по умолчанию выглядит так:

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

Поскольку DAEMON_CONFдля начала пусто, скрипт завершается в строке 24. Жаль, что нет сообщения об ошибке или чего-то еще. Изменение строки 17 на

 DAEMON_CONF=/etc/hostapd/hostapd.conf

и установка конфигурации в указанном файле работала для меня.


1
Если кто-то выполнил типичные инструкции по установке hostapd, этот ответ неверен и может привести к путанице. Строка 23 извлекает переменные, определенные в файле, на который ссылается DAEMON_DEFS, который, в свою очередь, обычно имеет в нем DAEMON_CONF. Таким образом, этот сценарий завершится только в строке 24, если DAEMON_CONF не определен ни в /etc/init.d/hostapd(который вы ошибочно указали как hostPAD в первой строке), ни в /etc/defaults/hostapd.
матовый

0

На Arch Linux, где systemd кажется нормой над rc / init.d, у меня была похожая проблема. Этот ответ отличается от других следующими способами:

  1. Файл конфигурации не находится, /etc/init.dно где-то под /etc/systemd/system/. В частности /etc/systemd/system/multi-user.target.wants/hostapd, в моем случае, где ExecStartстрока указывает на используемый файл конфигурации.

  2. Важно, что этот файл конфигурации также указывает на используемый двоичный файл, а именно /usr/bin/hostapd.

Затем исправьте, чтобы проверить, какой файл hostapd вы на самом деле выполняете. Running whereisпокажет вам, какие версии доступны и где они находятся. Так

whereis hostapd

производит что-то вроде

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

Тестирование каждого путем систематического вызова PATH/hostapd /etc/hostapd/hostapd.confкаждого PATHидентифицирует, какой из них вы на самом деле вызываете, а какой вызывает systemd. Опять же, в моем случае последний путь - это то, что я использовал, когда пробивал sudo hostapd /etc/hostapd/hostapd.conf. Второй - это то, что вызывал systemd.

Хитрость заключается в том, чтобы скопировать двоичный файл /usr/bin/localв /usr/binили точку Systemd к рабочему hostapd. Я считаю, что первый вариант является «более безопасным».

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

Опять же, в моем случае двоичный файл /usr/bin/localбыл получен в результате компиляции драйвера Realtek из исходного кода сайта, как описано здесь . Молодцы Realtek за поддержку Linux.

Надеюсь, это поможет, не относится к моей системе (Arch (Arm) Linux на Raspberry Pi B) и считается подходящим ответом в соответствии с правилами UE.


0

Добавление 10 секунд сна в файл /etc/init.d/hostapd исправило проблему для меня.

1) sudo nano /etc/init.d/hostapd 2) Добавьте sleepв start)раздел, как показано ниже

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 "$?"
        ;;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.