Raspberry Pi 3 n台とMacでメッシュネットワークを構築する

投稿者: | 2016-09-04

概要

昨日書いたインターンの記事で触れた電波網拡張の為の基盤作りの部分です。何分、3日ぐらいで得た付け焼刃ですので鵜呑みは危険です。あしからず。

以下の記事を大いに参考にさせてただきました。

Raspberry Pi を BUFFALO の USB wifi で ad-hoc 通信する設定


手順

まず、全体の手順から見ましょう。

1.Raspberry Pi 3内の/etc/network/interfacesを書き換える
2.Macのネットワーク環境設定をいじる
3.olsrdを各ノードにインストール
4.各ノードでolsrdを立ち上げる

ちなみに、Raspberry Pi 3からはデフォでWifiモジュールが乗っかっているのでそのままで使えます。2はUSB Wifiドングルなどをくっつけてあげる必要があります。


1.Raspberry Pi 3内の/etc/network/interfacesを書き換える

以下のように書き換えます。内容は、参考記事様のものを自分用に書き換えたものです。

auto lo
iface lo inet loopback

iface eth0 inet manual

#アドホック時はコメントアウト
#allow-hotplug wlan0
#iface wlan0 inet manual
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#allow-hotplug wlan1
#iface wlan1 inet manual
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#ad-hoc settings
auto wlan0
iface wlan0 inet static
#好きなグループを組む
address 192.168.12.x
netmask 255.255.255.0
#好きなチャンネル(周りの電波状況とかぶらないのが良い)
wireless-channel 1
wireless-mode ad-hoc
#ad-hoc essid
wireless-essid pi
#key setting(無くても動く)
wireless-key xxxxxxxxx

addressの部分ですが、Raspberry Piを複数台繋ぐならそれぞれで被らないようなIPアドレスを設定する必要があります。1台目は192.168.12.1 2台目は192.168.12.2…といった具合です。別にサブネットマスクが/24(=255.255.255.0)である必要はありません。255.255.0.0でも大丈夫だと思います。(試してません。ダメだったら/24にしてください。)

wireless-essidも自分の好きなものを設定してください。今回はpiにしました。interfacesを書き換えたらrebootしてください。Raspberry Piが再起動したらad-hocネットワークが構築されています。


2.Macのネットワーク環境設定をいじる

Macのネットワーク環境設定をいじってad-hocネットワークであるpiにつなげるようにします。
すでにad-hocネットワークは立ち上がっていると思うので、それを検出できるようになっていると思います。接続しましょう。

スクリーンショット 2016-09-04 17.48.50

接続したら今度はネットワーク環境設定を開き、”詳細”を選択します。次に、”TCP/IP”タブをタグを選択すると、以下のような画面になるので、”IPv4の設定”を“手入力”に、IPv4アドレスとサブネットマスクをad-hocのグループに沿ったものにします。今回ならIPv4アドレスは、192.168.12.xです。xは任意です。サブネットマスクは255.255.255.0ですね。ルータは接続先のRaspberry Piのアドレスとなりますが、無くても動きました。なかったら何かで困るかもしれませんが、今の所困ってません。

スクリーンショット 2016-09-04 17.47.10


3.olsrdを各ノードにインストール

Raspberry Pi 3やMacにolsrdをインストールします。olsrdはolsrというProactive型のルーティングプロトコルがデーモンになったやつです。Optimized Link State Routing Daemonですかね。インストールにはターミナルを使います。

Raspberry Pi側では
[plain]
$ apt-get install olsrd
[/plain]
Mac側では
[plain]
$ brew install olsrd
[/plain]
です。


4.各ノードでolsrdを立ち上げる

各Raspberry PiとMacで以下を実行します。

[plain]
$sudo olsrd -i wlan0 en0 -d 1
[/plain]

-iオプションは、olsrdが各ノードを検出する際に送るパケットが通る通信経路のインタフェース名だと思います(ここら辺知識として曖昧です)。引数は複数でも単数でも渡せます。Raspberry Pi 3ならwlan0、Macならen0です。-dオプションは、1を渡すと以下のようなデバッグモニタが出ます。0だと出ません。

スクリーンショット 2016-09-01 17.58.27

このモニタでは、1-hopに192.168.12.2、2-hopに192.168.12.3の端末があることになっています。つまり、それぞれの電波の範囲が直接被っている端末は192.168.12.2のもの、他のノードを介して間接的に繋がっている端末が192.168.12.3ということです。olsrdを使うことで、間接的に繋がっている端末のIPアドレスを指定して通信することができます(=つまり、単なるad-hocネットワークではこれができません)。今回のネットワークでは、olsrdが各ノードの接続状態を逐一調べており、通信の際にそのテーブルを使ってルーティングすることによって成り立っています。従って、間接的に接続されているノードのアドレスを指定しても、自動でリレーして届けてくれるというわけです。


効果

MacとRaspberry Piを同一のad-hocネットワークに属させることによって、Wifiルータのない状況でも相互に通信ができます。山奥に行っても作業したいような人にはオススメですね。そういった用途では、メッシュネットワークは正直オマケなので、手順の1と2だけやれば大丈夫です。直接電波が届かない他の人の部屋のRaspberry Piと通信したいとかいうときに一応使えます。旅館の廊下とかに中継機となるノードを設置すれば勝手にリレーして届けてくれます。だったら同じ部屋に集まって作業しろよとは思いますが。災害時や電波の届かない屋外での一時的なネットワークの拡張という面では役に立つかと思います。

といっても、この状態ではまだ閉じたネットワークなので、次の記事ではWANへの投げ方の例を書きたいと思います。モチベと記憶力が心配ですが、書けたら書きます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です