SORACOM Blog

ソラコムの最新情報をお届けします

SORACOM Interstellar - 40光年先の遠隔監視 -

皆様。新サービス SORACOM Interstellar はお使いいただけたでしょうか。今回の SORACOM Interstellar では、OpsDev チームは約40光年先の惑星に置いた LoRa Gateway を監視するという難易度の高い課題に挑戦することになりました。40光年先にあるということは、故障を検知してから現地に赴いたのでは、多分直る頃にはお客様に連絡が取れず、チケットをクローズできないという問題が発生してししまうため、遠隔監視システムの構築が不可欠でした。

システム構築で主に議論になったのが次の2点です。

  1. 遠隔監視用機材
  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

Devices


AK-020

Raspberry Pi に刺してすぐに使えるようにするためには、幾つかの準備が必要になります。詳細な解説は他の方にお譲りして、今回は接続に必要なステップのみ記載します。

Firmware の更新

USB ポートに 1.2A の電力が無いと不安定になるため、rpi-update により libraspberrypi-bin-1.20161020-1 以降の firmware にアップデートします。アップデート出来ない場合は /boot/config.txtmax_usb_current=1 を追加します。

AK-020 接続時の Raspbian の動作設定

1.1 /etc/udev/rules.d 配下に 30-soracom.rules を作成し以下を記載

1
2
3
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 のインストール

1
sudo apt-get -y install pppconfig

1.3 SORACOM Air PPP 接続設定の作成

1
sudo pppconfig soracom_ak-020

/etc/ppp/peers 配下の soracom_ak-020 が以下のようになるよう、関連する項目に対話式に入力します。切断時の再接続と、AK-020 を default gw にするために、ファイルの最後に persist と replacedefaultroute を手動で追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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 を次のように編集します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  # 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 の最後に以下を追加します。

1
2
3
4
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 が付与されていることが確認できました。

1
2
3
4
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 で定期的に回すことにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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 を次の様に設定しました。

  1. USB テザリング(設定 -> LAN 側設定 -> USB テザリング機能 ON) この設定をすることによって、Raspberry Pi 側には ethxx2 として認識され、特別な設定をすること無くインターネットに接続する事ができます。

  2. ポートマッピング設定 Aterm の特定のポート宛の通信を Raspberry Pi に転送するため、ポートマッピング設定を行います。Aterm を一旦パソコンにつないで、http://aterm.me/ にアクセスすると、クイック設定 Web にアクセスすることが出来ます。そして、左側のメニュー -> 詳細設定 -> ポートマッピング設定から以下の様に設定します。

Aterm クイック設定 Web

ここでは22番ポート(SSH)宛の通信を Raspberry Pi の22番ポートに転送する設定を行っています3

さすが専用の機種です。これだけで設定は終了です。


Priori3 LTE

Priori3 LTE(以下 Priori3)はコストパフォーマンスの良い SIM フリーのスマートホンとして注目を浴びました。

  1. USB テザリング (設定 -> もっと見る -> テザリングとポータブルアクセスポイント -> USB テザリング ON) この設定をすることによって、Raspberry Pi 側には usbx4 として認識され Aterm 同様、特別な設定をすること無くインターネットに接続する事ができます。

  2. ポートマッピング機能 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 アドレスを用いること無く、地球のサーバから遠隔地にある端末に対して閉域網を介してアクセス/ログインをすることが出来るようになります。

SORACOM Gate

また、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 チーム


これらのコンテンツに含まれる情報につきましては、その内容および利用結果を保証するものではなく、ご利用は自己責任でお願いいたします。 なお、コンテンツをより正確にご利用いただくために、予告無く内容の変更を行う場合がございます。


  1. 本ブログ執筆中に更新があったので再度検証しました。

  2. 今回の環境では eth1 として認識されました。

  3. USB テザリングの場合、192.168.179.2 が割り当てられるようですが、こちらは環境に応じて変更して下さい。

  4. 今回の環境では usb0 として認識されました。

  5. 端末毎にSORACOM Air VPG 利用オプション料金が発生するため、必要のない場合は Group 設定を解除して下さい。