ラズパイでメッシュWiFiネットワークを構築する(3) Bridge NODEの準備
◯やりたいこと
(2)で準備したゲートウェイに引き続き、(1)の要領で準備した2台目のラズパイへメッシュネット上で動作するブリッジノードをインストールします。
◯やったこと
4. Bridge NODE(BR)の作成
ここで準備するブリッジノードは wlan0側がメッシュネット上に接続されているNODEの一つで eth0側に接続される非メッシュデバイスとのパケット中継を担当します。wlan0・eth0どちら側も見た目は同じメッシュネットワーク上にあるように見えます。ブリッジを家の隅っこに持っていったとしてもあちこちの NODEがバケツリレーでパケットを転送してくれるので、eth0と PCを LANケーブルで接続するとPCは普通にメッシュネット上にあるように動作します。IPアドレスもメッシュ上のDHCPサーバー(ゲートウェイ)からキチンと 192.168.199.xxxのアドレスを取得します。当然メッシュネット上にある各NODEとのやりとりも普通にできます。WiFiドングルを追加すれば eth0の代わりに WiFiでの機器接続も可能になります。
4-1. ラズパイの準備
ラズパイ 4B+が入手困難なのでゲートウェイと同じく在庫品の 3B+を引っ張り出してきてブリッジを構成します。ブリッジノードは設定が終わって再起動するとホームネット側からは見る事ができなくなりますので気合を入れて一発動作を狙っていきます。まあ最悪 eth0に PCを接続し直せばホームネット上で操作したのと同様な操作をする事は可能なのですが、iPadからリモートでWindowsにログインしている私の環境では非常に手間がかかる処理になりますのでできればやらずに済ませたいところです。
(1)の要領でセットアップしたラズパイは順調に起動すれば wlan0がホーム側ネットに接続して起動しますので、ターミナルソフトから sshでログインしておきます。
4-2. batctl ツールのインストール
ゲートウェイの設定 3-2と同じ処理です。batctlの設定ファイルの内容がブリッジ用に変更になります。
sudo apt-get install -y batctl nano ~/start-batman-adv.sh
・ファイル内容
#!/bin/bash # batman-adv interface to use sudo batctl if add wlan0 sudo ifconfig bat0 mtu 1468 sudo brctl addbr br0 sudo brctl addif br0 eth0 bat0 # Tell batman-adv this is a gateway client sudo batctl gw_mode client # Activates batman-adv interfaces sudo ifconfig wlan0 up sudo ifconfig bat0 up # Restart DHCP now bridge and mesh network are up sudo dhclient -r br0 sudo dhclient br0
ちなみにブリッジノードの IPアドレスを固定化したい場合は最下行2行の代わりに
sudo ifconfig br0 192.168.199.xxx
としておけば固定IPで起動します。
ここでも忘れずにスクリプトを実行可能な状態にしておきます。
chmod +x ~/start-batman-adv.sh
4-3. wlan0のネットワーク定義の設定
ゲートウェイ設定 3-3と全く同じ内容でファイル設定をします。
sudo nano /etc/network/interfaces.d/wlan0
・ファイル内容
auto wlan0 iface wlan0 inet manual wireless-channel 1 wireless-essid call-code-mesh wireless-mode ad-hoc wireless-key 1234567890
4-4. batman-advモジュールのロード
echo 'batman-adv' | sudo tee --append /etc/modules
4-5. wlan0,eth0,bat0をDHCPプロセスの管理から外す
ブリッジノードではwlan0に加え eth0, bat0もDHPCの管理下から除外します。
echo 'denyinterfaces wlan0 eth0 bat0' | sudo tee --append /etc/dhcpcd.conf
4-6. 起動時実行スクリプトの定義
ここもゲートウェイ設定 3-6と同様の設定を行います。
sudo nano /etc/rc.local
ファイル内の exit 0 の前に
/home/pi/start-batman-adv.sh &
の1行を挿入しておきます。
4-7. ブリッジユーティリティのインストール
ここからはブリッジノード専用のインストールになります。まずはブリッジユーティリティのインストールから行います。
sudo apt-get install -y bridge-utils
4-8. eth0の設定
wlan0側(メッシュ側)でリレーしてきたパケットを橋渡し(ブリッジ)する eth0の設定を行います。この設定を行うとイーサネットポートをホットプラグ(自由に抜き差し)できるようになります。設定ファイルに以下の内容を定義します。
sudo nano /etc/network/interfaces.d/eth0
・ファイル内容
auto eth0 allow-hotplug eth0 iface eth0 inet manual
4-9. ブリッジノードへのログイン
以上で設定が完了しましたので再起動します。再起動するとブリッジはメッシュネット上に移動してしまいますのでホームネット側から直接操作することができなくなります。ブリッジへWindowsマシンを直接 LAN接続できる場合は直接操作が可能なのですが、ここではゲートウェイにホームネット側から sshで一度ログインしさらにゲートウェイ上からメッシュネット側のブリッジに sshでログインする方法を取ります。要は sshの2段接続です。
ホームネット側からゲートウェイにログインし、
ssh pi@192.168.1.xxx
DHCPサーバーのアドレスリース記録を見てブリッジの IPアドレスを確認します。
cat /var/lib/misc/dnsmasq.leases
そのアドレスに sshでログインします。
ssh pi@192.168.199.xxx
4-10. インターフェースの動作状況確認
ブリッジにログインできたら最初にインターフェースの動作状況を確認します。
ifconfig
次のように表示されれば正常に動作しています。
bat0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1468 inet6 fe80::e838:85ff:fe06:8265 prefixlen 64 scopeid 0x20<link> ether ea:38:85:06:82:65 txqueuelen 1000 (Ethernet) RX packets 16589 bytes 9220389 (8.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 14460 bytes 1905164 (1.8 MiB) TX errors 0 dropped 19 overruns 0 carrier 0 collisions 0 br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1468 inet 192.168.199.34 netmask 255.255.255.0 broadcast 192.168.199.255 inet6 fe80::4e41:fc4e:b18c:ffd0 prefixlen 64 scopeid 0x20<link> ether b8:27:eb:e8:18:b0 txqueuelen 1000 (Ethernet) RX packets 3261 bytes 213663 (208.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1053 bytes 208548 (203.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::ba27:ebff:fee8:18b0 prefixlen 64 scopeid 0x20<link> ether b8:27:eb:e8:18:b0 txqueuelen 1000 (Ethernet) RX packets 15714 bytes 2010018 (1.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16090 bytes 9413607 (8.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 3 bytes 360 (360.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3 bytes 360 (360.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::ba27:ebff:febd:4de5 prefixlen 64 scopeid 0x20<link> ether b8:27:eb:bd:4d:e5 txqueuelen 1000 (Ethernet) RX packets 65722 bytes 11991421 (11.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 39946 bytes 4886290 (4.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
チェック点
・br0にメッシュネットワーク内の IPアドレスが割り振られている
・bat0,eth0,wlan0には IPアドレスが割り振られていない
続いてブリッジインターフェースの詳細を表示して
sudo brctl show
bat0と eth0がブリッジしている事を確認します。
bridge name bridge id STP enabled interfaces br0 8000.b827ebe818b0 no bat0 eth0
ブリッジのインターフェースがメッシュネットワークに参加できているかを確認するには
sudo batctl if
wlan0: active
でwlan0がメッシュに参加している事がわかりますし、
sudo batctl n
で自分から見える近くのメッシュノードが表示されます。
[B.A.T.M.A.N. adv 2021.3, MainIF/MAC: wlan0/b8:27:eb:04:3e:57 (bat0/ba:d1:69:83:e4:2f BATMAN_IV)] IF Neighbor last-seen wlan0 b8:27:eb:33:d4:ad 0.920s
〜 続く 〜