重启后我总是需要 ifdown/ifup wlan0

xav*_*ard 10 networking debian raspberry-pi

我正在尝试创建一个由 5 台计算机(一台 Windows PC 和 4 个装有 raspbian 的 raspberry pi)组成的临时 wifi。树莓派将通过 mqtt 进行通信,但这不是重点。我遇到的问题是我总是需要执行以下操作才能wlan0在每次重新启动后获得界面:

sudo ifdown wlan0
sudo ifup wlan0
Run Code Online (Sandbox Code Playgroud)

你知道为什么吗?这是我的 conf(除了 IP 地址外,每个 pi 上都相同!)

~ % 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
Run Code Online (Sandbox Code Playgroud)

任何的想法?

它似乎有效,但并非总是如此——就像 10 次中的 1 次启动一样,真的很奇怪吗?!

Pur*_*ara 7

您是否尝试过以下解决方案之一?我必须在这里猜测答案,因为问题不容易重现,可能是您获得的驱动程序有问题。

  1. 在接口文件中尝试注释掉“auto wlan0”并保留“allow-hotplug wlan0”

    #auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet dhcp
    ... rest of the config ...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 可能不是您正在寻找的理想解决方案,但尝试使用以下内容在您最喜欢的脚本目录中创建一个具有执行权限的新 shell 脚本。

    ifdown wlan0 
    ifup wlan0 
    
    Run Code Online (Sandbox Code Playgroud)

    然后将以下行添加到您的接口文件中。

    auto wlan0
    iface wlan0 inet dhcp
    ... rest of the config ...
    post-up /path-to-your-script/script.sh
    
    Run Code Online (Sandbox Code Playgroud)
  3. 当您的计算机在没有无线连接的情况下启动时。尝试摆弄iwconfig不同的参数(尝试 man iwconfig 以获取完整列表),直到您的界面出现。我想可能是txpower某种开关可能会帮助你在这里。如果这对你有用,那么pre-up <command-that-worked>在你的接口文件中使用,就像在第二个答案中一样,并将命令留在那里。

    所以最后是这样的(记住将绝对路径传递给 (pre|post)-up

    pre-up /sbin/iwconfig wlan0 txpower on
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

这里的问题完全相同。问题是时间问题:启动过程发出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
Run Code Online (Sandbox Code Playgroud)