RASPBIAN STRETCHでUSB 3G/4Gモデムを使い屋外でもネットワーク接続をする

Raspbian StretchにUSB 3G/4Gモデムをつないでみます。屋外ではWiFiアクセスポイントになる設定をしています。
基本的にjessieの頃と同じ設定で動かせるようですが、interfacesファイルの扱いには注意が必要でしょう。

以前の記事
USB 3G モデム L-02CをRaspberry Pi 3で使えるようにしてMVNOのSIMカードで通信する
と同様にRaspbian StretchでもL-02Cを使えるようにしてみます。
USBモデムは2つの異なるモードがあるそうです。コンピュータに最初に接続するとUSBドライブとして動作し、一度取り外し操作をするとUSBモデムとして動きます。モデムのドライバをモデムに内蔵していて簡単にインストールできるようにしているようです。
Windows用ドライバを入れるためなのでWindowsマシン以外には意味がありません。
LinuxマシンでもUSBドライブとして最初に見えてしまうので自動的に取り外してモデムモードへ変更する必要があります。

RASPBIAN STRETCHには最初からUSBのモードを切り替える設定がなされているようです。
/lib/udev/rules.d/40-usb_modeswitch.rulesにモードスイッチのルールが書かれています。ご自分のモデムの記述があるかファイルをテキストエディタで開いて探してみてください。
私が使うUSB 3G/4GモデムはL-02Cです。/lib/udev/rules.d/40-usb_modeswitch.rulesに次のように書かれています。
# LG L-02C LTE
ATTR{idVendor}=="1004", ATTR{idProduct}=="61dd", RUN+="usb_modeswitch '/%k'"
usb_modeswitchはすでに動くので追加で設定する必要は無いようです。

ダイアルアップするためのツールをインストールします。
sudo apt install ppp wvdial
wvdialの設定をします。/etc/wvdial.confを次のように書き換えました。私のSIMカードはIIJmioです。SIMに合わせたAPN設定も行います。
[Dialer Defaults]
Init1 = ATZ
Init2 = ATH
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init4 = AT+CGDCONT=2,"IP","iijmio.jp"
Dial Attempts = 3
Stupid Mode = 1
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
APN = iijmio.jp
Modem = /dev/ttyUSB2
ISDN = 0
Phone = *99***2#
Carrier Check = no
Password = iij
Username = mio@iij
jessieの時はモデムに/dev/gsmmodemのリンクが自動的に付いたのですがstretchでは使えません。モデムの指定は多くの場合/dev/ttyUSB2となります。

接続できるか試します。
sudo wvdial
問題なければppp0インターフェースができIPアドレスが割り当てられます。
ここまで動けば基本的にモデムが使えます。
この後の設定は以前の記事と同様にできます。ですが/etc/network/interfacesファイルを中途半端にいじると動かないかもしれません。

ここでは屋外でRaspberry PiをWiFiアクセスポイントとして動かす事を前提に設定を進めてみます。
以前の記事:Raspbian stretchなRaspberry PiをWiFiホットスポット化する
で紹介したホットスポット化したRaspberry Pi 3にUSB 3G/4Gモデムを追加します。
以前の記事:Raspberry Pi 3とUSB 3Gモデムでワイヤレスホットスポットを作る
の設定をstretchに合わせて行います。

/etc/network/interfacesファイルの代わりに/etc/network/interfaces.d/hotspotファイルを使うようにしています。
/etc/network/interfaces.d/hotspotファイルをテキストエディタで編集します。
ファイルの最後に次のように追加します。
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

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'
動作確認をしてみます。次のコマンドでモデムの起動と終了ができるはずです。
sudo ifup ppp0
sudo ifdown ppp0

次にモデムを挿した時に自動で接続するようにします。
/etc/ppp/peers/wvdialファイルを編集します。モデム利用時にルートを自動的に変更する設定を加えます。次の文をファイルの最後に追加してください。
replacedefaultroute
persist
holdoff 10
USB 3Gモデムの抜き差しをした時に自動でifup/ifdownするサービスを登録します。
/etc/udev/rules.d/50-lte.rulesというファイルを作り編集します。
次の文を追加します。
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{../idVendor}=="1004", ATTRS{../idProduct}=="618f", ATTRS{bInterfaceNumber}=="02", TAG+="systemd" ,ENV{SYSTEMD_WANTS}+="ifup@ppp0.service"
idVenderとidProductはご自分のモデムに合わせて変更してください。モデムが挿されたらifupを抜かれたらifdownが自動的に動きます。

以前の記事:Raspbianのifup@.serviceがおかしくてUSB 3G/4G モデムが動かなかった
で書いたようにifup@.serviceファイルに問題があります。USBモデムの抜き差しを正しく認識してくれません。
/lib/systemd/system/ifup@.serviceファイルを編集し2番目のAfter文を削除してください。

これでRaspberry Piは屋外でも自由にネット接続できるWiFiアクセスポイントなりました。

コメント

最近のコメント

Threaded Recent Comments will be here.