こんにちは、ソラコムの松下(ニックネーム: Max)です。
Raspberry Pi (通称: ラズパイ)に、ブリッジパターンによるWi-Fiアクセスポイントを構築し、その上でトラフィック計測をする方法を紹介します。
IoTの本番運用に向けては、トラフィック計測が不可欠です。その理由や計測することで明確になることは「ラズパイで作るWi-Fiアクセスポイントと、トラフィック計測 (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 -ysudo systemctl reboot
4. dhcpcdによるwpa_supplicant起動の無効化
wpa_supplicantは、Wi-Fiアクセスポイントに接続する際の認証(WPA)を通すためのソフトウェアです。今回は、ラズパイ自体がWi-Fiアクセスポイントになることから、このソフトウェアが動作していると競合を起こすため停止します。
# mainsudo systemctl stop wpa_supplicant.servicesudo systemctl mask wpa_supplicant.servicecat << _EOT_ | sudo tee -a /etc/dhcpcd.confnohook 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 agops h -C wpa_supplicant#=> <何も表示されないのが正解>
5. hostapdによるWi-Fiアクセスポイント化
hostapdは、Wi-Fiアクセスポイントサーバーソフトウェアです。このソフトウェアによって、ラズパイの無線LANインターフェイスをWi-Fiアクセスポイントとして動かすことができます。
ここでは SSID = TESTWLAN0
、パスワード = Aihei2oB
と設定しています。これらは変更して利用してください。
# variables_SSID_=TESTWLAN0_WPA_KEY_=Aihei2oB# mainsudo apt install -y hostapdsudo systemctl unmask hostapd.servicecat << _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.confinterface=wlan0bridge=br0driver=nl80211ssid=${_SSID_}hw_mode=gchannel=11macaddr_acl=0ignore_broadcast_ssid=0auth_algs=1ieee80211n=1wme_enabled=1country_code=JPwpa=2wpa_passphrase=${_WPA_KEY_}wpa_key_mgmt=WPA-PSKwpa_pairwise=CCMPwpa_group_rekey=86400_EOT_sudo chmod 600 /etc/hostapd/hostapd.confhistory -d -8 # erase "_WPA_KEY_" in historysudo 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でつなげます。
# mainsudo apt install -y bridge-utilscat << _EOT_ | sudo tee /etc/network/interfaces.d/br0.confauto br0iface br0 inet dhcpbridge_ports eth0 wlan0_EOT_sudo systemctl restart networking.service
確認
以下のコマンドで、先の設定が完了しているか確認します。
sudo brctl showbridge name bridge id STP enabled interfacesbr0 8000.xxxxxxxxxxxx no eth0wlan0
ここでwlan0が表示されていない場合は、hostapdによるwlan0インターフェイスの有効化に失敗しています。hostapdが起動できているか確認してください。
ラズパイで構築したWi-Fiアクセスポイントに接続してみる ~ あとがき
以上でラズパイをWi-Fiアクセスポイントとして構築できました。スマートフォンやパソコンから、ラズパイで構築したWi-Fiアクセスポイントに接続してみましょう。IPアドレスを確認してみると、ラズパイと同じネットワークであることが確認できるはずです。
pmacctによるトラフィック計測や、ラズパイの今後の運用についてはNAPTパターン側のブログをご覧ください。
― ソラコム松下 (Max / @ma2shita)