SORACOMのドングルをRaspberry Piで使用するとき、AK-020(3G)とMS2373(LTE)のどちらを挿入しても適切に繋いでくれる設定を行いました。正しいやり方なのか解りませんが、とりあえず動いたので防備録として記載。
SORACOMさんの公式サイトではwvdialを用いて接続する方法が記載されていますが、動作が不安定だったのでpppconfigを使用して接続しています。
1. AK-020固有の設定
AK-020はRaspberry Piに接続するとCD-ROMとして認識されてしまいます。それをUSBシリアルに変換するための設定がこちらです。CD-ROMをejectしてusbserialに登録するまでが記述されています。
# for AK-020
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="a403", RUN+="/usr/bin/eject /dev/sr0"
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="7d0e", RUN+="/sbin/modprobe usbserial vendor=0x15eb product=0x7d0e"
2. AK-020とMS2372共通の設定
この部分はUSBシリアルが接続してきたら、AK020の場合はUSBシリアルと/dev/ak020に、MS2372のばあいは/dev/ms2372にシンボリックリンクを作成させて、wwan0のネットワークを起動させる部分が記述されています。
# for AK-020
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="15eb", ATTRS{../idProduct}=="7d0e", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="ak020",ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
# for MS2372
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="12d1", ATTRS{../idProduct}=="1506", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="00", SYMLINK+="ms2372", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
3. pppconfigの設定
pppconfigでモデム毎の接続情報を設定していきます。
$ sudo pppconfig
"Create a connection"を選択してモデム毎に次のように設定します
modem | AK-020 | MS2372 |
---|---|---|
Provider Name | soracom020 | soracom2372 |
COnfiguration Name Server | Dynamic | Dynamic |
Authorization | PAP | PAP |
Your ISP | sora | sora |
password | sora | sora |
speed | 460800 | 460800 |
Pulse or Tone | Tone | Tone |
Replace your number | *99# | 99**1# |
Choose Modem Config Method | No | No |
Manually Select Modem Port | /dev/ak020 | /dev/ms2372 |
最後に "Finished write files and return main menu"を選択して終了します。
この作業でそれぞれ2つのファイル(合計4ファイル)が作成されます。
/etc/ppp/peers/soracom020
/etc/ppp/peers/soracom2372
/etc/chatscripts/soracom020
/etc/chatscripts/soracom2372
スクリプトの編集1
sudo -s
でルート権限でログインします。そして、/etc/ppp/peers/soracom020
と/etc/ppp/peers/soracom2372
を開き、debugを削除したり、最後にpersist, replacedefaultrouteを追記したりします。作成したファイルがこちら
....peers/soracom020
# This optionfile was generated by pppconfig 2.3.18. \
#
#
hide-password
noauth
connect "/usr/sbin/chat -f /etc/chatscripts/soracom020"
/dev/ak020
460800
defaultroute
noipdefault
user "sora"
ipparam soracom020
|
usepeerdns
persist
replacedefaultroute
.... peers/soracom2372
# This optionfile was generated by pppconfig 2.3.18.
#
#
hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/soracom2372"
/dev/ms2372
460800
defaultroute
noipdefault
user "sora"
remotename soracom2372
ipparam soracom2372
usepeerdns
persist
replacedefaultroute
スクリプトの編集2 /etc/chatscripts/...
/etc/chatscripts/soracom020
# This chatfile was generated by pppconfig 2.3.18.
# Please do not delete any of the comments. Pppconfig needs them.
#
# ispauth CHAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
'' ATH
OK AT+CFUN=1
OK ATZ
OK 'ATQ0 V1 E1 S0=0 &C1 &D2'
OK AT+CGDCONT=1,"IP","soracom.io"
# ispnumber
OK-AT-OK "ATD*99#"
# ispconnect
CONNECT \d\c
# prelogin
# ispname
# isppassword
# postlogin
# end of pppconfig stuff
/etc/chatscripts/soracom2372
# This chatfile was generated by pppconfig 2.3.18.
# Please do not delete any of the comments. Pppconfig needs them.
#
# ispauth PAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
'' ATZ
OK ATZ
OK AT+CGDCONT=0,"IP","soracom.io"
OK AT+CGDCONT=1,"IP","soracom.io"
# ispnumber
OK-AT-OK "ATD*99***1#"
# ispconnect
CONNECT \d\c
# prelogin
# ispname
# isppassword
# postlogin
# end of pppconfig stuff
4. wwan0設定
USBモデムが挿入されるとwwan0からスクリプトが実行されるように設定します。
/etc/network/interfaces
に次の3行を追加します。
allow-hotplug wwan0
mapping wwan0 inet ppp
script /...../script.rb
5. モデムが挿入された時のスクリプト
/devに登録されたモデムを調べて、モデムの起動スクリプトであるpon
のスクリプトを変更しています。
exit 1, exit 2などを用いてnetwork/interfaces
のファイル内でもできるようですが、うまく行きませんでした。
#!/usr/bin/ruby
tmp = `ls /dev`
dev = tmp.split("\n")
dev.each {|d|
if d == "ak020" then
`pon soracom020`
exit 1
elsif d == "ms2372" then
`pon soracom2372`
exit 2
end
}
exit 0
これで一通りうまく動作しました。
動作確認方法
動作しない時のデバックは /var/log/syslog
などを見ながら行います。
(1) rules.dの確認
/dev/ak020
や/dev/ms2372
のシンボリックリンクが作られていない場合は1.と2.に問題があります。
(2) /etc/network/interfacesの設定
(1)が正常に動作した場合、syslogにはscript.rbを実行したというメッセージが出力されるはずです。以下のケースでは失敗しているようなメッセージが流れていますが、しばらく待つと通信が成功します。
script.shを実行したというメッセージが流れてきたら、ifup@wwan0.service
の設定は動作しています。
Apr 8 10:05:38 raspberrypi sh[2597]: ifup: error trying to executing mapping script /xxxxxxxxx/script.sh on wwan0
--- (省略) ---
Apr 8 10:05:41 raspberrypi pppd[2623]: Serial connection established.
Apr 8 10:05:41 raspberrypi pppd[2623]: Using interface ppp0
Apr 8 10:05:41 raspberrypi pppd[2623]: Connect: ppp0 <--> /dev/ak020
Apr 8 10:05:44 raspberrypi pppd[2623]: CHAP authentication succeeded
Apr 8 10:05:44 raspberrypi pppd[2623]: CHAP authentication succeeded
Apr 8 10:05:55 raspberrypi pppd[2623]: Could not determine remote IP address: defaulting to 10.64.64.64
Apr 8 10:05:55 raspberrypi pppd[2623]: replacing old default route to wlan0 [192.168.30.1]
Apr 8 10:05:55 raspberrypi pppd[2623]: local IP address xx.xx.xx.xx
Apr 8 10:05:55 raspberrypi pppd[2623]: remote IP address xx.xx.xx.xx
Apr 8 10:05:55 raspberrypi pppd[2623]: primary DNS address xx.xx.xx.xx
Apr 8 10:05:55 raspberrypi pppd[2623]: secondary DNS address xx.xx.xx.xx
Apr 8 10:06:02 raspberrypi dhcpcd[667]: wwan0: removing interface
(3) スクリプトの動作確認
スクリプトを動作させたとき、このサンプルプログラムではexit 1, exit2をそれぞれ返します。
echo $?
をスクリプトを実行した直後にコンソール上で行うと、exitコードを取得できるのでスクリプトが正しいか確認できます。
(4) モデムの起動プログラム
最後は/etc/ppp/peers/xxxxx
と/etc/chatscripts/
が正しく動作していれば、回線を自動で接続することができます。