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

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

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

sudo ifdown wlan0
sudo ifup wlan0

你知道为什么吗?这是我的配置(显然除了 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

任何想法?

这似乎有效,但并不总是有效——就像十次启动中就有一次,真的很奇怪?!

答案1

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

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

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

    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>在您的接口文件中使用,如第二个答案中所示,并将命令留在那里。

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

    pre-up /sbin/iwconfig wlan0 txpower on
    

答案2

这里有完全相同的问题。问题是一个计时问题:当引导过程发出 .wlan0 时,wlan0 尚未准备好ifup

pre-up sleep 5我通过在接口文件中向 wlan0添加一条 wait 语句解决了这个问题:

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 上没有遇到过这个问题(可能是因为我总是让 wlan0 和 eth0 网络 IP 非常不同)。但在我的 Windows PC 上,我一直遇到这个问题:当我使用无线192.168.1.x然后插入以太网端口时,例如我的 rasbperry 和192.168.0.x地址(注意第三个八位字节),我总是失去网络连接。

答案4

取消注释auto eth0,auto eth1auto wlan您希望在设备启动时出现的界面。

相关内容