私は 5 台のコンピューター (Windows PC 1 台と Raspbian を搭載した Raspberry Pi 4 台) で構成されたアドホック Wi-Fi を作成しようとしています。Raspberry Pi は 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
何か案が?
機能しているようですが、常に機能するわけではありません。10 回のうち 1 回しか起動しないなど、非常に奇妙です。
答え1
以下の解決策のいずれかを試しましたか? 問題を再現するのは簡単ではないため、ここでは答えを推測するしかありません。入手したドライバーに問題がある可能性があります。
インターフェースファイルで「auto wlan0」をコメントアウトし、「allow-hotplug wlan0」だけを残してください。
#auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp ... rest of the config ...
おそらく、あなたが探している理想的な解決策ではないかもしれませんが、次の内容で、お気に入りのスクリプト ディレクトリに実行権限を持つ新しいシェル スクリプトを作成してみてください。
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
スイッチのようなものが役に立つかもしれません。それがうまくいく場合は、2 番目の回答のようにインターフェイス ファイルで使用しpre-up <command-that-worked>
、コマンドをそこに残します。最後に次のようになります(絶対パスを(pre|post)-upに渡すことを忘れないでください)
pre-up /sbin/iwconfig wlan0 txpower on
答え2
ここでもまったく同じ問題があります。問題はタイミングの問題でした。ブート プロセスが を発行したときに 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
、たとえば192.168.0.x
アドレス (3 番目のオクテットに注意) 付きの rasbperry などのイーサネット ポートに接続すると、常にネットワーク接続が失われます。
答え4
ユニットの起動時に表示したいインターフェースについてはauto eth0
、auto eth1
または のコメントを解除します。auto wlan