投稿日

ラズパイで作るWi-Fiアクセスポイントと、トラフィック計測 (ブリッジパターン)

こんにちは、ソラコムの松下(ニックネーム: Max)です。

Raspberry Pi (通称: ラズパイ)に、ブリッジパターンによるWi-Fiアクセスポイントを構築し、その上でトラフィック計測をする方法を紹介します。

IoTの本番運用に向けては、トラフィック計測が不可欠です。その理由や計測することで明確になることは「ラズパイで作るWi-Fiアクセスポイントと、トラフィック計測 (NAPTパターン)」にブログ記事をご覧ください。

NAPTパターンとブリッジパターン、違いとそれぞれの利点

先のブログでは、NAPTパターンによる構築方法を紹介しました。それぞれの構成は以下の通りです。

NAPTパターンの構成
ブリッジパターンの構成

一見同じように見えますが、最大の違いはDHCPサーバー(IPアドレス配布システム)の存在です。

NAPTパターンではIPアドレス配布は、ラズパイ上のdnsmasqによって行われます。ブリッジパターンのIPアドレス配布は、有線LAN上の別のDHCPサーバーからとなります。

NAPTパターンでは通信やシステムをラズパイに集約しているため、既存構成の変更を最小限にとどめることができます。一方で、インターネット側のルーター(上位ルーター)でもNAPTされている場合は二重NATとなるため、アプリケーションによっては不具合が出る可能性があります。

ブリッジパターンでは、IoT機器はラズパイの有線LANと同じネットワークのIPアドレスを利用します。IoT機器の通信は、ラズパイを「素通り」する形となるため二重NAT問題は発生しません。しかし、外部のDHCPサーバーを用意する必要があるほか、IPアドレス数もラズパイの有線LAN側のネットワークに依存します。必要なシステムや既存構成への影響が、NAPTパターンより大きくなるのです。

二重NATで問題となるアプリケーションには、オンラインゲームやUPnP(ユニバーサルプラグアンドプレイ)プロトコル、あとはポート転送設定を利用するものがあります。IoTにおいては、遠隔からIoT機器を操作するような場合のポート転送設定で問題となる場合が考えられますが、IoTデータ収集といった用途においては、二重NAT状態でも使える場合が多く、また、構築の手間もあまりかからないため、まずはNAPTパターンで試してみて、そのあとにブリッジパターンを適用しても良いでしょう。

Wi-Fiアクセスポイントの構築手順 (ブリッジパターン)

実際の構築手順です。時間はおよそ20分程度となります。OSの最新化まではNAPTパターンと同じですが、手順を掲載しておきます。

今回利用したのは Raspberry Pi 3 model B+です。無線LANと有線LANがついているモデルであれば利用できますが、3 もしくは 4 を推奨いたします。

1. Raspberry Pi Imagerでの書き込み時設定

Raspberry Pi OSを書き込むにはRaspberry Pi Imagerが一般的です。利用方法は割愛します。ここでは Raspberry Pi OS Lite (64-bit)を書き込みました。

書き込み時の設定は以下の通りです。

項目設定例備考
ホスト名hostapd-bridge任意です。
SSH有効認証方法は任意です。公開鍵認証はSSHキーが必要です。
準備が整っていない場合はパスワード認証を選びます。
ユーザー名とパスワードユーザー名 = hostapd
パスワード = FooBar
任意です。特にパスワードは推測不能な文字列を指定してください。
パスワード生成ツールの利用も有効です。
Wi-Fi設定しない
ロケール設定タイムゾーン = Asia/Tokyo
キーボードレイアウト = us
任意ですが、設定しておくことをおススメします。

2. ラズパイの有線LANからインターネット接続を確認する

ラズパイの有線LANポート(eth0)にケーブルを挿し、インターネットに接続できるようにしてください。また、ここからの作業はSSHによるリモートアクセスでも可能です。

3. 初回起動後のOS最新化

Raspberry Pi OS が起動したら、まずインストールソフトウェア・ライブラリの最新化を行います。再起動して最新化は完了です。

sudo apt update && sudo apt upgrade -y
sudo systemctl reboot

4. dhcpcdによるwpa_supplicant起動の無効化

wpa_supplicantは、Wi-Fiアクセスポイントに接続する際の認証(WPA)を通すためのソフトウェアです。今回は、ラズパイ自体がWi-Fiアクセスポイントになることから、このソフトウェアが動作していると競合を起こすため停止します。

# main
sudo systemctl stop wpa_supplicant.service
sudo systemctl mask wpa_supplicant.service
cat << _EOT_ | sudo tee -a /etc/dhcpcd.conf
nohook wpa_supplicant
_EOT_
sudo systemctl restart dhcpcd.service

確認

以下のコマンドで、先の設定が完了しているか確認します。

sudo systemctl status wpa_supplicant.service | grep Active:
#=>     Active: inactive (dead) since Sun 2022-05-08 22:22:05 JST; 33s ago
ps h -C wpa_supplicant
#=> <何も表示されないのが正解>

5. hostapdによるWi-Fiアクセスポイント化

hostapdは、Wi-Fiアクセスポイントサーバーソフトウェアです。このソフトウェアによって、ラズパイの無線LANインターフェイスをWi-Fiアクセスポイントとして動かすことができます。

ここでは SSID = TESTWLAN0 、パスワード = Aihei2oB と設定しています。これらは変更して利用してください。

# variables
_SSID_=TESTWLAN0
_WPA_KEY_=Aihei2oB
# main
sudo apt install -y hostapd
sudo systemctl unmask hostapd.service
cat << _EOT_ | sudo SYSTEMD_EDITOR=tee systemctl edit hostapd.service
# Ref: /lib/systemd/system/raspberrypi-net-mods.service
[Unit]
Before = networking.service
[Service]
ExecStartPre = /bin/sh -c '/bin/rm -f /var/lib/systemd/rfkill/*.mmc*wlan'
ExecStartPre = /usr/sbin/rfkill unblock wifi
_EOT_
cat << _EOT_ | sudo tee /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
driver=nl80211
ssid=${_SSID_}
hw_mode=g
channel=11
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ieee80211n=1
wme_enabled=1
country_code=JP
wpa=2
wpa_passphrase=${_WPA_KEY_}
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_group_rekey=86400
_EOT_
sudo chmod 600 /etc/hostapd/hostapd.conf
history -d -8 # erase "_WPA_KEY_" in history
sudo systemctl start hostapd

確認

以下のコマンドで、先の設定が完了しているか確認します。

sudo systemctl status hostapd | grep Active:
#=>     Active: active (running) since Sun 2022-05-08 22:25:01 JST; 20s ago

6. bridge-utilsによるwlan0とeth0のブリッジ(L2接続)

bridge-utilsは、ネットワークインターフェイス間をレイヤー2(L2)でつなげます。ここではwlan0とeth0をL2でつなげます。

# main
sudo apt install -y bridge-utils
cat << _EOT_ | sudo tee /etc/network/interfaces.d/br0.conf
auto br0
iface br0 inet dhcp
  bridge_ports eth0 wlan0
_EOT_
sudo systemctl restart networking.service

確認

以下のコマンドで、先の設定が完了しているか確認します。

sudo brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.xxxxxxxxxxxx       no              eth0
                                                        wlan0

ここでwlan0が表示されていない場合は、hostapdによるwlan0インターフェイスの有効化に失敗しています。hostapdが起動できているか確認してください。

ラズパイで構築したWi-Fiアクセスポイントに接続してみる ~ あとがき

以上でラズパイをWi-Fiアクセスポイントとして構築できました。スマートフォンやパソコンから、ラズパイで構築したWi-Fiアクセスポイントに接続してみましょう。IPアドレスを確認してみると、ラズパイと同じネットワークであることが確認できるはずです。

pmacctによるトラフィック計測や、ラズパイの今後の運用についてはNAPTパターン側のブログをご覧ください。

― ソラコム松下 (Max / @ma2shita)

参考資料: