IEEE 802.11a(5 GHz)で実行するように構成されている場合、システムの起動時にhostapd
でアクセスポイントを作成するのに多くの問題があります。コマンドラインから手動で実行するか、IEEE 802.11g(2.4 GHz)で実行すると、問題なく動作します。起動時にAPを作成しようとした場合にのみ、失敗します。
まず、詳細をお伝えします。
uname
出力については以下を参照)_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
を手動で開始する場合にも当てはまります。
これが私の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
に_/var/log/hostapd_log
_に書き込むように指示しました。起動時にもう一度APを上げようとしましたが、ログファイルから読み取ったものは次のとおりです(全体で約500行でした)。
/etc/hostapd/hostapd.cfg
_)を使用しますchannel=acs_survey
_)。nl80211
_)は、失敗したフレームコマンドを報告します(ret=-22 (Invalid argument)
)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)
_
とにかくアクティブではないと思いますか?
802.11aモードで実行するように設定され、起動時に開始されたときにhostapd
がアクセスポイントの作成に失敗するのに、起動が完了してまったく同じコマンドが手動で実行された後、アクセスポイントの作成に成功するのはなぜですか。私がやろうとしていることを達成するために私は何をしなければなりませんか?
私が作成しようとしているようなAPを正常に作成した人はいますか?ヒントはありますか?
さらに詳細が必要な場合は、喜んで提供させていただきます。
よろしくお願いします
Hostapdのバグのようです。 hostapdサービスに次の設定を使用して、自動的に再起動します。
[Service]
Restart=on-failure
RestartSec=30
# hostapd fails with exit code 0 when ACS is enabled
RestartForceExitStatus=0
(systemctl edit hostapd
で追加できます)