Raspberry Pi 3とUSB 3Gモデムでワイヤレスホットスポットを作る
これまでの設定でRaspberry Pi 3のホットスポット化とUSB 3Gモデム接続ができるようになりました。2つを組み合わせてればスマートフォンのテザリングと同じようにRaspberry Piをワイヤレスな通信拠点にできます。
タブレットやノートPCをつなげばRaspberry Piのどこでも開発環境にもなります。
どこにいてもインターネットにつながるようRaspberry Pi 3をワイヤレスホットスポットにしてみます。
事前にホットスポット化とUSB 3G モデムを使えるようにしてください。
内蔵WiFiでホットスポット化をする環境を整えます。こちらの記事にやり方を書いています。
外出時にRaspberry Pi 3を起動すると自動的にホットスポットになるスクリプトを作りました(RPi3_Switchable_HOTSPOT)
USB 3GモデムをRaspberry Pi 3で使えるように設定します。L-02Cを例にしたやり方をこちらの記事に書いています。
USB 3G モデム L-02CをRaspberry Pi 3で使えるようにしてMVNOのSIMカードで通信する
この手順に沿って環境を整えている事を前提に説明していきます。
/etc/network/interfacesをエディタで開いてください。
GitHubのRPi3_Switchable_HOTSPOTで設定した方はすでにこの修正がされているかもしれません。
iface hotspot0 スタンザを次のように書き換えます。
そのため、追加で次の記述をしてください。
nat1をまだ定義していません。モデムを通信経路にする論理インターフェースをnat1として追加します。
モデムはRPiが動いてから挿すことを前提としています。
外出時にRaspberry Piの電源を入れるとESSIDをサーチします。登録したESSIDが見つからないでしょうからホットスポットとして動作します。Raspberry Piがアクセスポイントになります。
この時USB 3Gモデムを挿すと、オンボードLANから3Gモデムへ経路が変更されます。
自宅など登録したESSIDがある場所ではRaspberry PiのWiFiはクライアントモードで動きます。自宅のアクセスポイントに接続されるでしょう。この時、3Gモデムをつないだ場合は通信経路がモデムに変更されますが、WiFiはホットスポット化していませんのでRaspberry Piとスマートフォンなどは直接接続できません。
自宅などにいて手動でワイヤレスホットスポット化するには、
一度USB 3Gモデムを抜いてください。
ホットスポット化のコマンド
USB 3Gモデムを挿してください。
Raspberry PiへWiFi経由でssh接続も当然できますし、リモートデスクトップ接続も可能です。
Raspberry Pi 3へのリモートデスクトップ接続でサウンド、クリップボードとドライブリダイレクトを使えるようにする
インターネットも見れます。
スマートフォンのテザリングと同じようにRaspberry Piを使う事ができます。まぁ、スマートフォンで事足りるのでわざわざ使う事はあまりない気がします。
ワイヤレスホットスポット化をする大きな理由は、どこでもRaspberry Piへの接続ができる事にあると思います。IoT化の動作確認がしやすくなるかも。
これで海で遊んでいてもRPiをいじれる。防水ケース欲しいなぁ。
タブレットやノートPCをつなげばRaspberry Piのどこでも開発環境にもなります。
必要なハードウエア
- Raspberry Pi 3
- USB 3G Modem
必要なソフトウエア
OSにはRASPBIAN WITH PIXELを使います。事前にホットスポット化とUSB 3G モデムを使えるようにしてください。
内蔵WiFiでホットスポット化をする環境を整えます。こちらの記事にやり方を書いています。
外出時にRaspberry Pi 3を起動すると自動的にホットスポットになるスクリプトを作りました(RPi3_Switchable_HOTSPOT)
USB 3GモデムをRaspberry Pi 3で使えるように設定します。L-02Cを例にしたやり方をこちらの記事に書いています。
USB 3G モデム L-02CをRaspberry Pi 3で使えるようにしてMVNOのSIMカードで通信する
この手順に沿って環境を整えている事を前提に説明していきます。
/etc/network/interfacesの修正
ホットスポット化とモデムの設定ができていれば、通信ルートの設定をするだけでワイヤレスホットスポットになります。
設定を少し整理して簡単に切り替えができるようにしてみます。/etc/network/interfacesをエディタで開いてください。
hotspot0の修正
以前の記事のホットスポット化の手順ではホットスポット用論理インターフェースhotspot0にネットワーク設定、サービス設定とNAT設定とすべて入れてしまいました。融通か利かない書き方になっているので機能を分離した記述にします。GitHubのRPi3_Switchable_HOTSPOTで設定した方はすでにこの修正がされているかもしれません。
iface hotspot0 スタンザを次のように書き換えます。
iface hotspot0 inet static address 192.168.42.1 netmask 255.255.255.0 post-up ifup nat0 post-up ifup services0 pre-down ifdown services0 pre-down ifdown nat0ネットワークインターフェースに関する項目だけ設定するようにします。NAT設定とサービス設定はnat0とservices0という論理インターフェースに分離して設定することにしました。
そのため、追加で次の記述をしてください。
iface nat0 inet manual up sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE up iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT up iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT down iptables -D FORWARD -i wlan0 -o eth0 -j ACCEPT down iptables -D FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT down iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE down sh -c 'echo 0 > /proc/sys/net/ipv4/ip_forward' iface services0 inet manual up service hostapd start /etc/hostapd/hostapd.conf up service udhcpd start down service udhcpd stop down service hostapd stop以前の設定と動作は何も変わりません。機能を分離し書き直しました。
ppp0の修正
USB 3Gモデムの設定も変更します。ホットスポット時にppp0と通信を転送するようにします。allow-hotplug ppp0 iface ppp0 inet wvdial pre-up sleep 3 up if [ `ifquery --state nat0` ]; then ifdown nat0; ifup nat1;fi down if [ `ifquery --state nat1` ]; then ifdown nat1; ifup nat0;fippp0の設定ではnat0インターフェースが起動しているか調べ、起動していればnat0を落としてnat1を起動します。
nat1をまだ定義していません。モデムを通信経路にする論理インターフェースをnat1として追加します。
iface nat1 inet manual up sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' up iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE up iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT up iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT down iptables -D FORWARD -i wlan0 -o ppp0 -j ACCEPT down iptables -D FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT down iptables -t nat -D POSTROUTING -o ppp0 -j MASQUERADE down sh -c 'echo 0 > /proc/sys/net/ipv4/ip_forward'nat0とnat1の違いはeth0がppp0に変わっただけです。変数の受け渡しができればもっときれいに書けそうなのに。
使い方
ホットスポットとして動いている時にUSB 3Gモデムを挿すと、自動的に3Gモデム経由でネットワークへつながります。3Gモデムを抜くとオンボードLAN経由に戻ります。モデムはRPiが動いてから挿すことを前提としています。
外出時にRaspberry Piの電源を入れるとESSIDをサーチします。登録したESSIDが見つからないでしょうからホットスポットとして動作します。Raspberry Piがアクセスポイントになります。
この時USB 3Gモデムを挿すと、オンボードLANから3Gモデムへ経路が変更されます。
自宅など登録したESSIDがある場所ではRaspberry PiのWiFiはクライアントモードで動きます。自宅のアクセスポイントに接続されるでしょう。この時、3Gモデムをつないだ場合は通信経路がモデムに変更されますが、WiFiはホットスポット化していませんのでRaspberry Piとスマートフォンなどは直接接続できません。
自宅などにいて手動でワイヤレスホットスポット化するには、
一度USB 3Gモデムを抜いてください。
ホットスポット化のコマンド
sudo ifdown wlan0 sudo ifup wlan0=hotspot0を実行します。
USB 3Gモデムを挿してください。
まとめ
ホットスポット化とUSB 3Gモデムが使えるようになっていれば、後はルート設定をするだけでワイヤレスホットスポットにできます。Raspberry PiへWiFi経由でssh接続も当然できますし、リモートデスクトップ接続も可能です。
Raspberry Pi 3へのリモートデスクトップ接続でサウンド、クリップボードとドライブリダイレクトを使えるようにする
インターネットも見れます。
スマートフォンのテザリングと同じようにRaspberry Piを使う事ができます。まぁ、スマートフォンで事足りるのでわざわざ使う事はあまりない気がします。
ワイヤレスホットスポット化をする大きな理由は、どこでもRaspberry Piへの接続ができる事にあると思います。IoT化の動作確認がしやすくなるかも。
これで海で遊んでいてもRPiをいじれる。防水ケース欲しいなぁ。
コメント
コメントを投稿