我正在嘗試創建一個由 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
您希望在裝置啟動時出現的介面。