Ich versuche, ein Ad-hoc-WLAN mit 5 Computern (einem Windows-PC und 4 Raspberry Pis mit Raspbian) zu erstellen. Der Raspberry Pi kommuniziert über MQTT, aber darum geht es nicht. Mein Problem ist, dass ich immer Folgendes tun muss, um die wlan0
Schnittstelle nach jedem Neustart zu haben:
sudo ifdown wlan0
sudo ifup wlan0
Weißt du warum? Hier ist meine Konfiguration (auf jedem Pi gleich, außer natürlich der IP-Adresse!)
~ % ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:ff:88:99
inet addr:192.168.1.41 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:951 errors:0 dropped:0 overruns:0 frame:0
TX packets:266 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:66321 (64.7 KiB) TX bytes:43663 (42.6 KiB)
wlan0 Link encap:Ethernet HWaddr 00:0f:13:51:05:8c
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:2520 (2.4 KiB)
~ % iwconfig
wlan0 IEEE 802.11bgn ESSID:"mirroir"
Mode:Ad-Hoc Frequency:2.412 GHz Cell: 42:B1:44:EB:D2:C1
Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on
lo no wireless extensions.
eth0 no wireless extensions.
~ % more /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet static
address 192.168.0.2
netmask 255.255.255.0
wireless-channel 1
wireless-essid mirroir
wireless-mode ad-hoc
wireless-key 967136deac
~ % sudo route add -net 192.168.0.0 netmask 255.255.255.0 wlan0
~ % netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
Irgendeine Idee?
Es scheint zu funktionieren, aber nicht immer – ungefähr 1 von 10 Bootvorgängen, wirklich seltsam?!
Antwort1
Haben Sie eine der folgenden Lösungen ausprobiert? Ich muss hier raten, da das Problem nicht einfach zu reproduzieren ist. Möglicherweise liegt ein Problem mit dem Treiber vor, den Sie erhalten haben.
Versuchen Sie in der Schnittstellendatei, "auto wlan0" auszukommentieren und behalten Sie nur "allow-hotplug wlan0" bei.
#auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp ... rest of the config ...
Dies ist wahrscheinlich nicht die ideale Lösung, nach der Sie suchen, aber versuchen Sie, in Ihrem bevorzugten Skriptverzeichnis ein neues Shell-Skript mit Ausführungsberechtigungen und dem folgenden Inhalt zu erstellen.
ifdown wlan0 ifup wlan0
Fügen Sie dann Ihrer Schnittstellendatei die folgende Zeile hinzu.
auto wlan0 iface wlan0 inet dhcp ... rest of the config ... post-up /path-to-your-script/script.sh
Wenn Ihr Computer startet, ohne dass die drahtlose Verbindung aktiv ist, probieren Sie
iwconfig
verschiedene Parameter aus (versuchen Sie es mit man iwconfig, um eine vollständige Liste zu erhalten), bis Ihre Schnittstelle angezeigt wird. Ich denke, einetxpower
Art Schalter könnte Ihnen hier weiterhelfen. Wenn das für Sie funktioniert, verwenden Sie espre-up <command-that-worked>
in Ihrer Schnittstellendatei wie in der zweiten Antwort und lassen Sie den Befehl dort.Also so etwas wie dies am Ende (denken Sie daran, absolute Pfade an (pre|post)-up zu übergeben)
pre-up /sbin/iwconfig wlan0 txpower on
Antwort2
Genau dasselbe Problem hier. Das Problem war ein Timing-Problem: wlan0 war nicht bereit, als der Boot-Prozess das ausgab ifup
.
pre-up sleep 5
Ich habe dies gelöst, indem ich in der Schnittstellendatei eine Warteanweisung zu wlan0 hinzugefügt habe :
marcelo@breeze:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
pre-up sleep 5
address 10.0.0.42
netmask 255.255.255.0
gateway 10.0.0.2
dns-nameservers 10.0.0.2
wpa-ssid mycoolssid
wpa-psk returnguantanamo
Antwort3
Möglicherweise möchten Sie für die eth0-Schnittstellen und wlan0 unterschiedliche „lokale“ Netzwerke verwenden.
Verwenden Sie für WLAN also ein Netzwerk wie 10.10.0.1
, mask. 255.255.255.0
Und für ETH verwenden Sie ein Netzwerk wie 192.168.0.1
, mask.255.255.255.0
Ich hatte dieses Problem auf RPI nicht (wahrscheinlich, weil ich die Netzwerk-IPs von wlan0 und eth0 immer sehr unterschiedlich halte). Aber auf meinem Windows-PC habe ich ständig dieses Problem: Wenn ich WLAN verwende 192.168.1.x
und dann den Ethernet-Port anschließe, zum Beispiel meinen Raspberry mit 192.168.0.x
der Adresse (achten Sie auf das 3. Oktett), verliere ich immer die Netzwerkverbindung.
Antwort4
Entfernen Sie das Kommentarzeichen bei auto eth0
oder auto eth1
für auto wlan
die Schnittstelle, die beim Booten des Geräts angezeigt werden soll.