Raspberry Pi 3とUSB 3Gモデムでワイヤレスホットスポットを作る

Raspberry Pi Wireless Hotspot with 3G Modem
これまでの設定でRaspberry Pi 3のホットスポット化とUSB 3Gモデム接続ができるようになりました。2つを組み合わせてればスマートフォンのテザリングと同じようにRaspberry Piをワイヤレスな通信拠点にできます。
タブレットやノートPCをつなげばRaspberry Piのどこでも開発環境にもなります。

どこにいてもインターネットにつながるようRaspberry Pi 3をワイヤレスホットスポットにしてみます。

必要なハードウエア

  1. Raspberry Pi 3
  2. USB 3G Modem
です。もちろん電源やSDカードもですけどね。内蔵WiFiを使います。

必要なソフトウエア

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;fi
ppp0の設定では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 Wireless Hotspot with 3G Modem

Raspberry PiへWiFi経由でssh接続も当然できますし、リモートデスクトップ接続も可能です。
Raspberry Pi 3へのリモートデスクトップ接続でサウンド、クリップボードとドライブリダイレクトを使えるようにする
インターネットも見れます。

スマートフォンのテザリングと同じようにRaspberry Piを使う事ができます。まぁ、スマートフォンで事足りるのでわざわざ使う事はあまりない気がします。
ワイヤレスホットスポット化をする大きな理由は、どこでもRaspberry Piへの接続ができる事にあると思います。IoT化の動作確認がしやすくなるかも。
これで海で遊んでいてもRPiをいじれる。防水ケース欲しいなぁ。

コメント

最近のコメント

Threaded Recent Comments will be here.