dnsmasq は BeagleBone Black (Debian 8.5) 上のネットワーク システムの再起動を必要とします。

dnsmasq は BeagleBone Black (Debian 8.5) 上のネットワーク システムの再起動を必要とします。

現在、Debian 8.5 を実行している BeagleBone Black を WiFi アクセス ポイントとして設定しようとしています。使用するプログラムはhostapdと ですdnsmasq。大きな進歩を遂げました。アクセス ポイントは原理的には意図したとおりに動作しています (接続して Lighty がホストする Web サイトにアクセスできます) が、ちょっとした問題があります。再起動後、dnsmasqwlan0 にアドレスがないというエラーが表示されるため、接続できません。

抜粋/var/log/syslog

Jun 24 12:01:03 arm dnsmasq[487]: warning: interface wlan0 does not currently exist
Jun 24 12:01:03 arm dnsmasq-dhcp[487]: DHCP, IP range 192.168.3.20 -- 192.168.3.200, lease time infinite
Jun 24 12:01:53 arm dnsmasq-dhcp[487]: DHCP packet received on wlan0 which has no address

ネットワーク システムを再起動すると/etc/init.d/networking restart、上記のようにすべて正常に動作します。再起動dnsmasqまたは呼び出しを行ってもifup wlan0問題は解決しません。ログに基づいて、何らかのタイミングの問題があると思われます (つまり、USB WiFi スティックが dnsmasq の起動後に認識されるなど) が、解決方法がわかりません。追加しましたallow-hotplug wlan0/etc/network/interfaces、何も変わりませんでした。

/etc/network/interfaces を除く:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.3.1

私のは/etc/dnsmasq.confかなり基本的なものです:

# Disable DNS
port=0
interface=wlan0
no-dhcp-interface=eth0
dhcp-range=interface:wlan0,192.168.3.20,192.168.3.200,infinite

編集:

ランニングifconfig wlan0 192.168.3.1も効果的です。

答え1

dnsmasq を再起動する必要があるかどうかを確認する if-up スクリプトを作成できます。

/etc/network/if-up.d/dnsmasq:

#!/bin/sh
[ "$IFACE" != "lo" ] || exit 0

restartDnsMasq() {
    if [ -d /run/systemd/system ]; then
        systemctl reload --no-block dnsmasq >/dev/null 2>&1 || true
    else
        invoke-rc.d dnsmasq restart >/dev/null 2>&1 || true
    fi
}

# Find out if dnsmasq is configured to run on a single interface
interface=$(cat /etc/dnsmasq.conf | grep interface | awk -F '=' '{print $2}')
if  [ "x${interface}" = "x" ]; then
    # all interfaces
    logger DnsMasq not configured for any particular interface, restarting because $IFACE came up.
    restartDnsMasq
else
    if [ "${interface}" = "$IFACE" ]; then
        # The interface that dnsmasq is running on is being brought up
        logger DnsMasq configured for interface ${interface}, restarting because $IFACE came up.
        restartDnsMasq
    else
        logger DnsMasq configured for interface ${interface}, not restarting because $IFACE came up.
    fi 
fi

関連情報