概要
[Raspberry PiでUSBモデム挿入時にSORACOMへ自動接続する]
(http://qiita.com/gimy/items/1d49f8e08210e9c9f20a) を踏襲する形で、AK-020を使って起動時、またはAK-020挿入時に自動的にSORACOMに繋がるようにします。
Raspbian wheezyのusb_modeswitch(1系)には--std-ejectオプションが無いのでusb_modeswitchは使わず、ejectとmodprobeを使ってmodemデバイスとして認識させます。
Raspbian Jessieのusb_modeswitch(2系)では--std-ejectオプションが使えるようになっています。
参考サイトを見ながらなるべく最小の設定になるようにまとめたつもりです。udevやwvdialの細かい記述やオプションは把握できていない部分があります。
パッケージのインストール
$ sudo apt-get install eject wvdial
udevルールの設定
AK-020接続時にCD-ROMデバイスをejectしてmodprobeでモデムデバイスを認識させる設定
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"
モデムデバイスを認識したときシンボリックリンク/dev/modemを作成し、ifupコマンドでSORACOMへのダイヤルアップを行う設定
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="15eb", ATTRS{../idProduct}=="7d0e", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@soracom"
モデムデバイスを認識した後ダイヤルアップさせるため、ファイル名先頭の番号を大きくしておく必要があります。
wvdialの設定
AK-020のモデムデバイスは通常/dev/ttyUSB0で認識されますが、抜き差しで番号がずれることがあるのでudevの設定で作られるシンボリックリンク /dev/modem を利用する設定にします。
wvdial.confのModemのデフォルト値が/dev/modemになるので該当行をコメントアウトします。
[Dialer Defaults]
Init1 = ATZ
Init2 = AT+CFUN=1
Init3 = AT+CGDCONT=1,"IP","soracom.io"
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
#Modem = /dev/ttyUSB0 # デフォルトの/dev/modemを使う
ISDN = 0
APN = soracom.io
Phone = *99***1#
Username = sora
Password = sora
Carrier Check = no
Auto DNS = 1
Check Def Route = 1
回線切断時自動的に再接続するようにwvdialのオプションを追加します。
noauth
name wvdial
usepeerdns
replacedefaultroute
persist
holdoff 10
replacedefaultroute
… デフォルトルートの置き換え
persist
… リンク切断時、再接続する
holdoff 10
… 切断後10秒後に再接続する
ifup/ifdownでSORACOMに接続・切断する設定
ifup/ifdownでwvdialコマンドが実行されるように、設定を最後尾に追加します
...
auto soracom
allow-hotplug soracom
iface soracom inet wvdial
動作確認
設定が終わったら再起動します。
- ls /dev でモデムデバイス ttyUSB* が存在する
- ls -l /dev/modem で ttyUSB* へのシンボリックリンクができている
pi@raspberrypia ~ $ ls -l /dev/modem
lrwxrwxrwx 1 root root 7 1月 1 1970 /dev/modem -> ttyUSB0
- ifconfig で ppp0 でSORACOMに接続されている(IPアドレスは 10.x.x.x)
...
ppp0 Link encap:Point-to-Pointプロトコル
inetアドレス:10.xxx.xxx.xxx P-t-P:10.64.64.64 マスク:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 メトリック:1
RXパケット:20959 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:26040 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:3
RXバイト:5454296 (5.2 MiB) TXバイト:1919287 (1.8 MiB)
...
- route -n でルーティングテーブルを確認し、デフォルトゲートウェイがppp0になっている
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
0.0.0.0 192.168.1.1 0.0.0.0 UG 303 0 0 wlan0
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
- sudo ifdown soracomで切断できる
- sudo ifup soracomで接続できる
- AK-020を抜き差ししたとき自動的に再接続される(数分かかることがある?)