はじめに
町内会で共有するWi-Fiアクセスポイントを構築する機会を頂きました。インターネット回線は町内会専用に用意したスマートフォン。その回線をテザリングして共有したいのですが、利用できる容量は有限です。色々と手持ちの機材でチャレンジしたのですが、しっくりくるモノはありません。
「ないなら作ればいいじゃないか!」
てなわけで、棚の奥で隠居していたラズパイ(Raspberry Pi)を引っ張り出して、町内会専用のWi-Fiアクセスポイントを構築しました。
実現したいWi-Fiアクセスポイント

自治会専用のスマートフォンをテザリングして、自治会の皆様にインターネット接続のサービスを提供したい。
ただし、できるだけ簡単な運用でないと色々と問題になりそうです。
ラズパイで自治会専用のWi-Fiアクセスポイントを作れば設定を全部ブラックボックスに押し込めそう。ついでに全て無線化できればなおベストだしパソコンだったら何とでもなりそう!!
今回使用する機材:Raspberry Pi 3 Model B
「ラズパイ」とは、イギリス生まれの手のひらサイズの小型コンピューターです。名刺サイズですが、フル機能のLinuxが動くタフなやつです。今回は手元に余っていた「Pi 3」を再雇用することにしました。
スペック表
| 項目 | 詳細内容 |
|---|---|
| SoC | Broadcom BCM2837 (64-bit 1.2GHz 4コア) |
| メモリ | 1GB LPDDR2 |
| Wi-Fi | 2.4GHz IEEE 802.11n |
| 有線LAN | 100Mbps Ethernet |
小規模なWi-Fiアクセスポイントとしては、これでも十分なスペックです。
意外な落とし穴:最新OS(Bookworm)の壁
最近のラズパイは初期設定が楽になったと聞いていましたが、思わぬ障害にぶつかりました。最新OSの Debian 12 (bookworm) ではネットワーク管理が「NetworkManager」に統合された影響か、ネット上の古いナレッジ通りに進めてもうまくいきません。特に追加デバイスなしでスマホとWi-Fi接続を維持しつつ新たにWi-Fiアクセスポイントを構築するには、仮想AP用インターフェース(ap0)を設定する必要がありますが、これがどうにもうまく動いてくれません。Pi4でも同じ問題を抱えていました。
そこで、あえて一世代前の Raspberry Pi OS (bullseye) に入れ替えることにしました。これが正解でした。慣れ親しんだ設定が通用するようになり、スムーズに構築が進みます。もちろんPi3もPi4ともに有効です。
ちょっと深掘り:なぜ最新の「Bookworm」ではなく「Bullseye」を選んだのか
最新のOSが常にベストとは限らないのが、ラズパイ工作の奥深い(そして難しい)ところです。今回、あえて旧OSに戻したのには明確な理由があります。
- ネットワーク管理の激変: Bookwormから、ネットワーク管理が従来の
dhcpcdからNetworkManagerへ完全に移行しました。これにより、以前の「アクセスポイント化」の定番コマンドや設定ファイルの書き方が通用しなくなっています。 - ドライバとブリッジの相性: ラズパイ内蔵Wi-Fiチップを「子機(Station)」と「親機(AP)」として同時に動かしたり、仮想的なインターフェース(ap0)を作ったりする際、Bookwormの新しいスタックでは挙動が不安定になるケースが報告されています。
- 枯れたナレッジの活用: 町内会のインフラとして使う以上、「最新」よりも「安定」が優先です。数多くの実績があるBullseyeなら、トラブル時の解決策もネット上に豊富にあり、メンテナンス性が高まると判断しました。
日本語環境やツールのセットアップ
設定自体はいろんなサイトで詳細に説明されています。
本書では、備忘録も兼ねて、私が行っている日本語化などの基本設定を記しておきます。
昔は細かく初期設定が必要だったのですが、最近は日本語周りの設定ぐらいしかありません。
- ロケール設定:
sudo raspi-configからja_JP.UTF-8を選択。 - 日本語入力:
sudo apt-get install fcitx-mozc - NetworkManagerの導入: Bullseyeでは手動で導入し、
raspi-configの Advanced Options で有効化します。 - Macアドレスの固定: NetworkManagerの設定を可変から固定に変更します
# ロケール設定(GUI/TUIで操作)
sudo raspi-config
# 1 Localisation Options -> L1 Locale -> ja_JP.UTF-8 を選択
# 日本語入力とフォントの導入
sudo apt update
sudo apt install -y fcitx-mozc fonts-noto-cjk
# NetworkManagerの導入
sudo apt install network-manager
# NetworkManagerの有効化
sudo raspi-config
# 6 Advanced Options -> AA Network Configを選び設定
# MACアドレスの固定
sudo nano /etc/NetworkManager/NetworkManager.conf
<<<<<省略>>>>>
[device]
wifi.scan-rand-mac-address=no再起動して事前準備は完了です。
アクセスポイントの構築(nmcliを活用)
OSをBullseyeに落としたことで、NetworkManagerを用いたアクセスポイント化がサクサク進みます。
仮想AP用インターフェース(ap0)の固定
物理的な wlan0 とは別に、アクセスポイント用の ap0 を作成するルールです。 ATTR{macaddress}== の後の値は、ご自身のラズパイのMACアドレス(iw devで確認)に書き換えてください。
sudo nano /etc/udev/rules.d/99-ap0.rules書き込む内容は以下の通りです。
SUBSYSTEM=="ieee80211", ACTION=="add|change", \
ATTR{macaddress}=="XX:XX:XX:XX:XX:XX", KERNEL=="phy0", \
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
RUN+="/bin/ip link set ap0 address XX:XX:XX:XX:XX:XX"一旦再起動しましょう。これで、スマホの回線をラズパイ経由で町内会の皆さんに共有できるようになりました。電源を入れるだけで機能します。使い終わったら電源切れば終わりなので、町内会の皆さんへの案内も超簡単です。iw dev と打ち込むと ap0 の作成を確認できます。
$ iw dev
phy#0
Unnamed/non-netdev interface
wdev 0x3
addr ba:27:eb:2c:f1:da
type P2P-device
txpower 31.00 dBm
Interface ap0
ifindex 4
wdev 0x2
addr b8:27:eb:2c:f1:da
type managed
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
txpower 31.00 dBm
Interface wlan0
ifindex 3
wdev 0x1
addr b8:27:eb:2c:f1:da
ssid DigitalARTs-WX5400T6-5p
type managed
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
txpower 31.00 dBmアクセスポイントを作ります
コマンド一発でアクセスポイントを作ります。本書ではコマンドオプションの詳細は省略します。SSIDやIPアドレス、パスワードも、設定の際には読み替えてください。
$ sudo nmcli connection add type wifi ifname ap0 con-name rpi_ap autoconnect yes /
ssid HogeHoge 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared /
ipv4.address XXX.XXX.XXX.XXX ipv4.never-default yes wifi-sec.key-mgmt wpa-psk /
wifi-sec.pairwise ccmp wifi-sec.proto rsn wifi-sec.psk "PASSWORD"
接続 'rpi_ap' (cdb7bd6a-27df-43f0-b40c-07333db9e6e9) が正常に追加されました。
$ sudo nmcli connection reload
$ sudo nmcli connection up rpi_ap
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/5)
$ nmcli connection show
NAME UUID TYPE DEVICE
rpi_ap cdb7bd6a-27df-43f0-b40c-07333db9e6e9 wifi ap0
hogehoge-lan f05cea00-86b8-3be7-b6cd-b08803e5f5e3 ethernet eth0
hogehoge-wifi 5a85232e-766d-4a84-bf10-7de1b609a109 wifi wlan0
lo 4cff889d-760a-4fbe-bb3d-9f9b03a24fcd loopback lo
preconfigured 7b5fa9cf-f83d-4395-81f9-e7feb96c4da9 wifi --これで設定したSSIDでWi-Fiアクセスポイントが使えるようになりました。
シニアにも優しい、魔法の「1ボタン」と「赤いハートビート」の設定
町内会の会館などで使う際、「コマンドを打ってシャットダウンしてください」とは言えません。そこで、ITに詳しくない方でも家電感覚で扱える物理インターフェースを追加しました。
魔法の「1ボタン」設定
GPIO 3(5番ピン)とGND(6番ピン)にタクトスイッチを繋ぎ、/boot/config.txt に以下を追記します。
sudo nano /boot/config.txt# I2Cをオフにする(競合回避)
# dtparam=i2c_arm=on I2Cをオンにしていると競合するので行をコメントアウト
# 5番ピン(GPIO3)を電源ボタンにする
dtoverlay=gpio-shutdownこれだけで、「押せば起動」「動いている時に押せば安全に終了」という理想的なボタンになります。
赤いハートビート(赤いLEDの点滅)
/boot/config.txt に以下を追記します。

これで「赤いLED」が「点滅しなくなったら」電源ケーブルを抜いてもいいよ!と説明できます。
専用のLEDが用意できなかったので苦肉の策ではありますが、そこそこ説明しやすいのでオッケーですね。
sudo nano /boot/config.txtdtparam=pwr_led_trigger=heartbeat機械が小さいので強力マグネットを使ってディスプレイの裏に貼り付けています。
排熱も少なくて扱いやすいのが良いですよね。
数人のアクセスであれば何の問題もありません。Raspberry Pi 4 であれば、相当数の端末を接続できそうです。
結びに
無事に「隠居ラズパイ」を町内会のインフラとして復活させることができました。最新OSにこだわらず、目的に合わせて安定した環境を選ぶこと。そして、使う人の顔を思い浮かべて「物理ボタン」を追加すること。DIYの醍醐味は、こうした「優しさのカスタマイズ」ができる点にあると感じました。もし手元に眠っているラズパイがあれば、皆さんも地域や家庭のために役立ててみてはいかがでしょうか?



コメント