Я пытаюсь создать ad-hoc wifi из 5 компьютеров (один ПК с Windows и 4 Raspberry Pi с установленным Raspbian). Raspberry Pi будет общаться через mqtt, но это не главное. Проблема в том, что мне всегда нужно делать следующее, чтобы интерфейс работал wlan0
после каждой перезагрузки:
sudo ifdown wlan0
sudo ifup wlan0
Знаете почему? Вот моя конфигурация (одинаковая на каждом pi, за исключением IP-адреса, конечно!)
~ % 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
Есть идеи?
Кажется, это работает, но не всегда — где-то 1 раз из 10. Действительно странно?!
решение1
Вы пробовали одно из решений ниже? Мне придется угадать ответ, так как проблему нелегко воспроизвести, возможно, проблема в драйвере, который вы получили.
В файле интерфейсов попробуйте закомментировать «auto wlan0» и оставить только «allow-hotplug wlan0»
#auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp ... rest of the config ...
Возможно, это не идеальное решение, которое вы ищете, но попробуйте создать новый скрипт оболочки с правами на выполнение в вашем любимом каталоге скриптов со следующим содержимым.
ifdown wlan0 ifup wlan0
Затем добавьте следующую строку в файл интерфейсов.
auto wlan0 iface wlan0 inet dhcp ... rest of the config ... post-up /path-to-your-script/script.sh
Когда ваш компьютер запускается без активного беспроводного соединения. Попробуйте поиграться с
iwconfig
различными параметрами (попробуйте man iwconfig, чтобы получить полный список), пока не появится ваш интерфейс. Я думаю, что может бытьtxpower
своего рода переключатель может помочь вам здесь. Если это работает для вас, то используйтеpre-up <command-that-worked>
в вашем файле интерфейсов, как во 2-м ответе, и оставьте команду там.Итак, что-то вроде этого в конце (не забудьте передать абсолютные пути в (pre|post)-up)
pre-up /sbin/iwconfig wlan0 txpower on
решение2
Точно такая же проблема. Проблема была в синхронизации: wlan0 не был готов, когда процесс загрузки выдал ifup
.
Я решил эту проблему, добавив оператор ожидания pre-up sleep 5
к wlan0 в файле интерфейсов:
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
решение3
Возможно, вы захотите использовать разные «локальные» сети для интерфейсов eth0 и wlan0.
Так что для WLAN используйте сеть типа 10.10.0.1
, маска 255.255.255.0
А для ETH используйте сеть типа 192.168.0.1
, маска255.255.255.0
У меня не было этой проблемы на RPI (вероятно, потому что я всегда держу сетевые IP-адреса wlan0 и eth0 очень разными). Но на моем компьютере с Windows у меня постоянно возникает эта проблема: когда я использую беспроводную связь, 192.168.1.x
а затем подключаюсь к порту Ethernet, например, к rasbperry с 192.168.0.x
адресом (обратите внимание на 3-й октет), я всегда теряю сетевое соединение.
решение4
Раскомментируйте auto eth0
или для интерфейса auto eth1
, auto wlan
который должен отображаться при загрузке устройства.