0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

箱舟プロジェクト【防災通信】災害時メッシュWi‑FiとE‑Postで作るポータブル通信システム

0
Last updated at Posted at 2026-01-22

公開日:2026年1月21日
著者:川上勝行


はじめに

近年、能登半島地震のような大規模災害でキャリア網が途絶するケースが増えています。
そこで、低コストで構築できるポータブル通信システムを提案してみました。
Raspberry Pi 5を基盤にUbuntu OSをインストールし、E-Post Mail Serverを搭載しDeltaChatでオフライン通信コミニュケーションを実現させます。
さらに、メッシュWi-Fiを追加して避難所内の広範囲通信を実現します。
この記事では、メッシュネットワーク構築の手順を中心に、システムの全体像を解説します。

※本プロジェクト名は比喩的なものであり、有事に最低限の機能を残す設計思想を表しています。

meshwifi-image.jpg


1. システムのコンセプトとメリット

このシステムは、手のひらサイズのRaspberry Pi 5を「ポータブル通信基地」として活用。
キャリア網が使えなくても、避難所内でE2EE(エンドツーエンド暗号化)チャットや通話が可能になります。
E-Post Mail Serverでメールサーバーを自前運用し、DeltaChatアプリでセキュア通信を実現。
メッシュWi-Fi追加で、範囲を拡大します。

主なメリット 詳細
低コスト 数千円〜数万円(RPi5 + USBアダプタなど)
低消費電力 3W〜8W、ポータブル電源で3日以上稼働
オフライン耐性 キャリア網不要、メッシュで避難所内数百mカバー
セキュリティ E-Post + DeltaChatでE2EE通信
拡張性 Wi-Fiメッシュでノード追加可能。「LoRa(日本国内920MHz帯)は半二重通信・極めて低速(数百bps程度)で、電波法によるデューティサイクル制限(1%)により1日あたりの送信時間が約14分に制限されるため、DeltaChatのような双方向・頻繁なメッセージ交換を必要とする通信プロトコルのリアルタイムチャットの利用向きではありません。」

このアプローチは、海外のMeshtasticトレンドや日本総務省ガイドラインに沿った現実的な解決策の一案として実験・研究してみた内容です。


2. 必要な準備と前提

Raspberry Pi 5(8GBモデル推奨)、Ubuntu Serverインストール済み。
外付けUSB Wi-Fiアダプタ(AR9271など、技適取得品)。
E-Post Mail ServerのRaspberry Pi版イメージ(TinyBox.tar.gz)をインストール。
DeltaChatアプリをクライアント端末に導入。

  • OS: Ubuntu Server(Raspberry Pi Imagerでインストール)
  • 電源: ポータブル電源(Jackeryなど)または車載バッテリー
  • 注意: 内蔵Wi-Fiを中継用、外付けをAP用に設定

3. メッシュネットワーク構築手順

BATMAN-advプロトコルを使ってメッシュWi-Fiを構築します。以下は詳細手順です。

  1. カーネルモジュールの有効化
    BATMAN-advを自動ロードします。
echo "batman-adv" | sudo tee -a /etc/modules
sudo modprobe batman-adv
lsmod | grep batman
  1. 必要パッケージのインストール
sudo apt update
sudo apt install -y bridge-utils batctl hostapd dnsmasq iw rfkill
  1. 設定ファイルの準備
  • /etc/hostapd/hostapd.conf: SSID、パスワード、チャネル設定
    /etc/hostapd/hostapd.conf を作成し、以下を記述します。
interface=wlx... (スクリプトで自動更新)
bridge=br0
driver=nl80211
ssid=Raspi5Point
#hw_mode=g
#channel=6
hw_mode=g
channel=1
#ieee80211ax=1
#ieee80211ac=1
ieee80211n=1
auth_algs=1
wpa=2
wpa_passphrase=raspi5963
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
  • /etc/dnsmasq.conf: DHCP範囲設定(例: 192.168.10.50-100)
    /etc/dnsmasq.conf を作成します。
#interface=wlx... (スクリプトで自動更新)
interface=br0
dhcp-range=192.168.10.50,192.168.10.100,255.255.255.0,12h
dhcp-option=3,192.168.10.1
dhcp-option=6,8.8.8.8,8.8.4.4
log-dhcp
  • /etc/netplan/50-cloud-init.yaml: ブリッジインターフェースとBATMAN-adv適用
    /etc/netplan/50-cloud-init.yaml の設定を行います。
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
      optional: true
    wlx... (スクリプトで自動更新):
      dhcp4: no
      optional: true
    wlan0:
      dhcp4: no
      optional: true

設定したら反映させます。

sudo netplan apply

4. 全自動起動スクリプトの作成

/etc/mesh.conf を作成し、スクリプト用の設定ファイルとします。

# --- メッシュネットワーク設定 ---
# 役割設定: MASTER (親機) または NODE (子機)
NODE_TYPE="MASTER"

# 使用するIPセグメント
MESH_SEGMENT="192.168.10.0/24"
MESH_SSID="TyniBox-Mesh"

/usr/local/bin/mesh-start.sh を作成し、実行権限を与えます。

sudo vi /usr/local/bin/mesh-start.sh
sudo chmod +x /usr/local/bin/mesh-start.sh

mesh-start.sh(全自動起動スクリプト)
MASTER/NODEの各マシンで実行させラズパイをメッシュWifi化させるスクリプトです。

#!/bin/bash

# --- 設定読み込み ---
CONF_FILE="/etc/mesh.conf"
if [ -f "$CONF_FILE" ]; then
    source "$CONF_FILE"
    echo "設定ファイルを読み込みました: $CONF_FILE"
else
    echo "設定ファイルが見つかりません。中断します。"
    exit 1
fi

BRIDGE="br0"
HOSTAPD_CONF="/etc/hostapd/hostapd.conf"
DNS_CONF="/etc/dnsmasq.conf"

# 1. USB Wi-Fi自動検出
USB_IF=$(ip -o link show | awk -F': ' '{print $2}' | grep -vE 'lo|eth0|wlan0|bat0|br0' | head -n 1)

# 2. モードとIPの決定ロジック
SEGMENT=$(echo $MESH_SEGMENT | cut -d'.' -f1-3)
if [ "$NODE_TYPE" = "MASTER" ]; then
    MODE="MASTER"
    MY_IP="${SEGMENT}.${MASTER_IP_LAST}"
else
    MODE="NODE"
    MY_IP=$(grep '^dhcp-option=3' "/etc/dnsmasq.conf" | cut -d '=' -f2 | cut -d ',' -f2,2)
fi

echo "--- $MODE モードで開始 (設定IP: $MY_IP) ---"

# --- 3. 徹底クリーンアップ ---
sudo killall hostapd 2>/dev/null
sudo systemctl stop dnsmasq 2>/dev/null
sudo ip link set $BRIDGE down 2>/dev/null
sudo ip link delete $BRIDGE type bridge 2>/dev/null
if [ -n "$USB_IF" ]; then
    sudo ip addr flush dev $USB_IF 2>/dev/null
fi

# --- 4. メッシュ構築 (wlan0) ---
sudo ip link set wlan0 down
sudo iw dev wlan0 set type ibss
sudo ip link set wlan0 up
sudo iw dev wlan0 ibss join $MESH_SSID 2462
sleep 5
sudo batctl if add wlan0
sudo ip link set bat0 up

# --- 5. ブリッジ構成とMACアドレス設定 ---
sudo ip link add name $BRIDGE type bridge

# MACアドレス決定ロジック
if [ -z "$BR0_MAC" ]; then
    echo "MACアドレスが未設定のため、UNIX時間から生成します..."
    # UNIX時間の末尾から5バイト分を使用してローカルMACアドレスを生成
    # 先頭は 02 (Locally Administered) に固定
    TS=$(date +%s)
    TARGET_MAC=$(printf '02:%02x:%02x:%02x:%02x:%02x' \
        $(( (TS >> 24) & 0xff )) \
        $(( (TS >> 16) & 0xff )) \
        $(( (TS >> 8) & 0xff )) \
        $(( (TS >> 4) & 0xff )) \
        $(( TS & 0xff )))

    # mesh.conf に書き戻す (永続化)
    if grep -q "BR0_MAC=" "$CONF_FILE"; then
        sudo sed -i "s/^BR0_MAC=.*/BR0_MAC=\"$TARGET_MAC\"/" "$CONF_FILE"
    else
        echo "BR0_MAC=\"$TARGET_MAC\"" | sudo tee -a "$CONF_FILE"
    fi
    echo "生成したMACアドレスを $CONF_FILE に保存しました: $TARGET_MAC"
else
    echo "設定ファイルのアドレスを使用します: $BR0_MAC"
    TARGET_MAC="$BR0_MAC"
fi

sudo ip link set dev "$BRIDGE" address "$TARGET_MAC"

sudo ip link set bat0 master $BRIDGE
sudo ip addr add $MY_IP/24 dev $BRIDGE
sudo ip link set $BRIDGE up

# --- 6. モード別サービス設定 ---
if [ "$MODE" = "MASTER" ]; then
    echo "親機設定: DHCPとAPを起動します..."
    sudo sysctl -w net.ipv4.ip_forward=1
    # dnsmasqの設定をセグメントに合わせて動的に置換
    #sudo sed -i "s|^dhcp-range=.*|dhcp-range=${SEGMENT}.100,${SEGMENT}.150,12h|" $DNS_CONF
    sudo systemctl restart dnsmasq
    
    # hostapd起動
    sudo sed -i "s/^interface=.*/interface=$USB_IF/" $HOSTAPD_CONF
    sudo hostapd -B $HOSTAPD_CONF
    sleep 2
    sudo ip link set $USB_IF master $BRIDGE
    sudo batctl gw_mode server
else
    echo "子機設定: メッシュノードとして待機します..."
    sudo systemctl stop dnsmasq 2>/dev/null
    sudo batctl gw_mode client
fi

# dnsmasq.conf の更新(例:interface行を更新)
#sleep 5
sudo sed -i "s/^interface=.*/interface=br0/" $DNS_CONF
#sleep 5
sudo killall hostapd
sudo systemctl restart dnsmasq
sudo hostapd -B /etc/hostapd/hostapd.conf

echo "------------------------------------------"
echo "完了: $MODE モードとしてセットアップされました"
echo "IP: $MY_IP"
echo "MAC: $TARGET_MAC"
echo "------------------------------------------"

各ラズパイ5マシンで mesh-start.sh を実行するとノード間で中継を設定し、メッシュ網が構築されます。

4. E-Post Mail ServerとDeltaChatの統合

MASTERとなるラズパイ5上でE-Postを起動後、IMAP/SMTPを設定。
DeltaChatアプリでメールアカウントを追加すれば、避難所内チャット/通話が可能。
メッシュWi-Fiで接続範囲を拡大し、グループ通信を実現。

実際の構築は

一括インストール後、複数端末で接続し、キャリアオフライン状態でメッセージ送受信を確認します。

想定される活用シーン

  • 災害時の避難所内連絡手段
  • 山間部や離島など、通信インフラが整っていない地域での情報共有
  • フィールドワークやアウトドア活動時のグループ内通信

5. 実用性と今後の展望

このシステムは、Wi-Fiメッシュの追加で避難所内の通信を強化。
LoRaの限界を認識し、現実的な選択肢として有効です。
海外Meshtasticの成功例からも、DIYコミュニティでの普及が期待されます。

防災DXに興味ある方やデジタル田園都市構想に興味のある方、自治体関係者の方など、ぜひお試しを。

この取り組みは「箱舟プロジェクト」として連載中。

- 箱舟プロジェクト【防災通信】地域防災を支える「手のひらサイズ」ローカル通信システムの可能性
- 箱舟プロジェクト【防災通信】Raspberry Pi 5で作る災害時ポータブル通信システム:セットアップ手順まとめ
- 箱舟プロジェクト【防災通信】Raspberry Pi 5のmicroSDを内蔵NVMe SSDへクローンして信頼性を高める手順
- 箱舟プロジェクト【防災通信】Raspberry Pi 5ポータブル通信システムをStarlinkと連携させる手順
- 箱舟プロジェクト【防災通信】TinyBox(仮):Raspberry Pi 5で構築するE‑Post × DeltaChatの災害時通信システム
- 箱舟プロジェクト【防災通信】× IEEE802.11ah(Wi‑Fi HaLow)構成まとめ

おわりに

災害時における通信手段の確保は、命を守るうえで非常に重要です。
Raspberry Pi 5 を活用したこのポータブル通信システムは、誰でも構築可能で、非常時の備えとして有効ではないかと思います。

【お知らせ】
本システムのコア技術について、特許第7895555号を取得いたしました(2026年7月登録)


※この記事は、災害対策技術の実験研究を目的として執筆しました。
 実際の運用にあたっては、各自治体や専門家の指導のもとで導入をご検討ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?