• 投稿日
  • 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 設定を解除して下さい。 ↩︎