最短翌日発送!高速大容量のモバイルWi-Fiルーターの詳細はこちら
DIY・電子工作

Raspberry Piで車載用のモバイルWi-Fiルーターを自作してみた

ラズパイで自作したモバイルWi-Fiルーター DIY・電子工作

※この記事には広告(アフィリエイトリンク)が含まれますのであらかじめご了承ください。

車載用のモバイルWi-Fiルーターをラズパイで自作したので、その作り方をまとめておきました。

今まで複数のモバイルWi-Fiルーターやホームルーターを車載してきましたが、どれもこれも今一つで。最終的にドラレコとして運用しているラズパイにUSBモデムを刺して、モバイルWi-Fiルーターとしても運用することにしました。

私のように既にラズパイを車載しているなら+3,000円程度で自作することが可能なので、Wi-Fi環境を整えたいなら新たにモバイルWi-Fiルーターを購入するよりも安価で済ませられておすすめです。

スポンサーリンク
スポンサーリンク

車載用のモバイルWi-Fiルーターをラズパイで自作するメリット

車載用のモバイルWi-Fiルーターをラズパイで自作するメリットは主に3つあります。

電源のON/OFFを車のエンジンと連動させられる

バッテリーを内蔵している一般的なモバイルWi-Fiルーターは、外部電源と繋いでも自動的に起動することはありません。

しかしラズパイはUSBで給電するだけで自動的に起動するので、電源のON/OFFを車のエンジンと連動させることができます。

車に乗るたびに電源ボタンを押す必要がなく、ラズパイで自作したモバイルWi-Fiルーターのほうが使い勝手が良いです。

Wi-Fiを搭載したUSB型データ通信端末を購入するよりも低価格で作れる

PIX-MT100やPIX-MT110、Si-L10などバッテリーを内蔵せずUSBで給電するだけで起動するUSB型データ通信端末も存在しますが、これらの機種は実勢価格が1万円を超えます。

メーカー製品としては特に高過ぎるということはありませんが、中古のUSBモデムならイオシスでL-03Dあたりが3,000円程度で手に入りますし、ラズパイも安価なRaspberry Pi Zero WHなら2,000円程度で購入可能です。まあRaspberry Pi ZeroだとOTGケーブルが必要なので総費用は6,000円ほどかかりますが。

上位モデルのRaspberry Pi 3Bや3B+、4Bだと5,000円を超えてきますが、それでも市販されている既製品を購入するよりも安く済ませられるでしょう。

ちなみにカメラモジュールを搭載すればドライブレコーダーとしても使えます。ドラレコの作り方については以下の記事を参照してください。

Raspberry Pi Zeroで簡易ドライブレコーダーを自作する
Raspberry Pi Zero WHで簡易的なドライブレコーダーを自作してみました。 ドラレコは既製品でも安価なものなら1万円以下で手に入ります。しかしそんなに頻繁に運転するわけでもないですし、特別ドラレコが欲しいというわけではなかった...

WiMAX 2+のL01s/L02などホームルーターよりもコンパクト

中古という選択肢がアリなら、WiMAX 2+向けのホームルーター端末が安価で手に入りますし、コンセントから給電する必要があるものの電源をエンジンと連動させることも可能です。イオシスなら未使用品が格安で売られていることもあります。

ただホームルーター端末は無駄に大きくて場所を取るんですよね。本体だけでなく、ACアダプターも無駄に大きくて邪魔だったりしますし、さらにコンセントが搭載されていない車種ならインバーターも必要になります。

個人的には消費電力が無駄に大きいのも嫌です。家の中とは違ってワンルームよりも狭い車内でしか使わないのですから、Wi-Fiの出力はそんなに強くなくても構いません。

ラズパイならホームルーターのどの機種よりも小さいですし、電源も普通のUSBケーブルで済むのでこちらのほうが車載しやすいです。

ラズパイでモバイルWi-Fiルーターを作る方法

ラズパイにDHCPサーバーを設定する方法はいくつかありますが、私はdnsmasqを採用しました。

isc-dhcp-serverを採用している解説記事を多く見かけますが、こちらはどうも古いやり方のようで記事もかなり昔に書かれているものが多いです。

特にデメリットもないですし、isc-dhcp-serverよりもdnsmasqを使用することをおすすめします。

使用した物や環境について

Raspberry Pi 3BにRaspberry Pi OSをインストールして実装してみましたが、どうもWi-Fi周りがシビアのようで、既にWi-Fi接続の設定などを行っている状態だとDHCPサーバーが正常に起動しなかったり、アクセスポイントとしてさえ動作しなかったりすることがあります。

原因をしっかり調べて対処すれば実装可能だとは思いますが、かなり骨が折れるかもしれません。

上手くいかない場合はWi-Fi周りの設定をリセットするか、OSをクリーンインストールした状態で試してみてください。

ラズパイにUSBモデムの設定をする

最初にラズパイにUSBモデムを接続して、モバイルネットワークで通信可能な状態にしておきましょう。

USBモデムの設定方法については以下の記事を参照してください。

Raspberry PiでUSBモデムのL-03Fを使用してLTEで通信する方法
車内でWi-Fiを利用するために当初はモバイルWi-FiルーターのFS030Wを車載してみましたが、電源がなかなかエンジンと連動してくれず。自動起動に失敗することが多いので、他の方法をいろいろと模索していたのですが。 ホームルーターのWiM...
Raspberry PiでSIMフリーのUSBモデムUX302NCを使用する方法
株式会社ネクス製のNCXX UX302NCはSIMフリーのUSBモデム、USB型データ通信端末です。 同じようなスペックのL-03Fを既に持っていますが、こちらはSIMロックがかかっているためそのままではdocomo系のSIMカードしか使用...

dhcpcdの設定

ここから先についてはITmediaの記事を参考にさせていただきました。大筋はこの記事の通りに設定すればOKです。

ラズパイを無線LANルーター化する 〜アクセスポイント編〜
家庭内で無線LANルータを使っている人は多いかと思います。今回はそのルーター機能をラズパイに持たせて、ラズパイを使った無線LANルーターの構築方法についてご紹介します。

ただこれだけだと上手くいかない部分があったり、改善したほうが良いと思われる部分もいくつかあったので、私が実際に行った設定を一通りまとめておきました。

まずDHCPサーバーとして払い出すIPアドレスなどの設定を行うために、dhcpcdの中身を編集します。

systemctlコマンドでdhcpcdを停止させましょう。

$ sudo systemctl stop dhcpcd

次にnanoなどのエディタを起動して/etc/dhcpcd.confを編集します。

$ sudo nano /etc/dhcpcd.conf

エディタを起動したら、アドレス空間を設定するために下記の2行を追記しましょう。

interface wlan0
static ip_address=192.168.2.1/24

アドレス空間は192.168.10.1/24や192.168.100.1/24などでも構いませんが、自宅のLANなど既存のアドレス空間と重複しないようにだけ注意してください。

編集が完了したらdhcpcdを再起動します。

$ sudo systemctl restart dhcpcd

hostapdの設定

dhcpcdの編集が完了したら、次はhostapdをインストールしてアクセスポイントとして使用するために必要な設定を行います。

$ sudo apt install hostapd

インストールが完了したらhostapdの設定を行っていきましょう。

hostapd.confを作成する

nanoなどのエディタで下記のディレクトリにhostapd.confを作成してください。

$ sudo nano /etc/hostapd/hostapd.conf

中身は以下の内容をコピペして必要な箇所だけ修正してもらえればOKです。

interface=wlan0
driver=nl80211
hw_mode=g
channel=1
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ieee80211ac=0
wmm_enabled=1
ieee80211d=1
country_code=JP
ieee80211h=1
local_pwr_constraint=3
spectrum_mgmt_required=1
wpa=2
wpa_key_mgmt=WPA-PSK
ssid=xxxxxxxx
wpa_passphrase=xxxxxxxx
rsn_pairwise=CCMP

hw_modeでは使用する無線LAN規格をIEEE 802.11gに指定しています。IEEE 802.11aを使用できる環境ならaという選択肢もありますが、車載するなら屋外では5GHz帯を利用できないのでgにしておきましょう。

channelは何でも良い気がします。使用する場所が固定されている混雑していないチャンネルに固定すべきですが車載するなら以下略。

macaddr_aclはMACアドレスによるフィルタリング、ignore_broadcast_ssidはステルスSSIDの設定ですが、これらはセキュリティ的に無意味だったりむしろ逆効果の場合さえあるので通常はOFFで良いでしょう。

wpaは無線LANの認証方式、WPAのバージョンを指定します。記事ではWPA1とWPA2の両方を利用できるようにwpa=3と指定されていますが、脆弱なWPA1に対応させるメリットはないのでwpa=2にすべきでしょう。

ssidとwpa_passphraseは任意の文字列を設定してもらえればOKです。

最後の1行は、暗号化方式にTKIPの代わりによりセキュアなCCMP、つまりAESを使用するための設定です。TKIPよりも安全なのでぜひAESを使用しましょう。

hostapdのデフォルト動作ファイルを設定する

次にデフォルトで用意されているファイルを編集して、先ほど作成したhostapd.confを指定します。

具体的にはエディタで以下のファイルを開いてください。

$ sudo nano /etc/default/hostapd

#DAEMON_CONF=””とコメントアウトされている行を探して、以下のように書き換えます。

DAEMON_CONF="/etc/hostapd/hostapd.conf"

hostapdが正常に動作しているか確認する

この時点でhostapdの設定は完了していますが、systemctlコマンドで確認してみると恐らく正常に動作していません。

hostapdが正常に動作していない場合は、以下のコマンドを順番に実行して再起動させてみましょう。拡張子は省略しても大丈夫です。

$ sudo systemctl unmask hostapd.service
$ sudo systemctl enable hostapd.service
$ sudo systemctl start hostapd.service

hostapdの調子が悪い場合は大抵これで解決します。

ポートフォワーディングを設定する

最後にポートフォワーディングを有効化するために/etc/sysctl.confを編集します。

$ sudo nano /etc/sysctl.conf

#net.ipv4.ip_forward=1とコメントアウトされている行を探して、先頭の#を削除しましょう。

この時点で既にラズパイに設定しているSSIDが見えるようになっているはずなのですが、何故かWi-Fiを飛ばしてくれないことがあります。

raspi-configでWi-Fi関係の設定を弄ってみようとすると、could not communicate with wpa_supplicantというメッセージが表示されたのでこれを頼りにググってみたところ、解決法が分かりました。

https://saitetu.net/entry/2018/05/01/010428

以下のようにエディタを起動して当該のファイルを編集します。

$ sudo nano /etc/network/interfaces

そして下のほうに以下の3行を追記してください。

allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

編集した内容を保存したら、systemctlコマンドでwpa_supplicant.serviceを有効化します。

$ sudo systemctl enable wpa_supplicant.service

これでラズパイを再起動すると無事SSIDが見えるようになりました。

ただSSIDが見えるようになってもDHCPサーバーが存在しないので、普通にWi-Fi接続しようとしてもIPアドレスが払い出されず接続に失敗してしまいます。まあ手動で静的IPアドレスを設定してやれば繋がらないことはありませんが。

そこで次にdnsmasqをインストールしてDHCPサーバーを設定します。

dnsmasqを設定する

まずは以下のコマンドでdnsmasqをインストールしましょう。

$ sudo apt install dnsmasq

インストールが完了したら設定ファイルを編集するためにsystemctlコマンドでdnsmasqを停止させておきます。

$ sudo systemctl stop dnsmasq.service

dnsmasq.confを新しく作成する

設定ファイルはそのまま編集しても構いませんが、不要な記述が非常に多いのでITmediaの記事にならって新しく作成しましょう。デフォルトのファイルは名前を変更してバックアップとして取っておきます。

$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.def

バックアップを取れたら新しく作り直してください。

$ sudo nano /etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.2.2,192.168.2.100,255.255.255.0,24h

IPアドレスの範囲はdhcpcd.confの設定に合わせましょう。

IPマスカレードを設定する

次にIPマスカレードの設定を行いますが、今回はUSBモデムをWANとして使用するので、パケットが出ていくインターフェースとしてeth0ではなくppp0を指定します。

また記事ではrc.localを使用する方法が解説されていますが、systemdが採用されているラズパイにおいてはこちらを使用することが推奨されているので、私はsystemdで読み込むように設定しました。

当初はrc.localの部分をそのままsystemdに置き換えて、iptables-restoreコマンドを直接systemdで実行させようとしたのですが、このやり方だと高確率で自動起動に失敗します。ラズパイ起動直後はiptables-restoreがあるディレクトリへアクセスすることが保証されていないせいでしょうか?

そこで教科書通りにoptディレクトリにシェルスクリプトを作成して、これを実行するサービスファイルをsystemdに登録したところ、無事安定してIPマスカレードの設定を読み込ませることに成功しました。

まずはシェルスクリプトを作成します。

$ sudo nano /opt/ipmasquerade.sh
#!/bin/sh

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

作成したスクリプトに実行権限を与えましょう。

$ sudo chmod 0755 /opt/ipmasquerade.sh

次にスクリプトを実行するためのサービスファイルを作成します。

$ sudo nano /etc/systemd/system/ipmasquerade.service
[Unit]
Description = IP MASQUERADE

[Service]
ExecStart = /opt/ipmasquerade.sh
Type = oneshot
RemainAfterExit = yes

[Install]
WantedBy = multi-user.target

サービスファイルを作成したら有効化しましょう。

$ sudo systemctl enable ipmasquerade.service

これでrc.localに頼らなくてもsystemdでIPマスカレードの設定を自動的に読み込めるはずです。

ラズパイを再起動させて、モバイルWi-Fiルーターとして機能しているか確かめてみてください。

ちなみにRaspberry Pi 3Bで以上の設定を行った場合、Wi-Fiのリンク速度は最大72Mbpsでした。docomoのSIMを入れたL-03FでLTE回線に繋いだ実効速度は上下ともに20Mbps程度で安定しており、車載用途としては十分な通信速度が出ています。

電源ぶつ切りで運用するためにROM化する

仕上げとして、ラズパイの電源をアクセサリーソケットなどACC電源から取るのであればROM化しておきましょう。シャットダウンを行わずにエンジンを止めて電源をぶつ切りすると、すぐにシステムファイルが壊れてしまいます。

UPSを使用したり、他の方法で対策するのであれば必須の作業ではありませんが、ROM化が1番簡単でしょう。ROM化については以下の記事を参照してください。

Raspberry PiをROM化して車載、電源ぶつ切りで運用してみた
自作ドラレコとして車載したラズパイを安全にシャットダウンする方法として以前UPS PIcoを紹介しましたが、今現在はドラレコとしては運用しておらず、もっぱら車載ルーターとして使用しています。そもそも高温になりやすい車でバッテリーを内蔵したU...

まとめ

ラズパイとUSBモデムがあれば、モバイルWi-Fiルーターを自作することが可能です。

この自作モバイルWi-Fiルーターなら車のエンジンと連動して自動的に起動してくれますし、普通のWiMAX 2+やPocket WiFiを車載するよりも使い勝手が優れています。

特に自作ドラレコなどで既にラズパイで車載しているなら、たった数千円の追加費用でモバイルWi-Fiルーター化することが可能です。

わざわざ市販品を購入するよりも安価で済ませられるので、興味がある方にはぜひ自作をおすすめします。

コメント

タイトルとURLをコピーしました