IoT(Internet of Things)は、ネットワークを介したデバイスの相互接続性を活用する技術であり、センサやカメラ画像を利用したデータ交換やデバイスの遠隔制御を可能にします。IoTの導入が拡大するにつれ、一般にトラフィックと呼ばれるネットワーク通信をより深く理解することが求められています。この情報は、ネットワークの容量と使用量を決定する上で極めて重要であり、トラフィックが分かれば、次のことが明らかになります。
- 本格的な使用に必要な通信速度と帯域幅
- ビジネス分野における従量課金制ネットワーク利用の推計
トラフィック通信量はセンサや機器の仕様に基づいて計算できますが、暗号化やシステム統合の際に発生するオーバーヘッドによって、これらの要素に大きなばらつきが生じる可能性があります。運用に近づけるためには徹底した計測が一番ですが、センサやカメラ側にトラフィック計測の仕組みがなければ、それすらできない場合もあります。
そこで本プロジェクトでは、Raspberry Pi(以降「Raspi」)をWi-Fiアクセスポイントとして利用し、センサやカメラからのトラフィックを中継するとともに、トラフィックを計測するシステムを紹介します。
まず、Raspiに「hostapd」をインストールします。これは、ネットワークインターフェースカードをアクセスポイントや認証サーバとして機能させ、無線LANインターフェース(wlan0)をWi-Fiアクセスポイントとして使用できるようにするソフトウェアです。インターネット側との通信には必ず有線LAN(eth0)を使うようにしてください。
Wi-Fi経由でRaspiに接続する機器へのIPアドレスの割り当て(DHCP)にはdnsmasqを用い、Raspiを経由する通信のアドレス変換(NAPT)にはnftablesを用います。
次にpmacctを使って無線LANインターフェースを通過するトラフィックを測定します。
NAPTを利用すれば、無線LAN側に多数のIoT機器が接続されていても、有線LAN側に割り当てられた1つのIPアドレスで通信できるため、既存環境への影響を最小限に抑えられるメリットがあります。
アクセスポイント構築には、NAPT patternの他にBridge Patternがあります。構築の手間はほとんど変わりませんが、構成の違いやそれぞれのメリットについてはBridge Pattern(内容は日本語)を参照してください。
Raspiを使ったWi-Fiアクセスポイントの構築手順(NAPT Pattern)
実際に作ってみましょう。約30分ほどです。
Raspberry Pi 3 model B+を使用します。無線LANと有線LANの両方が搭載されているモデルであれば何でも構いませんが、model 3かmodel 4をお勧めします。
- Raspberry Pi Imagerでプログラミングする場合の設定
Raspberry Pi Imagerは、Lite version (64-bit)を含むRaspberry Pi OSをインストールするための一般的なツールです。
プログラミング時の設定は以下の表のとおりです。
項目 | 設定例 | 備考 |
---|---|---|
ホスト名 | hostapd-napt | 名前は任意です。 |
SSH | Enabled | 認証方法は任意です。公開鍵認証には SSH鍵が必要です。この準備ができて いない場合は、パスワード認証を選択 してください。 |
ユーザー名と パスワード |
FooBar – User name = hostapdPassword = FooBar |
これは任意です。特にパスワードは、予測 不可能な文字列を指定してください。パス ワード生成ツールの利用も効果的です。 |
Wi-Fi | 設定不要 | |
地域設定 | us – Timezone = Asia/Tokyo Keyboard Layout = us |
任意ですが、この設定を推奨します。 |
- Raspiの有線LANからのインターネット接続を確認します。
Raspiの有線LANポート(eth0)にケーブルを差し込み、インターネットに接続できることを確認 してください。以下の作業は、SSH経由のリモートアクセスでも可能です。
- 最初に起動したあとOSをアップデートします。
Raspberry Pi OSが起動したら、まずインストーラとライブラリをアップデートします。再起動するとアップデートが完了します。
- dhcpcdによりwpa_supplicant Activationを無効にし、wlan0に固定IPを割り当てます。
wpa_supplicantは、Wi-Fiアクセスポイントに接続する際に認証(WPA)を通すためのソフトウェアです。今回はRaspi自体がWi-Fiアクセスポイントになるため、このソフトが起動していると衝突を起こすので停止します。同時に、無線LANインターフェース(wlan0)に固定IPアドレスを割り当てます。
wlan0には10.0.2.254というアドレスを使っています。基本的にはこのままで問題ありませんが、eth0側のネットワークと競合する場合は変更してください。
確認
以下のコマンドを使用して、上記の設定が完了したことを確認 してください。
- Wi-Fiアクセスポイント向けhostapd
hostapdはWi-Fiアクセスポイントサーバのソフトウェアです。このソフトウェアを使うと、Raspiの無線LANインターフェースをWi-Fiアクセスポイントとして動作させることができます。
ここでは、SSID = TESTWLAN0、パスワード = Aihei2oBを設定しています。これらの設定は自由に変更できます。
確認
以下のコマンドを使用して、上記の設定が完了したことを確認 してください。
- dnsmasq DHCPサーバ
dnsmasqは軽量なDNS/DHCPサーバのソフトウェアです。この場合、DHCP機能はWi-Fiアクセスポイントに接続したデバイスにIPアドレスを割り当てるために使用されます。
割り当てられるIPアドレスの範囲は、10.0.2.100~10.0.2.109の10アドレスです。また、DNSサーバは、GoogleとCloudflareがそれぞれ運営するパブリックDNSサーバのアドレスを割り当て用とします。アドレス数、DNSサーバ数ともにこのままで問題ありませんが、IPアドレスがもっと必要な場合や、組織で使用すべきDNSサーバアドレスがある場合は変更してください。
確認
以下のコマンドを使用して、上記の設定が完了したことを確認 してください。
- NAPTゲートウェイ用のnftables
nftablesはiptablesなどを統合したIPパケットフィルタミドルウェアです。ここでは、wlan0 とeth0間の通信にアドレス変換 (NAPT) を適用するために使っています。また、net.ipv4.ip_forwardを有効にして、wlan0とeth0間の通信を許可します。
確認
以下のコマンドを使用して、上記の設定が完了したことを確認 してください。
- Raspiに構築されたWi-Fiアクセスポイントに接続してみましょう。
RaspiをWi-Fiアクセスポイントとして構築したので、スマートフォンやPCからRaspiのWi-Fiアクセスポイントに接続してください。
接続が完了すれば、https://ifconfig.ioなどのツールサイトを閲覧できるかどうかを確認してください。
pmacctによるトラフィック計測
pmacctはトラフィック測定ソフトウェアです。例えば、以下のようにすると、Wi-Fiアクセスポイントとして設定されたwlan0インターフェースを通過するトラフィック通信量を測定することができます。
10秒ごとに次のように画面に出力さ れます。
10.0.2.100(チェックに使用したスマートフォンのIPアドレス)からDNSサーバに設定した1.1.1.1まで、または10.0.2.100から8.8.8.8.8までの通信を行い、その時の通信量をパケット数とバイト数で計測します。これによって通信量を把握することができます。
ここでは単にデータを画面に表示していますが、pmacctはSQLiteのように、データベースにデータを保存することもサポートしています。詳しくはトラフィック計測ツール “pmacct” の結果をSQLiteに保存するを参照してください。
今後の運用 - Raspiの安定した動作を目指して
RaspiをWi-Fiアクセスポイントにすることはできましたが、このようなことは迅速に済ませたいですし、検証の時だけであってほしいものです。従って、Raspiを安定動作させる1つの方法として、「電源のON/OFFだけで動作するシステム」をご検討ください。
Soracom Peekによるモバイル通信トラフィックのチェック
IoTではWi-Fiだけでなく、LTEや5Gなどのモバイル通信も利用されています。その場合、SORACOM プラットフォーム上でIPパケットをキャプチャできるSoracom Peekをご利用ください。
Soracom Peekは、SIM(通信回線)またはVPG(ネットワーク)単位でのキャプチャが可能です。そのフォーマットはWiresharkなどの標準的なパケットアナライザで解析可能なpcap形式です。
おわりに
IoTの本格的な活用には、通信量の推定が欠かせません。特に昨今はカメラの普及により通信量が増加する傾向にあります。少なくとも一回は計測を行い、必要な通信速度や通信帯域を確認することで、安定したIoTシステムの構築が可能となります。
コストを抑えながら実現可能ですので、ぜひ活用してください。