まず、BATMAN がどのような物かについて簡単にご説明します。BATMAN とは、パソコンに付いている無線 LAN インタフェースだけを使い、無線ルータ無しで大きなネットワークを作る仕組みです。無線 LAN インタフェースには、元々アドホックモードという、隣の端末と直接通信する仕組みがあるのですが、直接電波が届く狭い範囲でしか使う事が出来ません。BATMAN を使うと、直接電波が届かなくても、中間地点に端末があればバケツリレー式にデータを運び、遠い距離の端末同士が通信出来るようになります。これをメッシュネットワークと呼びます。
BATMAN は既存のネットワーク上に仮想的にネットワークを構築します。メッシュネットワークがどんなに複雑でもユーザーからは一つの LAN ネットワークのように見えます。BATMAN 自体はそれ以上の複雑なサービスを提供していませんが、既存の DHCP や DNS がそのまま使え、ゲートウェイを通してインターネット接続する事も出来ます。
この設計は、必要最低限の所だけに絞り、既存のシステムと組み合わす事の出来る大変優れたデザインですが、実際これを災害時に使おうとするとまだまだ足りない点が沢山ある事に気がつくと思います。例えば DHCP や DNS には集中管理されたサーバが必要になるので、ネットワークが分断された状況では既存のサービスは使えません。BATMAN は IPv6 アドレスさえ分かれば端末がどんな繋がり方をしていてもパケットを届ける機能がありまが、しかしその上で動作するサービスも分散ネットワークで動作するようにデザインしないと、サービスを探したり個人を特定してメッセージを送る事が出来ません。この辺りを今後調べたいと思います。
残りは退屈な作業ログです。Ubuntu 11.04 で B.A.T.M.A.N. を試します。
インストール
sudo apt-get install batctl
質問には y と答える。エラーが出るけど無視して下さい(次の Ubuntu では直っているらしい)。
ifconfig で無線ネットワークデバイスの名前を調べておく(wlan0 や eth1 等)、以下 eth1 で説明します。
BATMAN の起動
sudo modprobe batman-adv
GUI のネットワークマネージャを停止。マシンによって停止しないと手動設定が動かない時がある。
sudo service network-manager stop
アドホックネットワーク設定。昨日 http://d.hatena.ne.jp/propella/20110522/p1 とだいたい同じ
ifconfig eth1 down # 念のため停止 ifconfig eth1 mtu 1524 # batman 自体が 24 バイト使うので調整するらしい。 iwconfig eth1 mode ad-hoc essid batman # batman という SSID のアドホックネットワークを作成
BATMAN ネットワークの設定。
sudo batctl if add eth1 # eth1 上に batman ネットワークを作成 sudo ifconfig eth1 up # アドホックネットワーク起動 sudo ifconfig bat0 up # batman ネットワーク起動
これをネットワークに参加するマシンごとに行います。
BATMAN の実験
ifconfig でどんなネットワークが出来たのか見てみます。
eth1 Link encap:Ethernet HWaddr 00:04:23:50:ba:b5 inet6 addr: fe80::204:23ff:fe50:bab5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1524 Metric:1 RX packets:11700 errors:24 dropped:24 overruns:0 frame:0 TX packets:9920 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1506134 (1.5 MB) TX bytes:559575 (559.5 KB) Interrupt:11 Base address:0x6000 Memory:c0200000-c0200fff bat0 Link encap:Ethernet HWaddr ca:90:2a:c8:b7:c1 inet6 addr: fe80::c890:2aff:fec8:b7c1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:72 errors:0 dropped:0 overruns:0 frame:0 TX packets:61 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11305 (11.3 KB) TX bytes:11542 (11.5 KB)
まず最初の eth1 が、最初から備わっているアドホックネットワークです。BATMAN は既存のネットワーク上に仮想的にメッシュネットワークを構築します。BATMAN は単にメッシュのルーティングだけを行い、ネットワークの物理層は問わないので、無線 LAN じゃなくても有線でも Bluetooth でも何でも使えます。
BATMAN が起動すると、仮装インタフェース bat0 を作成し、IPv6 アドレスを割り当てます。出来上がったメッシュネットワークは、ユーザーから見ると一つの LAN のように見えます。パソコンをケーブルでハブに繋いだだけのような状態です。これだけではドメイン名も IPv4 アドレスも無いのでなかなかどう使うのか想像しづらいですが、例えば例のマシンに外から BATMAN ネットワークを使ってログインするには以下のようにします(IPv6 アドレスに ssh するにはインタフェース名を指定する必要があります)。
ssh fe80::c890:2aff:fec8:b7c1%bat0
私のアパートは小さくて Linux マシンも二台しかないので意味のある実験が出来ませんが、お家が広くて三台の Linux マシンを持っている人は是非自分でも試してみて下さい。