dnsmasq erfordert einen Neustart des Netzwerksystems auf BeagleBone Black (Debian 8.5)

dnsmasq erfordert einen Neustart des Netzwerksystems auf BeagleBone Black (Debian 8.5)

Ich versuche gerade, einen BeagleBone Black mit Debian 8.5 als WLAN-Zugangspunkt zu konfigurieren. Die verwendeten Programme sind hostapdund dnsmasq. Ich habe große Fortschritte gemacht, im Prinzip funktioniert der Zugangspunkt wie vorgesehen (ich kann mich damit verbinden und auf die von Lighty gehostete Website zugreifen), aber es gibt ein kleines Problem. Nach einem Neustart kann ich keine Verbindung herstellen, da dnsmasqsich beschwert, dass wlan0 keine Adresse hat.

Ausschnitt aus /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

Wenn ich das Netzwerksystem neu starte, /etc/init.d/networking restartfunktioniert alles einwandfrei, wie oben beschrieben. Neustart dnsmasqoder Aufrufen ifup wlan0hilft bei dem Problem nicht. Basierend auf dem Protokoll würde ich vermuten, dass es eine Art Timing-Problem gibt (d. h. der USB-WLAN-Stick wird erkannt, nachdem dnsmasq gestartet wurde oder ähnliches), aber ich weiß nicht wirklich, wie ich das lösen kann. Ich habe allow-hotplug wlan0etwas hinzugefügt /etc/network/interfaces, aber es hat nichts geändert.

Ausgenommen von /etc/network/interfaces:

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

Meins /etc/dnsmasq.confist ganz einfach:

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

Bearbeiten:

Laufen ifconfig wlan0 192.168.3.1geht auch.

Antwort1

Sie können ein If-Up-Skript erstellen, das prüft, ob dnsmasq neu gestartet werden muss.

/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

verwandte Informationen