投稿日

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 を作成し以下を記載

      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 を次の様に設定しました。

      1. USB テザリング(設定 -> LAN 側設定 -> USB テザリング機能 ON)
        この設定をすることによって、Raspberry Pi 側には ethxxAterm クイック設定 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 設定を解除して下さい。 ↩︎