Мне всегда нужно ifdown/ifup wlan0 после перезагрузки

Мне всегда нужно ifdown/ifup wlan0 после перезагрузки

Я пытаюсь создать 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

Вы пробовали одно из решений ниже? Мне придется угадать ответ, так как проблему нелегко воспроизвести, возможно, проблема в драйвере, который вы получили.

  1. В файле интерфейсов попробуйте закомментировать «auto wlan0» и оставить только «allow-hotplug wlan0»

    #auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet dhcp
    ... rest of the config ...
    
  2. Возможно, это не идеальное решение, которое вы ищете, но попробуйте создать новый скрипт оболочки с правами на выполнение в вашем любимом каталоге скриптов со следующим содержимым.

    ifdown wlan0 
    ifup wlan0 
    

    Затем добавьте следующую строку в файл интерфейсов.

    auto wlan0
    iface wlan0 inet dhcp
    ... rest of the config ...
    post-up /path-to-your-script/script.sh
    
  3. Когда ваш компьютер запускается без активного беспроводного соединения. Попробуйте поиграться с 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который должен отображаться при загрузке устройства.

Связанный контент