皆様。新サービス SORACOM Interstellar はお使いいただけたでしょうか。今回の SORACOM Interstellar では、OpsDev チームは約40光年先の惑星に置いた LoRa Gateway を監視するという難易度の高い課題に挑戦することになりました。40光年先にあるということは、故障を検知してから現地に赴いたのでは、多分直る頃にはお客様に連絡が取れず、チケットをクローズできないという問題が発生してししまうため、遠隔監視システムの構築が不可欠でした。
システム構築で主に議論になったのが次の2点です。
- 遠隔監視用機材
- 遠隔監視方法
#遠隔監視用機材
本来であれば宇宙放射線の影響なども考慮した機材を選択したかったのですが、弊社のリーダーシップ・ステートメントの Avoid Muda の精神に則って逸般的な誤家庭にあるハードウェアを使うことにしました。オフィスを見渡したところ幸いにも次のハードウェアを手に入れることができました。
- Raspberry Pi 2 Model B
- 2017-04-10-raspbian-jessie-lite.img1
- SORACOM Air 端末
- 3G モデム AK-020
- 3G/LTE ルータ NEC Aterm MR04LN
- FREETEL Priori3 LTE
AK-020
Raspberry Pi に刺してすぐに使えるようにするためには、幾つかの準備が必要になります。詳細な解説は他の方にお譲りして、今回は接続に必要なステップのみ記載します。
Firmware の更新
USB ポートに 1.2A の電力が無いと不安定になるため、rpi-update により libraspberrypi-bin-1.20161020-1 以降の firmware にアップデートします。アップデート出来ない場合は /boot/config.txt に max_usb_current=1 を追加します。
AK-020 接続時の Raspbian の動作設定
1.1 /etc/udev/rules.d 配下に 30-soracom.rules を作成し以下を記載
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="a403", RUN+="/usr/sbin/usb_modeswitch --std-eject --default-vendor 0x15eb --default-product 0xa403 --target-product 0x15eb --target-product 0x7d0e" ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="7d0e", RUN+="/sbin/modprobe usbserial vendor=0x15eb product=0x7d0e" KERNEL=="ttyUSB*", ATTRS{../idVendor}=="15eb", ATTRS{../idProduct}=="7d0e", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
1.2 PPP を対話型で設定可能にする pppconfig のインストール
sudo apt-get -y install pppconfig
1.3 SORACOM Air PPP 接続設定の作成
sudo pppconfig soracom_ak-020
/etc/ppp/peers 配下の soracom_ak-020 が以下のようになるよう、関連する項目に対話式に入力します。切断時の再接続と、AK-020 を default gw にするために、ファイルの最後に persist と replacedefaultroute を手動で追加します。
# This optionfile was generated by pppconfig 2.3.18. # # hide-password noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/soracom_ak-020" debug /dev/modem 460800 defaultroute noipdefault user "sora" remotename soracom_ak-020 ipparam soracom_ak-020 usepeerdns persist replacedefaultroute
1.4 APN 及びチャットスクリプトの設定
SORACOM Air を利用するために /etc/chatscripts 配下の soracom_ak-020 を次のように編集します。
# This chatfile was generated by pppconfig 2.3.18. '' ATH OK AT+CFUN=1 OK ATZ OK 'ATQ0 V1 E1 S0=0 &C1 &D2' OK AT+CGDCONT=1,"IP","soracom.io" # 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 # ispnumber OK-AT-OK "ATDT*99#" # ispconnect CONNECT \d\c # prelogin # ispname # isppassword # postlogin # end of pppconfig stuff
1.5 PPP接続のためのインターフェース設定
/etc/network/interfaces の最後に以下を追加します。
allow-hotplug wwan0 iface wwan0 inet ppp provider soracom_ak-020 pre-up sleep 10
1.6 自動接続の確認
再起動し自動で interface として ip addr コマンドを用いて ppp0 に IP アドレスが付与されることを確認します。
今回の場合 10.229.82.137 が付与されていることが確認できました。4: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3 link/ppp inet 10.229.81.137 peer 10.64.64.64/32 scope global ppp0 valid_lft forever preferred_lft forever
自動再起動
万が一宇宙放射線の影響によって Modem が hangup した場合に、Raspberry Pi の再起動を行う以下のスクリプトを cron で定期的に回すことにします。
#!/bin/bash -e check_ppp () { if [ "$(/sbin/ifconfig ppp0 2>&1 | grep inet)" ]; then echo 0 else echo 1 fi } do_ppp() { /sbin/ifup wwan0 && /bin/sleep 60 if [ "$(/sbin/ifconfig ppp0 2>&1 | grep inet)" ]; then return 0 fi return 1 } res=`check_ppp` if [ ${res} -eq 0 ]; then exit 0 else res=`do_ppp` if [ $? -ne 0 ]; then echo "the server is shut down now!" /sbin/shutdown -r fi fi exit 0
NEC Aterm MR04LN
TRAPPIST-1 は残念ながら FOMA ハイスピードエリアの範囲ではないので、AK-020 ではアップロードの速度が 384kbps に制限されてしまいます。より高速なアップロードが必要な場合や AK-020 の様な設定を回避したい場合、 Aterm MR04LN(以下 Aterm)は有力な端末の一つになると思われます。今回 Aterm を次の様に設定しました。
- USB テザリング(設定 -> LAN 側設定 -> USB テザリング機能 ON)
この設定をすることによって、Raspberry Pi 側には ethxxここでは22番ポート(SSH)宛の通信を Raspberry Pi の22番ポートに転送する設定を行っています3
さすが専用の機種です。これだけで設定は終了です。
Priori3 LTE
Priori3 LTE(以下 Priori3)はコストパフォーマンスの良い SIM フリーのスマートホンとして注目を浴びました。
- USB テザリング (設定 -> もっと見る -> テザリングとポータブルアクセスポイント -> USB テザリング ON) この設定をすることによって、Raspberry Pi 側には usbx4 として認識され Aterm 同様、特別な設定をすること無くインターネットに接続する事ができます。
- ポートマッピング機能 Priori3 にはデフォルトではポートマッピング機能が無いので、今回は the port forwarding app を利用しました。
これによって通常のスマートホンでも Aterm と同様のことを実現出来ました。しかし、Raspberry Pi を再起動したところ次のような問題に直面しました。
- USB テザリングが解除されてしまう
- 割り当てられる IP アドレスが毎回変わる
残念ながらこれらを設定するためには Priori3 上での操作が必要なため、TeamViewer 等の画面共有アプリケーションを利用して、遠隔からスマートホンを操作することが必要になりそうです。
3機種の比較
今回の3種類の端末についてまとめると次のようになります。
|| 対応する WAN 方式 | 定価 [円] | 事前設定 | メンテナンス | |:———–:|:————:|:————:|:————:| | AK-020 | 3G | 4,980 | 大 | 中 | | Aterm MR04LN | LTE/3G/2G | 28,598 | 小 | 小 | | Priori3 LTE | LTE/3G/2G | 13,824 | 中 | 大 |
遠隔監視方法
遠隔端末へのログイン
今回は遠隔地にある端末へログインして作業をする必要があるため SORACOM Gate(以下 Gate) を利用することにしました。Gate 利用することによって、Global IP アドレスを用いること無く、地球のサーバから遠隔地にある端末に対して閉域網を介してアクセス/ログインをすることが出来るようになります。
また、VPG を利用していない場合には Publick Gate5 を利用することで、地球にある端末から遠隔地にある端末へアクセスすることが出来るようになります。
SORACOM Gate と Public Gate を比較すると次のようになります。
Gate Public Gate アドレス 任意のアドレス ソラコムが指定
(10.128.0.0/9)参加する端末の制御 選択可能 SORACOM Air を利用すれば誰でも参加可能 接続可能な
端末SIM が搭載されていない端末も接続可能(Gate Peer) SORACOM Air搭載端末 通信断への対応
ソラコムにはネットワーク側からセッションを切断する セッション切断API を用意しています。万が一端末からのデータ転送が途絶えてしまった時に、こちらを用いることで再度セッションを確立することが出来る場合があります。今回の3機種でセッションを切断を試したところ、3機種全てで再度セッションが確立することを確認しました。
まとめ
今回は SORACOM Interstellar サービス提供に伴う OpsDev チームのチャレンジを投稿させていただきました。最近は Google の Site Reliability Engineering の様に、運用者についても開発者と同様のエンジニアリングスキルを用いての自動化等による効率的な運用を行っていくのが一般的になってきました。。今後も本ブログで OpsDev の活動の一端を紹介していきたいと思います。長文でしたが、最後まで読んで頂きましてありがとうございました。
OpsDev チーム
これらのコンテンツに含まれる情報につきましては、その内容および利用結果を保証するものではなく、ご利用は自己責任でお願いいたします。 なお、コンテンツをより正確にご利用いただくために、予告無く内容の変更を行う場合がございます。
- USB テザリング(設定 -> LAN 側設定 -> USB テザリング機能 ON)