2021/09/10
USBドングル型のLTEモデム「L-02C」を、Raspberry Piに接続してインターネット接続してみました。この設定をすると有線・無線LAN環境がないところでもインターネット接続可能となります。
構成
ハードウェア | Raspberry Pi 2 |
---|---|
OS | Raspberry Pi OS With desktop Release date:2021-03-04 Kernel version: 5.10 |
LTEモデム | L-02C |
---|---|
利用sim | NTTドコモ系格安sim DMM mobile |
OSセットアップおよびSSHでのログイン可能な状態であることが前提となります。
参考
下記のサイトを参考にさせていただきました。ベースはこの設定の通りで上手くいきました。
WvDialというパッケージをインストールしモデム接続します。
WvDial
WvDialは、一部のLinuxディストリビューションに含まれているインターネットへのモデムベースの接続を確立するのに役立つユーティリティです。WvDialは、ポイントツーポイントプロトコルダイヤラーです。インターネットに接続するために、モデムにダイヤルし、pppdを起動します。 wvstreamsライブラリを使用します。
出典:Wikipedia WvDial
設定
WvDialパッケージインストールします。
$ sudo apt-get install wvdial
L-02Cを接続します。ttyUSB0、ttyUSB1、ttyUSB2、ttyUSB3として認識されました。
$ lsusb
$ ls -l /dev
デバイスファイル名をttyUSB2に固定します。接続の度にデバイスファイル名が変わってしまうと不都合が生じるため固定化が必要とのことです。
$ sudo vi /etc/udev/rules.d/95-l-02c.rules
L-02Cの場合、idvendorは1004、idproductは618fでした。lsusbで確認できました。シンボリックリンク名はusbmodem。
95-l-02c.rulesKERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", ATTRS{bInterfaceNumber}=="02", ATTRS{../idVendor}=="1004", ATTRS{../idProduct}=="618f", SYMLINK+="usbmodem"
ルール作成後、再読み込みします。
$ sudo systemctl daemon-reload
L-02Cを抜き、再度接続すると、ルール通りの接続が確認できました。
$ ls -l /dev
WvDialの設定ファイルを作成します。自分が利用しているDMM mobile用なので、プロファイル情報はsim接続情報を元に適宜書き換えて下さい。変更箇所は、「Init3」の部分にAPN名、「Username」/「Password」の3か所です。
$ sudo vi /etc/wvdial.conf
wvdial.conf[Dialer Defaults]
Init1 = ATH
Init2 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 = AT+CGDCONT=1,"IP","dmm.com"
Modem Type = Analog Modem
Baud = 9600
Modem = /dev/usbmodem
Phone = *99***1#
Username = dmm@dmm.com
Password = dmm
New PPPD = yes
Dial Attempts = 3
Dial Command = ATD
Stupid Mode = yes
Carrier Check = no
Auto DNS = yes
Check DNS = yes
Check Def Route = yes
Auto Reconnect = yes
設定ファイルが完成したので、接続してみます。
$ sudo wvdial &
CONNECTと表示されたので、接続できたようです。モデムのLEDが点灯しました。割り当てられたIPアドレスが100.xxx.xxx.xxxとなってました。これは ISP Shared Address(範囲は100.64.0.0/10)というものらしいです。
インターフェース確認。ppp0として接続されています。
$ ifconfig
ルーティングで問題発生
L-02Cで接続できたので、すぐにインターネット接続できると思ったのですが、問題が発生しました。センサーデータをアップロードするプログラムを動かしたところ、USBモデム経由ではなく、SSHで接続していたローカルエリア接続経由(eth0)となっていました。LANケーブルを抜くと、センサーデータがアップロードされなくなってしまうのです。これではモデム接続している意味がありません。
モデム経由で接続しているかの確認方法です。グローバルIPアドレス確認はこちらのサイトを利用しました。「あなたの利用しているIPアドレス」の部分が、設定用PC(SSH接続しているPC)と同じか異なるかでどちら(eth0/ppp0)を経由して接続しているか判別可能です。
$ curl https://www.cman.jp/network/support/go_access.cgi
ルーティングテーブルとsyslogを確認します。
$ netstat -nr
$ cat /var/log/syslog
May 10 22:43:23 raspberrypi pppd[2047]: Could not determine remote IP address: defaulting to 10.64.64.64
May 10 22:43:23 raspberrypi pppd[2047]: not replacing default route to eth0 [10.5.12.1]
デフォルトゲートウェイが、ローカルエリア接続のeth0値しか見当たりませんでした。またsyslogより、デフォルトゲートウェイが既にあるため、変更できないといったメッセージが確認できました。どうやら、LANケーブルをつないでるため、eth0インターフェースに既にデフォルトゲートウェイが割り当たっているので、ppp0インターフェースには設定できなかったという事のようです。
強制的に、ルーティングテーブルを入れてみました。ネクストホップは、ifconfigで確認できた10.64.64.64です。一時的なものなので、再起動すると消えます。
$ sudo ip route add 0.0.0.0/0 via 10.64.64.64 dev ppp0
再度ルーティングテーブルを確認してみます。ppp0インターフェースにデフォルトゲートウェイが追加されました。FlagsがUGとなっているので、アップ(Up)してゲートウェイ(Gateway)となっていることがわかります。
$ netstat -nr
センサーデータは、USBモデム経由でアップロードできました。LANケーブルを抜いてもインターネット接続しているという事です。
状況まとめ
- 有線(eth0)又は無線(wlan0)が接続された状態で、ダイヤルするとppp0インターフェースにデフォルトゲートウェイが割り当たらない。有線又は無線を切断すると、インターネット接続できない。強制的にデフォルトゲートウェイを追加してやることで、ppp0インターフェース経由で接続可能。
- 有線(eth0)又は無線(wlan0)が接続されていない状態で、ダイヤルするとppp0インターフェースにデフォルトゲートウェイが割り当たる。ppp0経由でインターネット接続可能。
起動時に自動接続の設定
Raspberry Pi起動時に自動的にダイヤルして、インターネット接続するように、設定を追加してみました。理由はわかりませんが、sleepで180秒入れると成功するようになりました。
$ sudo vi /etc/rc.local
...
sleep 180
sudo wvdial &
exit 0
あとがき
- 上述した参考サイトの通りでできた。自力ではできなかったので本当に感謝。
- 有線・無線をつないだ状態で、モデム接続するとモデム経由で通信しない問題が発生した。ルーティングテーブルの手動追加で対応した。
- Raspberry Pi起動時にモデム接続する設定を入れたことにより、予期せぬ再起動にも対応できる。
- センサーデータをLAN環境の無いところで取得しアップロードするのに使えそうだ。