hostapd sẽ không bắt đầu thông qua dịch vụ trên mạng - nhưng sẽ bắt đầu trực tiếp


19

Tôi gặp khó khăn khi hostapdbắt đầu như một dịch vụ. Nó thất bại khi tôi cố gắng khởi động nó:

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

Theo những gì tôi hiểu, điều này sử dụng cấu hình trong /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"

Tập tin cấu hình daemon của tôi như sau:

$ 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

Mặc dù dịch vụ không khởi động, tôi có thể tự khởi động trực tiếp mà không gặp lỗi:

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

Nếu bạn gặp sự cố khi hostapdchạy qua init.d( service hostapd start) và dường như không có gì xảy ra ... hãy tham khảo bài đăng trên diễn đàn này .

Câu trả lời:


14

Tất cả những gì bạn phải làm là viết lệnh này:

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

nó sẽ liệt kê cho bạn tất cả các lỗi, sau đó bạn có thể sửa chúng trong hostapd.conftệp

sudo nano /etc/hostapd/hostapd.conf

14

bạn phải cấu hình:

sudo nano /etc/default/hostapd

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

Tìm dòng trên và cho biết cấu hình defaul nơi bạn đang ở.


11

Đây cũng là một vấn đề đối với tôi và rõ ràng vẫn còn tồn tại. Tôi đã sửa lỗi bằng cách xóa hostapd khỏi /etc/rc2.d//etc/networking/if-pre-up.d/

/ etc / mạng / giao diện điều khiển hostapd ngay bây giờ ..

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

Một khởi động lại xác nhận nó mang lại giao diện; và các trạm kết nối tốt. Trước đây tôi đã phải ssh vào và dừng ISChostapd và làm những gì mà hậu lên bây giờ không (theo thứ tự đó)


@lordvlad thì đúng hơn, tôi đã bỏ lỡ cài đặt DAEMON_CONF, đó là lý do tại sao tùy chọn -B hoạt động với tôi.
Sir_Scofferoff 6/2/2016

"Chính xác" là những gì hoạt động, và cái này hoạt động trên systemd, gọn gàng vượt qua một loạt các vấn đề khác mà những người khác không giải quyết.
John Mee

1
@Teoma, thực ra @lordvlad không chính xác nếu bạn làm theo các hướng dẫn lưu trữ thông thường và đặt DAEMON_CONF thành @Matt /etc/defaults/hostapd(không phải tôi) gợi ý trong một câu trả lời khác (thay vì đưa nó vào /etc/init.d/hostapdnhư vlad gợi ý). Điều đó nói rằng, câu trả lời cụ thể của bạn ở đây giải quyết một điều kiện cuộc đua tồn tại ngay cả sau khi DAEMON_CONF được đặt, đó là một lỗi trong cách các tập lệnh khởi động của hostapd được thực thi hơn bất cứ điều gì. Vì vậy, cảm ơn bạn vì điều đó!!
matt

1
Đây là cách duy nhất tôi có thể làm cho nó hoạt động trên raspbian, rpi3. Và rằng với hơn 15 năm kinh nghiệm unix. Systemd bị tấn công start-stop-daemonvà thực hiện một công việc nhảm nhí khi bắt đầu một sysv daemon (cả udhcpd và hostapd). Tôi không biết điều gì có thể sai, vì cho đến khi systemd thực hiện thì đó là công việc (và daemon "đã thoát"). Vì vậy, nếu bạn có post-up, sử dụng nó.
Melvyn

3

Tôi chỉ gặp vấn đề này. Theo mặc định, cài đặt trên raspian wheezy của tôi, hostapd được bắt đầu là S01 trong các dịch vụ. Điều này làm cho nó bắt đầu trước khi ifplugdcấu hình eth0 và wlan0. Lý do cho điều này là S01h[ostapd]< S01i[fplugd]vì các tập lệnh được sắp xếp theo thứ tự bảng chữ cái để thực thi.

Tôi nghĩ rằng cây cầu có một thời gian khó khăn để được cấu hình trước mọi thứ khác. Chuyển nó sang S05 cũng không giúp được gì nên tôi đã chuyển nó sang RC.local thay vào đó, nó được thực thi "một lúc" sau mọi thứ khác. Tôi cũng xóa tất cả các liên kết từ RC [2-5] .d đến hostapd. Tôi nghĩ rằng S05 vẫn còn quá sớm để dhclient hoàn thành đúng cách. Tôi không chắc chắn điều này là theo các thực tiễn tốt nhất. Điều dường như xảy ra bây giờ là ifplugd không mang lại br0nhưng eth0hợp tác hơn. Tôi không chắc tại sao wpa_supplicant thất bại ở đây, có lẽ vì wlan0đã được hứa br0. Nó cần phải được vô hiệu hóa nào. Sau đó, hostapd cố gắng đưa br0ra một lần nữa và thành công vì eth0nó ổn và không ai nắm quyền kiểm soát wlan0.

Còn có một cấu hình tốt, nơi bạn có thể chỉ định một post-up/ pre-downtùy chọn cho br0trong /etc/network/interfaces(giao diện người đàn ông). Bạn có thể bắt đầu / dừng lại hostapdtừ đó. Tôi đã không quản lý để làm cho nó hoạt động, nhưng đây có vẻ là một giải pháp sạch hơn nhiều.


1

Tôi nghĩ vấn đề là do trích dẫn của bạn trên dòng 11 của /etc/default/hostapd:

”/etc/hostapd/hostapd.conf”

Nên đọc:

"/etc/hostapd/hostapd.conf"

Bài viết của bạn thực sự đã giúp tôi giải quyết vấn đề của mình, cảm ơn!


1

Bạn cần phải thiết lập DAEMON_CONFtrong /etc/init.d/hostpad.

Nó thực sự khá rõ ràng nếu bạn nhìn vào /etc/init.d/hostapd, mặc định trông như thế này:

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

bởi vì DAEMON_CONFtrống để bắt đầu, tập lệnh thoát ở dòng 24. Quá tệ không có thông báo lỗi hoặc bất cứ điều gì. Thay đổi dòng 17 thành

 DAEMON_CONF=/etc/hostapd/hostapd.conf

và đặt cấu hình trong tệp được chỉ định làm việc cho tôi.


1
Nếu một người đã làm theo các hướng dẫn cài đặt điển hình cho hostapd, câu trả lời này không chính xác và có thể gây nhầm lẫn. Dòng 23 kéo các biến được xác định trong tệp được tham chiếu bởi DAEMON_DEFS, do đó thường có DAEMON_CONF được xác định trong đó. Do đó, tập lệnh này sẽ chỉ thoát ở dòng 24 nếu DAEMON_CONF được xác định trong cả /etc/init.d/hostapd(mà bạn đã viết sai chính tả là hostPAD trong dòng đầu tiên của bạn) cũng không /etc/defaults/hostapd.
matt

0

Trên Arch linux, trong đó systemd dường như là chuẩn mực so với RC / init.d Tôi gặp vấn đề tương tự. Câu trả lời này khác với các câu hỏi khác theo các cách sau:

  1. Các tập tin cấu hình không nằm trong /etc/init.dnhưng ở đâu đó bên dưới /etc/systemd/system/. Cụ thể /etc/systemd/system/multi-user.target.wants/hostapd, trong trường hợp của tôi, nơi ExecStartdòng chỉ đến tệp cấu hình được sử dụng.

  2. Điều quan trọng là tập tin cấu hình này cũng trỏ đến nhị phân được sử dụng, cụ thể là /usr/bin/hostapd.

Cách khắc phục sau đó là kiểm tra tập tin hostapd nào bạn đang thực sự thực thi. chạy whereissẽ cho bạn biết phiên bản nào có sẵn và vị trí của chúng. Vì thế

whereis hostapd

sản xuất một cái gì đó như

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

Kiểm tra từng cái bằng cách gọi một cách có hệ thống PATH/hostapd /etc/hostapd/hostapd.confcho từng cái PATHxác định cái nào bạn thực sự gọi và cái nào được gọi. Một lần nữa trong trường hợp của tôi, con đường cuối cùng là thứ tôi đã gọi khi tôi đấm vào sudo hostapd /etc/hostapd/hostapd.conf. Cái thứ hai là những gì systemd đã gọi.

Bí quyết là sao chép nhị phân từ /usr/bin/localđến /usr/binhoặc trỏ systemd vào hostapd đang hoạt động. Tôi tin rằng trước đây là tùy chọn "an toàn hơn".

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

Một lần nữa trong trường hợp của tôi, nhị phân dưới /usr/bin/localxuất phát từ việc biên dịch trình điều khiển Realtek từ nguồn ra khỏi trang web của họ như được mô tả ở đây . Làm tốt cho Realtek vì đã hỗ trợ Linux.

Hy vọng điều này sẽ giúp, không cụ thể đối với hệ thống của tôi (Arch (Arm) Linux trên Raspberry Pi B) và đủ điều kiện là một câu trả lời phù hợp theo quy tắc của UE.


0

Thêm 10 giây ngủ trong tập tin đã /etc/init.d/hostapdkhắc phục vấn đề cho tôi.

1) sudo nano /etc/init.d/hostapd 2) Thêm phần sleeptrong start)như dưới đây

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 "$?"
        ;;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.