web-dev-qa-db-ja.com

IEEE 802.11a(5Ghz)のhostapdが起動時に起動しないのはなぜですか?

IEEE 802.11a(5 GHz)で実行するように構成されている場合、システムの起動時にhostapdでアクセスポイントを作成するのに多くの問題があります。コマンドラインから手動で実行するか、IEEE 802.11g(2.4 GHz)で実行すると、問題なく動作します。起動時にAPを作成しようとした場合にのみ、失敗します。

まず、詳細をお伝えします。

システム環境

  • Debian 8.9(Jessie)64ビット(uname出力については以下を参照)
  • Wifiアダプターは、Atheros AR9280/AR5B95チップセットを搭載したAzurewaveAW-NE785Hです(802.11aと802.11gの両方をサポートし、AP対応です)

_uname -a_は次を生成します:Linux HOSTNAME 3.16.0-4-AMD64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux

私がやろうとしていること

802.11aモード(5 GHz)で実行され、システムの起動時に開始されるアクセスポイント(AP)を作成しようとしています。

問題は何ですか

問題は、システムの起動時にAPが作成されないことですが、実際には起動時に実行されるinitスクリプトが_/etc/init.d_にあります。さらに奇妙なことに、APをIEEE 802.11gモード(2.4 GHz)で実行しようとすると、すべてが正常に機能し、システムの起動時にAPが起動します。同じことが、_service hostapd start_または_hostapd <my-config-file>_のいずれかを使用してhostapdを手動で開始する場合にも当てはまります。

私がこれまでに見つけたもの/ logs/config

これが私のhostapd設定ファイル(_/etc/hostapd/hostapd.cfg_)です:

_interface=wlan0
driver=nl80211

country_code=DE
ieee80211n=1
ieee80211ac=1
wmm_enabled=1

ssid=MYSSID
hw_mode=a
channel=acs_survey
macaddr_acl=0
auth_algs=1

ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=supersecretpassphrasehere
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

dump_file=/tmp/hostapd.dump

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
_

これが私のinitスクリプトです(_/etc/init.d/hostapd_):

_#!/bin/sh

### BEGIN INIT INFO
# Provides:     hostapd
# Required-Start:   $remote_fs $network $syslog
# Required-Stop:    $remote_fs $network $syslog
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
# Short-Description:    Advanced IEEE 802.11 management daemon
# Description:      Userspace IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP
#           Authenticator
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON_SBIN=/usr/sbin/hostapd
DAEMON_DEFS=/etc/default/hostapd
DAEMON_CONF=/etc/hostapd/hostapd.cfg
NAME=hostapd
DESC="advanced IEEE 802.11 management"
PIDFILE=/run/hostapd.pid
LOGFILE=/var/log/hostapd_log

[ -x "$DAEMON_SBIN" ] || exit 0
[ -s "$DAEMON_DEFS" ] && . /etc/default/hostapd
[ -n "$DAEMON_CONF" ] || exit 0

DAEMON_OPTS="-dd -f $LOGFILE -B -P $PIDFILE $DAEMON_OPTS $DAEMON_CONF"

. /lib/lsb/init-functions

case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAME"
    start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \
        --pidfile "$PIDFILE" -- $DAEMON_OPTS >/dev/null
    log_end_msg "$?"
    ;;
  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"
    start-stop-daemon --stop --oknodo --quiet --exec "$DAEMON_SBIN" \
        --pidfile "$PIDFILE"
    log_end_msg "$?"
    ;;
  reload)
    log_daemon_msg "Reloading $DESC" "$NAME"
    start-stop-daemon --stop --signal HUP --exec "$DAEMON_SBIN" \
        --pidfile "$PIDFILE"
    log_end_msg "$?"
    ;;
  restart|force-reload)
    $0 stop
    sleep 8
    $0 start
    ;;
  status)
    status_of_proc "$DAEMON_SBIN" "$NAME"
    exit $?
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|force-reload|reload|status}" >&2
    exit 1
    ;;
esac

exit 0
_

hostapdログファイル

ご覧のとおり、私はhostapdに_/var/log/hostapd_log_に書き込むように指示しました。起動時にもう一度APを上げようとしましたが、ログファイルから読み取ったものは次のとおりです(全体で約500行でした)。

  1. hostapdは予想される設定ファイル(_/etc/hostapd/hostapd.cfg_)を使用します
  2. hostapdは、期待どおりに国/規制ドメインをDEに設定します
  3. hostapdは期待どおりに自動チャネル選択を開始します(_channel=acs_survey_)。
    • ここで問題が発生しているようです。ドライバ(_nl80211_)は、失敗したフレームコマンドを報告します(ret=-22 (Invalid argument)
  4. 5ACS調査スキャンはエラーメッセージなしで実行されます
  5. ACSは以下のメッセージで失敗し、それだけです。

ACSに障害が発生した場合のログメッセージは次のとおりです。

_ACS: Trying survey-based ACS
ACS: Unable to collect survey data
ACS: All study options have failed
Interface initialization failed
wlan0: interface state ACS->DISABLED
wlan0: AP-DISABLED 
ACS: Possibly channel configuration is invalid, please report this along with your config file.
ACS: Failed to start
wlan0: AP-DISABLED 
wlan0: Deauthenticate all stations
[cut some lines here]
hostapd_free_hapd_data: Interface wlan0 wasn't started
[cut some more lines here]
Interface wlan0 disabled
_

_service hostapd start_を(何も触れずに)実行すると、APが起動し、ACSが正常に機能していることがわかります(チャネル40を選択します)。

グーグル

もちろん、私は自分の問題の解決策をたくさんググった。ブートプロセス自体やシステムサービスが相互に干渉しているという問題に絞り込んだと思います。私がそこから得た唯一のヒントは、_wpa_supplicant_を無効にすることです(私が見つけたヒントは、その人が_wpa_supplicant_ および他の干渉サービスを無効にすることで問題を解決したと述べています。悲しいことに、彼らは決して彼らが無効にした他のサービスについて言及した。

_systemctl status wpa_supplicant_を実行すると、次の出力が得られました。

_● wpa_supplicant.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
_

とにかくアクティブではないと思いますか?

TL; DR

802.11aモードで実行するように設定され、起動時に開始されたときにhostapdがアクセスポイントの作成に失敗するのに、起動が完了してまったく同じコマンドが手動で実行された後、アクセスポイントの作成に成功するのはなぜですか。私がやろうとしていることを達成するために私は何をしなければなりませんか?

私が作成しようとしているようなAPを正常に作成した人はいますか?ヒントはありますか?

さらに詳細が必要な場合は、喜んで提供させていただきます。

よろしくお願いします

2
steps0x29a

Hostapdのバグのようです。 hostapdサービスに次の設定を使用して、自動的に再起動します。

[Service]
Restart=on-failure
RestartSec=30
# hostapd fails with exit code 0 when ACS is enabled
RestartForceExitStatus=0

systemctl edit hostapdで追加できます)

0
xuhcc