こんにちは、ソラコムの松下(ニックネーム: 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 -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)