dnsmasq requiere reiniciar el sistema de red en BeagleBone Black (Debian 8.5)

dnsmasq requiere reiniciar el sistema de red en BeagleBone Black (Debian 8.5)

Actualmente estoy intentando configurar un BeagleBone Black con Debian 8.5 como punto de acceso WiFi. Los programas utilizados son hostapdy dnsmasq. He logrado un gran progreso, en principio el punto de acceso funciona según lo previsto (puedo conectarme a él y acceder al sitio web alojado en Lighty), pero con un pequeño problema. Después de reiniciar no puedo conectarme, ya que dnsmasqme quejo de que wlan0 no tiene una dirección.

Extracto de /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

Cuando reinicio el sistema de red, /etc/init.d/networking restarttodo funciona bien, como se describe anteriormente. Reiniciar dnsmasqo llamar ifup wlan0no ayuda con el problema. Según el registro, supongo que hay algún tipo de problema de sincronización (es decir, la memoria USB WiFi se reconoce después de que se haya iniciado dnsmasq, o algo similar), pero realmente no sé cómo solucionarlo. He añadido allow-hotplug wlan0pero /etc/network/interfacesno cambió nada.

Excepto desde /etc/network/interfaces:

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

Mi /etc/dnsmasq.confes bastante básico:

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

Editar:

Correr ifconfig wlan0 192.168.3.1también funciona.

Respuesta1

Puede crear un script if-up que comprobará si dnsmasq debe reiniciarse.

/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

información relacionada