LTE > 3G USBドングルでのWAN接続 > (1)動作環境


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

LTE/3G USBドングルでのWAN接続/(1)動作環境

openwrtで、LTEモデム L-02C を使う


今回使用したハードウェア

ルータ
WZR-HP-G301NH (異なる基板が複数あるようだが、私の個体は、WZR-HP-G300NHと同一基板)

ルータOS
openwrt15.05

モデム
ドコモ L-02C

LTE回線のSIM
PanasonicMVNO wonderlink-i (IIJ系、プライベートIPアドレス付与)
DOCOMO純正契約回線にて、mopera.netをつかった通信

WZR-HP-G301NHへopenwrt導入手順

純正状態で、otdpopyして、telnetdを起動して、外からtelnetでつないで、ddで純正状態をバックアップした

ubootenv set accept_open_rt_fmt 1
ubootenv set tftp_wait 10
ubootenv set region US

を念のため入れた。(文鎮になったときに復旧しやすくするため。USは不要だったかもしれない)
そのあと、otdpopyで入室したときにだけ出てくる管理画面の裏ページで、FirmUpdateをクリックして、
以下のfactoryイメージを流し込んで、数分待機する。

openwrt-15.05-ar71xx-generic-wzr-hp-g300nh-squashfs-factory.bin

192.168.1.xでDHCPクライアントでIPアドレスをもらえるようになり、一発で導入成功

なお、純正の「ファームウェアアップデート」のページを使った場合「ファームウェアデータが正しくありません」とでて導入できなかった

3Gモデムを使うための、超簡単な導入手順

  • telnetなりsshなりでルータへログインして、以下を実行
  • opkg install luci-proto-3g usbutils kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch usb-modeswitch-data
  • WebUIからapnを設定する
以上で終わり。電源投入直後から接続はできるが、電波状況の不調などが起きて、いったん回線が途切れた場合は、再接続ができない。

現在の問題点
接続を手動で切断することはできるが、そのあとに再接続することができない。


以下は、私が奮闘した詳細記録


単純にL-02Cを使いたいだけなら上記「超簡単な導入手順」だけ読めば足りる。

準備作業
opkgで必要なソフトを入れる

LuCIのWeb管理画面から、apnやIDPW等を簡単に入力できるようにするため、以下を入れる

opkg install luci-proto-3g

Installing luci-proto-3g (git-15.248.30277-3836b45-1) to root...
Downloading http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/luci/luci-proto-3g_git-15.248.30277-3836b45-1_all.ipk.
Installing comgt (0.32-25) to root...
Downloading http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/base/comgt_0.32-25_ar71xx.ipk.
Installing chat (2.4.7-6) to root...
Downloading http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/base/chat_2.4.7-6_ar71xx.ipk.
Configuring chat.
Configuring comgt.
Configuring luci-proto-3g.

これを導入したあと、LuCIの管理画面で、ネットワーク、インターフェースの新規作成を開くと、
新しいインターフェースのプロトコルの選択肢で、UMTS/GPRS/EV-DOが存在するようになり、
3Gモデムとしての設定を選択できるようになる。

しかし、今の状態では、USBシリアル変換のkmodが入っていないため、
モデムの接続先である /dev/ttyUSBx が1つも存在しないため、設定を完走できない。

以下を入れる。今回は順を追って記述しているが、面倒なら、最初に全部入れてしまってもよい。

opkg install usbutils kmod-usb-serial

これだけでは、/dev/ttyUSBXがでない。さらに追加で以下を入れる。

opkg install kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch usb-modeswitch-data

opkgの設定が完了した段階で、ルータを再起動しない状態でも、すでに/dev/ttyUSB0,1,2,3が認識されてた。
これがL-02Cの出入り口となる。おそらくファームウェアのアップデート用など用途別に4つ認識されるが、
モデムデバイスは /dev/ttyUSB2 となる。

ls -l /dev | grep ttyUSB

といれて、デバイスが出れば、正常に認識されている。
当方の環境では、以下のように出る

root@WZR-HP-G301NH-OpenWrt15:/# lsusb
Bus 001 Device 003: ID 1004:618f
Bus 001 Device 001: ID 1d6b:0002

root@WZR-HP-G301NH-OpenWrt15:/# ls -l /dev | grep ttyUSB
crw-r--r--    1 root     root      188,   0 Mar 10 17:46 ttyUSB0
crw-r--r--    1 root     root      188,   1 Mar 10 17:46 ttyUSB1
crw-r--r--    1 root     root      188,   2 Mar 10 18:32 ttyUSB2
crw-r--r--    1 root     root      188,   3 Mar 10 17:46 ttyUSB3


ここまで来ると、LuCIの管理画面で入力すべき全情報が揃うので、
モデムデバイス /dev/ttyUSB2を指定して、apn等のデータを入れる。

必要なapn,ID,PWをいれて、ダイヤル先として *99***1# を指定した結果、
MVNO(Panasonic wonderLink-I IIJ系のMVNO)で通信できた。


今回はLuCIのわかりやすいWebUIをつかって設定をしたが、
/etc/config/netoworkに追加される情報は以下の通り。これを手動で入力しても同じ効果となる。

config interface '3g'
        option proto '3g'
        option device '/dev/ttyUSB2'
        option service 'umts_only'
        option apn 'vmobile.jp'
        option username 'wl@wlte.net'
        option password 'p123456w'
        option dialnumber '*99***1#'
        option metric '0'
        option keepalive '3 30'
        option demand '0'

「option keepalive」は、たぶん応答不能時の再接続機能と理解した。
回線が生きてるかどうかを30秒間隔で生存確認して、3回失敗したら再接続モードに入る、はず。


なお、上記のluci-proto-3gを入れる前に、opkgをつかって「comgt」を入れた場合、

root@WZR-HP-G301NH-OpenWrt15:/# opkg install --force-depends luci-proto-3g
Installing luci-proto-3g (git-15.248.30277-3836b45-1) to root...
Downloading http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/luci/luci-proto-3g_git-15.248.30277-3836b45-1_all.ipk.
Configuring luci-proto-3g.
Collected errors:
 * satisfy_dependencies_for: Cannot satisfy the following dependencies for luci-proto-3g:
 *      comgt *


というエラーが出て、依存関係のエラーで、luci-proto-3gを追加できなくなる。
「--force-depends」をつけても、エラーになってしまい続行できなかった。

この状態になってしまうと、opkg remove comgt をやっても、comgtは入ってないよ、といわれて
removeができなかった。

仕方が無いので今回は、直前にバックアップしていた/overlay全体のtar.gzをつかって、
opkgでcomgtをいれてないときまで巻き戻した。バックアップをしていない場合は初期化するのが早いと思う。

巻き戻した後、「luci-proto-3g」を導入し、その後にUSBシリアル変換関連のパッケージを導入して、
正常動作を確認できた。


ここからは、接続している状態で、切断と再接続の挙動記録


電源を投入して、L-02Cのダイヤルアップが自動で走って完了し、正常な状態のとき、
ifdown 3g を実行する。
とたんに、以下のログが出る

root@WZR-HP-G301NH-OpenWrt15:/# logread -f
Thu Mar 10 17:39:39 2016 daemon.info pppd[1598]: Terminating on signal 15
Thu Mar 10 17:39:39 2016 daemon.info pppd[1598]: Connect time 1.7 minutes.
Thu Mar 10 17:39:39 2016 daemon.info pppd[1598]: Sent 1681 bytes, received 910 bytes.
Thu Mar 10 17:39:39 2016 daemon.notice netifd: Network device '3g-3g' link is down
Thu Mar 10 17:39:39 2016 daemon.notice pppd[1598]: Connection terminated.
Thu Mar 10 17:39:39 2016 daemon.info pppd[1598]: Exit.
Thu Mar 10 17:39:39 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 17:39:39 2016 daemon.info dnsmasq[1690]: reading /tmp/resolv.conf.auto
Thu Mar 10 17:39:39 2016 daemon.info dnsmasq[1690]: using local addresses only for domain lan
Thu Mar 10 17:39:39 2016 daemon.info dnsmasq[1690]: using nameserver 192.168.XXX.1#53


ifup 3g を実行すると、以下のようにエラーが延々と続く。

Thu Mar 10 17:41:12 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 17:41:14 2016 daemon.notice pppd[2201]: pppd 2.4.7 started by root, uid 0
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: abort on (BUSY)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: abort on (NO CARRIER)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: abort on (ERROR)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: report (CONNECT)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: timeout set to 10 seconds
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: send (AT&F^M)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: expect (OK)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: AT&F^M^M
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: OK
Thu Mar 10 17:41:15 2016 local2.info chat[2203]:  -- got it
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: send (ATE1^M)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: expect (OK)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: ^M
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: ATE1^M^M
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: OK
Thu Mar 10 17:41:15 2016 local2.info chat[2203]:  -- got it
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: send (AT+CGDCONT=1,"IP","vmobile.jp"^M)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: timeout set to 30 seconds
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: expect (OK)
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: ^M
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: AT+CGDCONT=1,"IP","vmobile.jp"^M^M
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: OK
Thu Mar 10 17:41:15 2016 local2.info chat[2203]:  -- got it
Thu Mar 10 17:41:15 2016 local2.info chat[2203]: send (ATD*99***1#^M)
Thu Mar 10 17:41:16 2016 local2.info chat[2203]: expect (CONNECT)
Thu Mar 10 17:41:16 2016 local2.info chat[2203]: ^M
Thu Mar 10 17:41:16 2016 local2.info chat[2203]: ATD*99***1#^M^M
Thu Mar 10 17:41:16 2016 local2.info chat[2203]: ERROR
Thu Mar 10 17:41:16 2016 local2.info chat[2203]:  -- failed
Thu Mar 10 17:41:16 2016 local2.info chat[2203]: Failed (ERROR)
Thu Mar 10 17:41:16 2016 daemon.err pppd[2201]: Connect script failed
Thu Mar 10 17:41:17 2016 daemon.info pppd[2201]: Exit.
Thu Mar 10 17:41:17 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 17:41:17 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 17:41:19 2016 daemon.notice pppd[2223]: pppd 2.4.7 started by root, uid 0
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: abort on (BUSY)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: abort on (NO CARRIER)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: abort on (ERROR)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: report (CONNECT)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: timeout set to 10 seconds
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: send (AT&F^M)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: expect (OK)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: AT&F^M^M
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: OK
Thu Mar 10 17:41:20 2016 local2.info chat[2225]:  -- got it
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: send (ATE1^M)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: expect (OK)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: ^M
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: ATE1^M^M
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: OK
Thu Mar 10 17:41:20 2016 local2.info chat[2225]:  -- got it
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: send (AT+CGDCONT=1,"IP","vmobile.jp"^M)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: timeout set to 30 seconds
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: expect (OK)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: ^M
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: AT+CGDCONT=1,"IP","vmobile.jp"^M^M
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: OK
Thu Mar 10 17:41:20 2016 local2.info chat[2225]:  -- got it
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: send (ATD*99***1#^M)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: expect (CONNECT)
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: ^M
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: ATD*99***1#^M^M
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: ERROR
Thu Mar 10 17:41:20 2016 local2.info chat[2225]:  -- failed
Thu Mar 10 17:41:20 2016 local2.info chat[2225]: Failed (ERROR)
Thu Mar 10 17:41:20 2016 daemon.err pppd[2223]: Connect script failed
Thu Mar 10 17:41:21 2016 daemon.info pppd[2223]: Exit.
Thu Mar 10 17:41:21 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 17:41:21 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 17:41:23 2016 daemon.notice pppd[2245]: pppd 2.4.7 started by root, uid 0
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: abort on (BUSY)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: abort on (NO CARRIER)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: abort on (ERROR)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: report (CONNECT)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: timeout set to 10 seconds
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: send (AT&F^M)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: expect (OK)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: AT&F^M^M
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: OK
Thu Mar 10 17:41:24 2016 local2.info chat[2247]:  -- got it
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: send (ATE1^M)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: expect (OK)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: ^M
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: ATE1^M^M
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: OK
Thu Mar 10 17:41:24 2016 local2.info chat[2247]:  -- got it
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: send (AT+CGDCONT=1,"IP","vmobile.jp"^M)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: timeout set to 30 seconds
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: expect (OK)
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: ^M
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: AT+CGDCONT=1,"IP","vmobile.jp"^M^M
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: OK
Thu Mar 10 17:41:24 2016 local2.info chat[2247]:  -- got it
Thu Mar 10 17:41:24 2016 local2.info chat[2247]: send (ATD*99***1#^M)
Thu Mar 10 17:41:25 2016 local2.info chat[2247]: expect (CONNECT)
Thu Mar 10 17:41:25 2016 local2.info chat[2247]: ^M
Thu Mar 10 17:41:25 2016 local2.info chat[2247]: ATD*99***1#^M^M
Thu Mar 10 17:41:25 2016 local2.info chat[2247]: ERROR
Thu Mar 10 17:41:25 2016 local2.info chat[2247]:  -- failed
Thu Mar 10 17:41:25 2016 local2.info chat[2247]: Failed (ERROR)
Thu Mar 10 17:41:25 2016 daemon.err pppd[2245]: Connect script failed
Thu Mar 10 17:41:26 2016 daemon.info pppd[2245]: Exit.
Thu Mar 10 17:41:26 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 17:41:26 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 17:41:28 2016 daemon.notice pppd[2267]: pppd 2.4.7 started by root, uid 0
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: abort on (BUSY)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: abort on (NO CARRIER)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: abort on (ERROR)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: report (CONNECT)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: timeout set to 10 seconds
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: send (AT&F^M)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: expect (OK)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: AT&F^M^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: OK
Thu Mar 10 17:41:29 2016 local2.info chat[2269]:  -- got it
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: send (ATE1^M)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: expect (OK)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ATE1^M^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: OK
Thu Mar 10 17:41:29 2016 local2.info chat[2269]:  -- got it
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: send (AT+CGDCONT=1,"IP","vmobile.jp"^M)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: timeout set to 30 seconds
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: expect (OK)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: AT+CGDCONT=1,"IP","vmobile.jp"^M^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: OK
Thu Mar 10 17:41:29 2016 local2.info chat[2269]:  -- got it
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: send (ATD*99***1#^M)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: expect (CONNECT)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ATD*99***1#^M^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ERROR
Thu Mar 10 17:41:29 2016 local2.info chat[2269]:  -- failed
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: Failed (ERROR)
Thu Mar 10 17:41:29 2016 daemon.err pppd[2267]: Connect script failed
Thu Mar 10 17:41:30 2016 daemon.info pppd[2267]: Exit.
Thu Mar 10 17:41:30 2016 daemon.notice netifd: Interface '3g' is now down
これ以下、同じエラー状態が、延々とループされる



USBバスから、L-02Cを引っこ抜く

Thu Mar 10 17:41:39 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 17:41:39 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 17:41:41 2016 daemon.notice pppd[2333]: pppd 2.4.7 started by root, uid 0
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.180000] usb 1-1: USB disconnect, device number 2
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.180000] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.190000] option 1-1:1.0: device disconnected
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.190000] option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.200000] option 1-1:1.1: device disconnected
Thu Mar 10 17:41:42 2016 kern.err kernel: [  258.220000] option1 ttyUSB2: usb_wwan_indat_callback: resubmit read urb failed. (-19)
Thu Mar 10 17:41:42 2016 kern.err kernel: [  258.220000] option1 ttyUSB2: usb_wwan_indat_callback: resubmit read urb failed. (-19)
Thu Mar 10 17:41:42 2016 kern.err kernel: [  258.230000] option1 ttyUSB2: usb_wwan_indat_callback: resubmit read urb failed. (-19)
Thu Mar 10 17:41:42 2016 kern.err kernel: [  258.240000] option1 ttyUSB2: usb_wwan_indat_callback: resubmit read urb failed. (-19)
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.280000] option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.280000] option 1-1:1.2: device disconnected
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.290000] option1 ttyUSB3: GSM modem (1-port) converter now disconnected from ttyUSB3
Thu Mar 10 17:41:42 2016 kern.info kernel: [  258.300000] option 1-1:1.3: device disconnected
Thu Mar 10 17:41:42 2016 local2.err chat[2358]: Can't get terminal parameters: Input/output error
Thu Mar 10 17:41:42 2016 daemon.err pppd[2333]: Connect script failed
Thu Mar 10 17:41:43 2016 daemon.info pppd[2333]: Exit.
Thu Mar 10 17:41:43 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 17:41:43 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 17:41:44 2016 daemon.notice netifd: Interface '3g' is now down
ここでログの出力が途切れて落ち着く


L-02Cを、再度差し込む

Thu Mar 10 17:46:16 2016 kern.info kernel: [  532.600000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3
Thu Mar 10 17:46:19 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 17:46:21 2016 daemon.notice pppd[2723]: pppd 2.4.7 started by root, uid 0
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: abort on (BUSY)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: abort on (NO CARRIER)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: abort on (ERROR)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: report (CONNECT)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: timeout set to 10 seconds
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: send (AT&F^M)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: expect (OK)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: AT&F^M^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: OK
Thu Mar 10 17:46:22 2016 local2.info chat[2725]:  -- got it
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: send (ATE1^M)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: expect (OK)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: ^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: ATE1^M^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: OK
Thu Mar 10 17:46:22 2016 local2.info chat[2725]:  -- got it
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: send (AT+CGDCONT=1,"IP","vmobile.jp"^M)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: timeout set to 30 seconds
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: expect (OK)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: ^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: AT+CGDCONT=1,"IP","vmobile.jp"^M^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: OK
Thu Mar 10 17:46:22 2016 local2.info chat[2725]:  -- got it
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: send (ATD*99***1#^M)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: expect (CONNECT)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: ^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: ATD*99***1#^M^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: CONNECT
Thu Mar 10 17:46:22 2016 local2.info chat[2725]:  -- got it
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: send ( ^M)
Thu Mar 10 17:46:22 2016 daemon.info pppd[2723]: Serial connection established.
Thu Mar 10 17:46:22 2016 daemon.info pppd[2723]: Using interface 3g-3g
Thu Mar 10 17:46:22 2016 daemon.notice pppd[2723]: Connect: 3g-3g <--> /dev/ttyUSB2
Thu Mar 10 17:46:22 2016 kern.info kernel: [  538.970000] 3g-3g: renamed from ppp0
Thu Mar 10 17:46:23 2016 daemon.info pppd[2723]: CHAP authentication succeeded
Thu Mar 10 17:46:23 2016 daemon.notice pppd[2723]: CHAP authentication succeeded
Thu Mar 10 17:46:25 2016 daemon.warn pppd[2723]: Could not determine remote IP address: defaulting to 10.64.64.64
Thu Mar 10 17:46:25 2016 daemon.notice pppd[2723]: local  IP address 100.92.150.5
Thu Mar 10 17:46:25 2016 daemon.notice pppd[2723]: remote IP address 10.64.64.64
Thu Mar 10 17:46:25 2016 daemon.notice pppd[2723]: primary   DNS address 202.232.2.2
Thu Mar 10 17:46:25 2016 daemon.notice pppd[2723]: secondary DNS address 202.232.2.3
Thu Mar 10 17:46:25 2016 daemon.notice netifd: Network device '3g-3g' link is up
Thu Mar 10 17:46:25 2016 daemon.notice netifd: Interface '3g' is now up
Thu Mar 10 17:46:25 2016 daemon.info dnsmasq[1690]: reading /tmp/resolv.conf.auto
Thu Mar 10 17:46:25 2016 daemon.info dnsmasq[1690]: using local addresses only for domain lan
Thu Mar 10 17:46:25 2016 daemon.info dnsmasq[1690]: using nameserver 202.232.2.2#53
Thu Mar 10 17:46:25 2016 daemon.info dnsmasq[1690]: using nameserver 202.232.2.3#53
Thu Mar 10 17:46:25 2016 daemon.info dnsmasq[1690]: using nameserver 192.168.XXX.1#53
Thu Mar 10 17:46:25 2016 user.notice firewall: Reloading firewall due to ifup of 3g (3g-3g)
ここでログの出力が途切れて落ち着く




別の実験。LuCIの管理画面で、インターフェース「3G」項目で「停止」「開始」を押したときの挙動

接続が完了している状態で「停止」をおす

Thu Mar 10 18:12:00 2016 daemon.info pppd[2723]: Terminating on signal 15
Thu Mar 10 18:12:00 2016 daemon.info pppd[2723]: Connect time 25.6 minutes.
Thu Mar 10 18:12:00 2016 daemon.info pppd[2723]: Sent 1776 bytes, received 1462 bytes.
Thu Mar 10 18:12:00 2016 daemon.notice pppd[2723]: Connection terminated.
Thu Mar 10 18:12:00 2016 daemon.notice netifd: Network device '3g-3g' link is down
Thu Mar 10 18:12:00 2016 daemon.info pppd[2723]: Exit.
Thu Mar 10 18:12:00 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 18:12:00 2016 daemon.info dnsmasq[1690]: reading /tmp/resolv.conf.auto
Thu Mar 10 18:12:00 2016 daemon.info dnsmasq[1690]: using local addresses only for domain lan
Thu Mar 10 18:12:00 2016 daemon.info dnsmasq[1690]: using nameserver 192.168.XXX.1#53


インターフェースの3Gアイコンは、色のついた状態から灰色になり、
RX: 0.00 B (0 パケット) TX: 0.00 B (0 パケット)となる。

ここで、「開始」をおす

Thu Mar 10 18:12:50 2016 daemon.notice netifd: Interface '3g' is setting up now
Thu Mar 10 18:12:52 2016 daemon.notice pppd[3037]: pppd 2.4.7 started by root, uid 0
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: abort on (BUSY)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: abort on (NO CARRIER)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: abort on (ERROR)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: report (CONNECT)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: timeout set to 10 seconds
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: send (AT&F^M)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: expect (OK)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: AT&F^M^M
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: OK
Thu Mar 10 18:12:53 2016 local2.info chat[3039]:  -- got it
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: send (ATE1^M)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: expect (OK)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: ^M
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: ATE1^M^M
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: OK
Thu Mar 10 18:12:53 2016 local2.info chat[3039]:  -- got it
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: send (AT+CGDCONT=1,"IP","vmobile.jp"^M)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: timeout set to 30 seconds
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: expect (OK)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: ^M
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: AT+CGDCONT=1,"IP","vmobile.jp"^M^M
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: OK
Thu Mar 10 18:12:53 2016 local2.info chat[3039]:  -- got it
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: send (ATD*99***1#^M)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: expect (CONNECT)
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: ^M
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: ATD*99***1#^M^M
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: ERROR
Thu Mar 10 18:12:53 2016 local2.info chat[3039]:  -- failed
Thu Mar 10 18:12:53 2016 local2.info chat[3039]: Failed (ERROR)
Thu Mar 10 18:12:53 2016 daemon.err pppd[3037]: Connect script failed
Thu Mar 10 18:12:54 2016 daemon.info pppd[3037]: Exit.
Thu Mar 10 18:12:55 2016 daemon.notice netifd: Interface '3g' is now down
Thu Mar 10 18:12:55 2016 daemon.notice netifd: Interface '3g' is setting up now

開始を押しても、アイコンは灰色のままで、復旧してくれない。
この症状は、telnet上から手動でifdown 3g /ifup 3g したときと、全く同じだ。


問題点まとめ


USBポート付きルータ + openwrt + L-02Cをつかって、基本的なデータ通信はできる。
ただしいったん途切れるとリブートするまで再接続できない。

LuCIの管理画面で停止と開始をおこなう、あるいはtelnetやシェルスクリプト上で
手動でifdown/ifupを行うと、リブートするまで、再接続できなくなる。

本体をリブートするか、L-02Cを抜き取ったと認識される状況になれば、再接続ができる。

gpioの制御コマンドを使ってUSBの電源を切断/接続のできるWZR-HP-AG300H等であれば、
スクリプトを組んで、リブートさせずに、手動で再認識させることはできる。

切断と再接続のスクリプト例 (anonymous[sage] 投稿日:2014/10/25(土) 11:52:45.07 氏 制作)

ifdown 3g
echo 0 > /sys/devices/virtual/gpio/gpio2/value
sleep 2
echo 1 > /sys/devices/virtual/gpio/gpio2/value
ifup 3g

できれば、リブートやUSBの切断を行わずに再接続させたいが、やりかたがわからない。

20160712追記。問題点解決への道。再接続方法(ほぼ問題なく動いている)


USB接続されたモデムのシリアルポートに対して、自動制御というか
半自動オートパイロット的なやりとりを実現しているのは
chatという拡張子のスクリプトが実現していることがわかりました。

以下の場所に、3Gモデムを接続するまでのスクリプトの実体が入っていました。

/etc/chatscripts/3g.chat

内容は以下の通り。

ABORT BUSY
ABORT 'NO CARRIER'
ABORT ERROR
REPORT CONNECT
TIMEOUT 10
"" "AT&F"
OK "ATE1"
OK 'AT+CGDCONT=1,"IP","$USE_APN"'
SAY "Calling UMTS/GPRS"
TIMEOUT 30
OK "ATD$DIALNUMBER"
CONNECT ' '

解釈すると、BUSY か NO CARRIER か ERRORが帰ってきたら、
失敗とみなして、その時点でスクリプトを中断してエラーとして終了。
各コマンドは、OKと帰ってくるはずなので、それが到来するまで待つ。
CONNECTが帰ってきたら正常として終了、と言うことでしょう。

「timeout set to 30 seconds」は、ダイヤルして応答を得られるまで、
30秒後をタイムアウトとして設定するよ、という意味だと思う。

この解釈でログを見直すと、30秒でタイムアウトしてるんじゃなくて、
30秒たたないうちに即座にエラー結果が帰ってきたので、異常の扱いとして
スクリプトが終了する。それを延々と繰り返す動作になってることがわかった。

エラーを繰り返している時
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: send (ATD*99***1#^M)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: expect (CONNECT)
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ATD*99***1#^M^M
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: ERROR
Thu Mar 10 17:41:29 2016 local2.info chat[2269]: -- failed

正常に接続できたとき
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: send (ATD*99***1#^M)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: expect (CONNECT)
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: ATD*99***1#^M^M
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: CONNECT
Thu Mar 10 17:46:22 2016 local2.info chat[2725]: -- got it

上記で、

ATD*99***1#^M^M

を送って、expect (CONNECT) で、CONNECTという文字が来るのを期待したが、
実際の返答は ERROR が帰ってきたので、エラーとして処理が進み、
Connect script failed を吐いて終了、という流れ。問題は、なぜERRORが帰ってくるのか。


chatスクリプトの、下から2行目に、ATDコマンドが書かれています。
2ch掲示板でヒントをいただき、以下のようにオフフック・オンフックを
切り替えるHという文字を付け加えてみました。

OK "ATD$DIALNUMBER"

OK "ATHD$DIALNUMBER"

この「H」の1文字を追加して保存します。
次に、インターフェースの設定の見直しです。LuCIのインターフェースの3Gを開き、
詳細設定を押して、

LCP echo 失敗数しきい値
LCP echo 送信間隔

この2つは標準状態では空白のはずですが、値を入れている場合は、空白にしてください。
これが入っていると、タイムアウトのカウント時間ごとに、正常に接続が維持できていても、
切断になってしまう気がするので。

未使用時タイムアウトは空欄では無く 0 (=切断しない)を入れました。

以上の2つの変更をした結果、ifdown、ifup、LuCIの接続ボタンの操作で、
正常に再接続ができるようになりました。

これらの操作において、ATコマンドにHを入れる改造を施す前では、
L-02Cでは一度も成功しなかったので、明確に改善しました。

ifdownで回線の停止もできますが、L-02Cの「青いランプ」がしばらく消えません。
放置すると水色の表示(LTEではなく3G接続の表示)になりますが、
内部でどうなっているかは、わかりません。
LED表示は気味が悪いけど、ifdownしたあとはパケットは流れないので実害はなさそう。

以上の結果を踏まえて、好きなタイミングで、再接続処理が出来るようになりました。

あとはスクリプト等で創意工夫の世界です。たとえばインターネット先の相手へpingを
定期間隔で飛ばして、10回連続で応答を得られなかった場合は、ifdown/ifupします。
すると、無人環境で調子が悪くなったときに、回線を自動で再接続できます。


まとめ。L-02Cの回線切断・再接続制御はできたが、L-02Cは小難しいデバイスである


このページにまとめた情報は全て、記入者である私が遠隔地に設置して実用で使った「知見」です。

2016年3月、L-02C + openwrt で最初の検証をしてから、4ヶ月ほど実際に運用しています。
L-02Cをつかったwan回線の提供は、私の実地検証下において、なんとか実用になっています。
しかし、長時間にわたる安定稼働は期待できません。L-02Cは、全体的に不可解な動作が多いです。

L-02Cは通電中は常に、側面の白いLEDランプが微速度で点滅しています。
ごくまれに、この点滅が途絶えて、内部でウォッチドッグタイマーが
働いてリセットしてる動作も確認できました。これが起きると回線は必ず不通になります。

これらの挙動は、製造時期の異なる複数台のL-02Cを観察して、
すべてで同じ現象に遭遇しました。

電波状況は問題ない場所なのに、回線が頻繁に途切れたり、
L-02Cの青ランプがついてても実際はwanに出られない状況が頻発するなど、
素直に信用出来ないデバイスです。

回線が途絶えると言うことは、再接続のたびにIPアドレスも変化します。
グローバルIPアドレスが付与されるSIMカードを使って遠隔地の拠点にする場合は、
そのたびにddnsを更新する必要があります。

このddnsの更新も、回線が死んでる途中で更新スクリプトが動いて処理が始まってしまうと、
「更新できなかったよ」という状況が記憶されてしまい、次にいつ再実行されるかなどを、
確認する必要があります。luci-app-ddnsでは動かないことが多いです。

これらの教訓を全て、異常時の修復処理としてシェルスクリプトに実装して、
いつ回線が死んでもリカバリできるような創意工夫が必要です。
これを乗り越えて、なんとか実用になるレベルです。

LTE回線を使ってwan通信できる環境を新規に構築する場合は、
L-02C以外の、別のデバイスを選んだほうが良いかもしれません。

別の視点で考えると、L-02Cを上手に使いこなすことが出来れば、
どんなに不安定なwanデバイスでも実用的に乗りこなせる、といえます。


資料 lsusb -v したときの、L-02Cの情報


root@WZR-HP-G301NH-OpenWrt15:/# lsusb -v

Bus 001 Device 003: ID 1004:618f
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239
  bDeviceSubClass         2
  bDeviceProtocol         1
  bMaxPacketSize0        64
  idVendor           0x1004
  idProduct          0x618f
  bcdDevice            0.00
  iManufacturer           1 NTT DOCOMO, INC.
  iProduct                2 docomo L02C
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          115
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          4 docomo L02C
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255
      bInterfaceSubClass    255
      bInterfaceProtocol    255
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255
      bInterfaceSubClass    255
      bInterfaceProtocol    255
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255
      bInterfaceSubClass    255
      bInterfaceProtocol    255
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255
      bInterfaceSubClass    255
      bInterfaceProtocol    255
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval              32
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass          239
  bDeviceSubClass         2
  bDeviceProtocol         1
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)