dnsmasq requer uma reinicialização do sistema de rede no BeagleBone Black (Debian 8.5)

0

No momento, estou tentando configurar um BeagleBone Black executando o debian 8.5 como um ponto de acesso WiFi. Os programas usados são hostapd e dnsmasq . Eu fiz um enorme progresso, em princípio, o ponto de acesso está funcionando como pretendido (eu posso conectar-me a ele e acessar o site da Lighty), mas com um pouco de pegadinha. Após uma reinicialização, não consigo me conectar, pois dnsmasq reclama que o wlan0 não possui um endereço.

Trecho 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

Quando eu reiniciar o sistema de rede com /etc/init.d/networking restart , tudo está funcionando bem, conforme descrito acima. Reiniciando dnsmasq ou chamando ifup wlan0 não ajuda com o problema. Com base no log eu acho que há algum tipo de problema de temporização (ou seja, USB WiFi stick é reconhecido depois que o dnsmasq começou, ou algo assim), mas eu realmente não sei como superar. Eu adicionei allow-hotplug wlan0 a /etc/network/interfaces , mas isso não mudou nada.

Exceto em / etc / network / interfaces:

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

Meu /etc/dnsmasq.conf é bem 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:

A execução de ifconfig wlan0 192.168.3.1 também funciona.

    
por Paul K 24.06.2016 / 14:31

1 resposta

0

Você pode criar um script if-up que verificará se o dnsmasq deve ser reiniciado.

/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
    
por 05.01.2017 / 23:05