再起動後には常にwlan0をifdown/ifupする必要があります

再起動後には常にwlan0をifdown/ifupする必要があります

私は 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

以下の解決策のいずれかを試しましたか? 問題を再現するのは簡単ではないため、ここでは答えを推測するしかありません。入手したドライバーに問題がある可能性があります。

  1. インターフェースファイルで「auto wlan0」をコメントアウトし、「allow-hotplug wlan0」だけを残してください。

    #auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet dhcp
    ... rest of the config ...
    
  2. おそらく、あなたが探している理想的な解決策ではないかもしれませんが、次の内容で、お気に入りのスクリプト ディレクトリに実行権限を持つ新しいシェル スクリプトを作成してみてください。

    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スイッチのようなものが役に立つかもしれません。それがうまくいく場合は、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 eth0auto eth1または のコメントを解除します。auto wlan

関連情報