RPIのAd-Hocネットワーク作成方法

2018年9月20日 - 未分類

複数の Raspberry Pi(WiFi付き)を1台の MacBook Airからアクセスしようというものです。MacBook Airがインターネットにつながっていれば、Macのインターネット共有で、簡単にネットワークを作って、複数のRaspberry Piにアクセスできます。しかし、Macがインターネットにつながっていない場合には、ちょっと厄介です。いろいろやってみましたが、結局は、 各Raspberry Piでad-hocネットを立ち上げて、Macがこのad-hocネットに接続するという方法に落ち着きました。

Macだけでもad-hocネットを作れますが、Macのネットワーク作成…で作ったアクセスポイント(装置)は、Mac同士でなければつながりません。Raspberry Piではアクセスポイントは表示されますが、接続ができません。IPのせいではなく、固定IPにしても同じです。

そこで、各Raspberry Piでad-hocネットを起動しします。その方法は、/etc/network/interfaceに、以下を付け加えます。

# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

ここから下を付け加える。

auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet manual
auto wlan0
iface wlan0 inet static
address 192.168.1.50
netmask 255.255.255.0
wireless-channel 1
wireless-mode ad-hoc
wireless-essid ITBOX-SYSTEM-AP
wireless-key 1234567890

固定IPだけを変えて、すべてのRaspberry Piの/etc/network/interfaceを書き換えて、再起動します。

MacBook Airでは、WiFiの装置で表示される、ITBOX-SYSTEM-APに接続します。MacBook Airも固定IPにしておきます。

これで、インターネットがない環境でも、全てのRaspberry Piに接続可能な ad-hocネットワークができます。ここの情報を参考にさせてもらいました。

この方法の利点は、1台のRaspberry Piでhostapdとdhcpdなどを起動して作ったアクセスポイントに接続するよりも安全性が高いことです。1台のRaspberry Piが作ったアクセスポイントではなく、複数のRaspberry Piが作ったアクセスポイントなので、1台や2台のRaspberry Piが壊れてもアクセスポイントはなくならないというところです。

しかし、これには致命的な欠点がありました。メッシュネットワークにすると、ネットワークにつながるRaspberry Piが増えるほどに、通信速度が低下していきます。4台もつないだら、ものすごく遅くなりました。また、時間が経つとネットワークへのアクセスもできなくなる問題もありました。

そこで、Raspberry Piを自動的にホットスポットにするスクリプトをつかって、特定のホットスポットがなければ、自分がそのホットスポットになるように設定しました。これにより、1台のRaspberry Piが故障して、ホットスポットがなくなっても、他のRaspberry Piがホットスポットになれます。一つのホットスポットにつながっているので、通信速度の低下も少なく、快適に動作しています。しばらく、様子をみたいと思います。

Raspberry Piを自動的にホットスポットにするスクリプトをアンインストールしたい場合があるでしょう。

その場合には、
$cd /etc/network/
$cp interface.dpkg-old interface
$sudo rm /etc/network/interface.d/*

で元に戻ります。

 

 

 

Translate »