我正在尝试创建一个由 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
您是否尝试过以下解决方案之一?我必须在这里猜测答案,因为问题不容易重现,可能是您获得的驱动程序的问题。
在接口文件中尝试注释掉“auto wlan0”并保留“allow-hotplug wlan0”
#auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp ... rest of the config ...
可能不是您正在寻找的理想解决方案,但请尝试在您最喜欢的脚本目录中创建一个具有执行权限的新 shell 脚本,其中包含以下内容。
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>
在您的接口文件中使用,如第二个答案中所示,并将命令留在那里。所以最后是这样的(记住将绝对路径传递给(前|后)-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 eth1
或auto wlan
您希望在设备启动时出现的界面。