はじめに
M5Stackは5GHz帯のWi-Fiに対応していないため、学校の無線LAN(5GHz帯のみ運用)には接続できない。
そこでRaspberry Pi3Bを使って2.4GHz帯のAPを立ち上げたい。
手順
-
今回の設定
- Raspberry Pi 3 Model B Rev 1.2
- Raspberry Pi側 IP : 192.168.4.1
- クライアント向けDHCP: 192.168.4.2~192.168.4.11
- AP モードが含まれていること
iw list | grep -A5 "Supported interface modes"
#Supported interface modes:
# * IBSS
# * managed
# * AP
# * P2P-client
# * P2P-GO
1. Install
sudo apt update
sudo apt install -y hostapd dnsmasq netfilter-persistent iptables-persistent dhcpcd5
-
hostapd:Raspberry PiをWi-Fiアクセスポイントにする -
dnsmasq:みんなにIPを配る (DHCP) & 名前解決 (DNS) -
dhcpcd5:Pi自身のIP取得と管理 -
netfilter-persistent/iptables-persistent:ルールの永続化
設定前にサービスをストップしておく:
sudo systemctl status hostapd
#Loaded: masked (Reason: Unit hostapd.service is masked.)
#Active: inactive (dead)
sudo systemctl status dhcpcd
#Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; preset: enabled)
#Active: inactive (dead)
sudo systemctl status dnsmasq
#Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; preset: enabled)
#Active: active (running)
sudo systemctl stop dnsmasq
#Active: inactive (dead)
2. 静的IPの設定
/etc/dhcpcd.conf の編集
sudo nano /etc/dhcpcd.conf
ファイルの最後に以下を追加:
interface wlan0
static ip_address=192.168.4.1/24
#クライアント接続とAPの競合を回避
nohook wpa_supplicant
- 保存後、dhcpcd を再起動:
sudo systemctl restart dhcpcd
3. DHCP サーバ(dnsmasq)の設定
/etc/dnsmasq.conf の編集
#バックアップ
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo nano /etc/dnsmasq.conf
#no-resolv
interface=wlan0
dhcp-range=192.168.4.2,192.168.4.11,255.255.255.0,24h
#server=8.8.8.8
#server=1.1.1.1
保存後、dnsmasq を起動:
sudo systemctl restart dnsmasq
sudo systemctl status dnsmasq
# → no servers found in /etc/resolv.conf, will retry
#対処法として、
# 1. /etc/dnsmasq.confのコメントアウトを外す または 一時的に
# 2. echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
# echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
dnsmasqを起動して、iptablesを設定しても通信が通らなかったため
sudo nano /etc/hosts
127.0.0.1 localhost
-127.0.1.1 <your_user_name>
+192.168.4.1 <your_user_name>
4. APデーモン(hostapd)の設定
/etc/hostapd/hostapd.conf の作成
sudo nano /etc/hostapd/hostapd.conf
#コメントは消してください!エラーの原因になります。
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0 #root = 0
interface=wlan0
driver=nl80211
country_code=JP
ieee80211d=1 #country_codeとセットで記述 クライアントに通知するときに必要?
ssid=YOUR_SSID
hw_mode=g #2.4 GHz
channel=6 #適宜選択
macaddr_acl=0 #特定のMACアドレスを許可・拒否したい場合に番号を変更
auth_algs=1 #1が標準 2はWEP専用?
ignore_broadcast_ssid=0 #SSIDを見せたくない=1, 通常=0
wpa=2 #WPA2の場合 WPA+WPA2対応は3
wpa_passphrase=<your_passwd>
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP #WPAの暗号方式
rsn_pairwise=CCMP #WPA2の暗号方式
hw_modeの選択
Band 2に出力があれば5GHz使えるので「a」, 2.4GHzは「g」
Raspberry Pi 3B+でクライアントでは5Ghz接続OK、APだとサポートされていないらしい
https://github.com/raspberrypi/linux/issues/2619
iw list | grep -A5 "Band 2"
デーモン起動設定
sudo nano /etc/default/hostapd
以下を末尾に追記する。
DAEMON_CONF="/etc/hostapd/hostapd.conf"
5. サービス有効化
### 5. hostapd serviceの有効化
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
#sudo systemctl start hostapdでエラーが出た場合は古いログが残っている または wpa_supplicantの競合
#iw dev wlan0 info で type: managed となっている場合:
sudo systemctl stop wpa_supplicant
sudo systemctl disable wpa_supplicant
sudo systemctl mask wpa_supplicant
#Chatgbtは以下のコマンドを出力するが、しなくてよい。
#sudo systemctl stop NetworkManager
#sudo systemctl disable NetworkManager
sudo systemctl start hostapd
sudo systemctl restart hostapd
起動状態・ログ確認:
sudo systemctl status hostapd
sudo hostapd -dd /etc/hostapd/hostapd.conf
6. IP フォワーディング & NAT 設定
IP フォワーディングを有効化
別のネットワークへ中継してよいという許可を出す。
sudo nano /etc/sysctl.conf
以下のコメントアウトを外す:
net.ipv4.ip_forward=1
iptables で NAT マスカレード
これをしないと外部との通信ができない
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo netfilter-persistent save
7. 動作確認
- Raspberry Pi を再起動
sudo reboot
- クライアント端末から SSID(例:YOUR_SSID)が見えるか確認
8. トラブルシューティング
- SSIDが見れない場合
配信がブロックされている可能性があるので、
sudo rfkill list wlan
# 1. phy0: Wireless LAN
# Soft blocked: no
# Hard blocked: yes
sudo rfkill unblock wifi
# 1. phy0: Wireless LAN
# Soft blocked: no
# Hard blocked: no
hostapdのログを削除してみる
sudo systemctl stop hostapd
sudo pkill hostapd
sudo rm -rf /var/run/hostapd
sudo mkdir -p /var/run/hostapd
sudo chown root:root /var/run/hostapd
#ここでAP-ENABLEDと表示されれば成功
sudo hostapd -dd /etc/hostapd/hostapd.conf
- 再起動後にSSIDが見れない場合
(手探りで実行したので、不必要な記述があるかもしれません)
問題1: 前回のログが残っており、読み込みに失敗する
問題2: MainPIDが700番台だとSSIDが表示されない。1700番台であれば表示される
問題1に対応するため、以下の2つのファイルを変更する。
(/lib/systemd/system/hostapd.service ではなく、override.confに記述しよう)
#sudo nano /etc/systemd/system/hostapd.service.d/override.conf
[Service]
Type=forking
ExecStart=
PIDFile=
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf
Restart=always
RestartSec=5
ExecStartPre=/usr/bin/rm -rf /run/hostapd/* /var/run/hostapd/*
ExecStartPre=/usr/bin/rm -f /run/hostapd.pid /var/run/hostapd.pid
ExecStartPre=/usr/bin/mkdir -p /run/hostapd /var/run/hostapd
ExecStartPre=/usr/bin/chown root:root /run/hostapd /var/run/hostapd
#sudo nano /etc/tmpfiles.d/hostapd.conf
d /run/hostapd 0755 root root -
f /run/hostapd.pid 0644 root root -
sudo systemctl daemon-reload
sudo systemctl restart hostapd
問題2に対応するため、sudo systemctl restart hostapdを自動化する
#sudo nano /etc/systemd/system/hostapd-restart.service
[Unit]
Description=Restart hostapd after system boot
After=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart hostapd
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable hostapd-restart.service
-
チャンネル/国コードの制限
→country_codeを正しく設定しないと失敗する
9. 参考までに
通信速度
- 1台接続している場合の速度
Speedtest by Ookla
Idle Latency: 5.15 ms (jitter: 1.70ms, low: 4.59ms, high: 7.79ms)
Download: 17.48 Mbps (data used: 20.8 MB)
58.10 ms (jitter: 11.79ms, low: 8.38ms, high: 139.20ms)
Upload: 16.88 Mbps (data used: 8.1 MB)
316.95 ms (jitter: 89.73ms, low: 8.86ms, high: 560.08ms)
-
設定が不完全な状態(特にhostapd)でsudo apt upgradeを実行した後にrebootするとErrorとなり、ログインできなくなる(LXDE)ので注意。
-
稀にラズパイがCLIで起動することがある。CLI → GUIへは startxで変更可能
-
もしだめならばRaspAPを導入(無線でinstallしていると固まることがあるので有線推奨)