====== WarpLink SPS の利用 ====== {{:mae3xx_tips:warplink_sps:logo_small.gif|WarpLink SPS}} WarpLink SPS((IIJ様 SACM の OEM)) は、通信機器(サービスアダプタ((SA)))をネットワークに自動接続し、遠隔から集中管理するマネージメントシステム基盤です。\\ 設定管理などのすべての機能を専用の Web 画面を通して一元的に行えるため、SaaS アプリケーションのように手軽に機器の管理を行うことが可能です。\\ VPN ルータの集中監視に加えて、無人環境に多数展開している IoT ゲートウェイを一元管理することが可能となり、VPN ルータ / IoT ゲートウェイに\\ 掛かるトータルコストを大幅に削減できます。 {{:mae3xx_tips:warplink_sps:warplinksps_login.png?800|WarpLink SPS login}} \\ ===== 準備 ===== ご利用にはユーザ登録が必要です。\\ 弊社営業部 (TEL: 0422-37-8112 E-Mail: sales@centurysys.co.jp) へお問い合わせ下さい。 \\ ===== 設定 ===== ==== 設定ファイルの編集 (armsd.conf) ==== ファームウェア v2.7.0 より、WarpLink SPS との接続を行うエージェント(armsd)を組み込んであります。\\ armsd の設定ファイル ''/etc/armsd/armsd.conf'' を編集します。 distribution-id: 0000-0123-4567-8901-2345-6789-dead-beef ls-sa-key: hogehogefugafuga #sa-model-name: arms client daemon #sa-version: 0.00 #path-iconfig: /etc/armsd/initial-config #path-state-cache: /var/cache/armsd/state #https-proxy-url: http://192.168.0.1:8080/ #hb-disk-usage0: / #hb-traffic-if0: eth0 ### see sample scripts in /usr/share/armsd-X.X/examples #script-app-event: /etc/armsd/scripts/app-event #script-clear: /etc/armsd/scripts/clear #script-command: /etc/armsd/scripts/command #script-post-pull: /etc/armsd/scripts/post-pull #script-reconfig: /etc/armsd/scripts/reconfig #script-start: /etc/armsd/scripts/start #script-status: /etc/armsd/scripts/status #script-stop: /etc/armsd/scripts/stop #script-reboot: /etc/armsd/scripts/reboot #script-line-ctrl: /etc/armsd/scripts/line #script-state-changed: /etc/armsd/scripts/state-changed distribution-id, ls-sa-key を設定しておきます。 \\ ==== 起動設定 (Upstart) ==== ''/etc/default/armsd'' を編集し、自動起動するようにします。 START=yes \\ ==== 起動の確認 ==== 起動できているか確認してみます。 root@plum:~# ps ax|grep armsd 1025 ? Ss 0:03 /usr/sbin/armsd -D -f /etc/armsd/armsd.conf 31798 pts/1 S+ 0:00 grep --color=auto armsd \\ log でも確認してみます。 Jun 7 13:20:18 plum armsd[1025]: armsd version 1.0.7, with libarms 5.41 (Release) Jun 7 13:20:18 plum armsd[1025]: no state cache file - try LS-PULL Jun 7 13:20:18 plum armsd[1025]: log callback: 2 - Pull from LS. Jun 7 13:20:18 plum armsd[1025]: state changed: INITIAL -> LSPULL Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - calculated. ls max retry 1500 times. Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - calculated. ls retry interval 60 sec. Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - line: connecting(0): DHCP Jun 7 13:20:18 plum armsd[1025]: log callback: 21 - Line DHCP(0) Connected. Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - [-] Start rs-solicitation Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - RS[0]: socket prepared. connecting... Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - RS[0]: SSL connection established. (TLSv1.2 - ECDHE-RSA-AES256-GCM-SHA384) Jun 7 13:20:18 plum armsd[1025]: log callback: 2 - Connecting to LS Jun 7 13:20:18 plum armsd[1025]: log callback: 3 - LS Access Done Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - [-] End rs-solicitation Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - line: disconnecting(0): DHCP Jun 7 13:20:18 plum armsd[1025]: disable web proxy Jun 7 13:20:18 plum armsd[1025]: log callback: 25 - Line DHCP(0) Disconnected. Jun 7 13:20:18 plum armsd[1025]: state changed: LSPULL -> RSPULL Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - calculated. rs max retry 5 times. Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - calculated. rs retry interval 60 sec. Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - line: connecting(0): DHCP Jun 7 13:20:18 plum armsd[1025]: log callback: 21 - Line DHCP(0) Connected. Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - [-] Start config-solicitation Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - RS[0]: https://202.221.50.98/arms/msg Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - RS[1]: https://202.221.50.99/arms/msg Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - RS[0]: socket prepared. connecting... Jun 7 13:20:18 plum armsd[1025]: log callback: 200 - RS[0]: SSL connection established. (TLSv1.2 - AES256-GCM-SHA384) Jun 7 13:20:18 plum armsd[1025]: log callback: 5 - Connecting to RS Jun 7 13:20:19 plum armsd[1025]: log callback: 6 - RS Access Done Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - RS End point: https://202.221.50.98/arms/msg Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [-] End config-solicitation Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - line: disconnecting(0): DHCP Jun 7 13:20:19 plum armsd[1025]: disable web proxy Jun 7 13:20:19 plum armsd[1025]: log callback: 25 - Line DHCP(0) Disconnected. Jun 7 13:20:19 plum armsd[1025]: state changed: RSPULL -> PULLDONE Jun 7 13:20:19 plum armsd[1025]: initial configuration succeeded Jun 7 13:20:19 plum armsd[1025]: state cache saved Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [-] Start push-method-query Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - RS[0]: socket prepared. connecting... Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - RS[0]: SSL connection established. (TLSv1.2 - AES256-GCM-SHA384) Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [-] End push-method-query Jun 7 13:20:19 plum armsd[1025]: log callback: 91 - Push method: tunnel Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#0: https://202.221.50.98:443/arms/tunnel Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#1: https://202.221.50.99:443/arms/tunnel Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#2: https://[2001:0240:bb88:0000:0000:0000:0000:0262]:443/arms/tunnel Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#3: https://[2001:0240:bb88:0000:0000:0000:0000:0263]:443/arms/tunnel Jun 7 13:20:19 plum armsd[1025]: log callback: 70 - Start push confirmation Jun 7 13:20:19 plum armsd[1025]: state changed: PULLDONE -> PUSH_SENDREADY Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#0: try to connect 202.221.50.98:443 Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#0: socket prepared. connecting... Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#0: socket connected. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#1: try to connect 202.221.50.99:443 Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#1: socket prepared. connecting... Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#1: socket connected. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#2: address family mismatched: 2001:0240:bb88:0000:0000:0000:0000:0262 Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#2: closed. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#3: address family mismatched: 2001:0240:bb88:0000:0000:0000:0000:0263 Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#3: closed. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#1: SSL connection established. (TLSv1.2 - AES256-GCM-SHA384) Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#1: sent http header. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#0: SSL connection established. (TLSv1.2 - AES256-GCM-SHA384) Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#0: sent http header. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#0: received http header. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [-] Start push-confirmation-start Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - Start confirmation Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - tunnel#1: received http header. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [-] Start push-confirmation-start Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - Start confirmation Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [70418033] End push-confirmation-start Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - Sent confirmation request. wait for response. Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [-] Start push-confirmation-done Jun 7 13:20:19 plum armsd[1025]: log callback: 200 - [70418033] End push-confirmation-done Jun 7 13:20:19 plum armsd[1025]: state changed: PUSH_SENDREADY -> PUSH_WAIT Jun 7 13:20:19 plum armsd[1025]: log callback: 80 - Start heartbeat (interval: 300 sec) Jun 7 13:20:19 plum armsd[1025]: log callback: 82 - heartbeat server: 202.221.50.96 Jun 7 13:20:19 plum armsd[1025]: log callback: 82 - heartbeat server: 202.221.50.97 heartbeat が送信されていますので、接続は成功しているようです。 \\ ===== カスタマイズ ===== ==== コールバックスクリプトの作成 ==== WarpLink SPS のシステムに接続中に発生する各種イベント(コンフィグの適用など)は、armsd に登録したコールバックスクリプトにより処理を行います。\\ コールバックスクリプトには、下記があります。 #script-app-event: /etc/armsd/scripts/app-event #script-clear: /etc/armsd/scripts/clear #script-command: /etc/armsd/scripts/command #script-post-pull: /etc/armsd/scripts/post-pull #script-reconfig: /etc/armsd/scripts/reconfig #script-start: /etc/armsd/scripts/start #script-status: /etc/armsd/scripts/status #script-stop: /etc/armsd/scripts/stop #script-reboot: /etc/armsd/scripts/reboot #script-line-ctrl: /etc/armsd/scripts/line #script-state-changed: /etc/armsd/scripts/state-changed ^ Name ^ Function ^ Arguments | |app-event|IP アドレス変更の通知| | |clear|ステータス初期化 (PUSH)| | |command|任意コマンド|command | |post-pull|Pull 完了後に実行| | |reconfig|コンフィグ変更 (PUSH)|reconfig | |start|Pull 時実行|start | |stop|モジュール停止|stop | |reboot|再起動| | |line-ctrl|Pull 時の回線接続((SMF SDK を用いて独自 RS を構築している事業者のみ設定可能です。WarpLink SPS/SACM などのサービスを直接利用する場合には利用できません。))|line-ctrl [ [ ]]| |state-changed|ステータス変化通知|state-changed | \\ 機器の起動時には、モジュールの個数分(5) "start" スクリプトが呼ばれます。\\ 例として、次のような "start" スクリプトにすると、 #!/bin/bash id=$1 version=$2 info=$3 config=$4 echo start script invoked at `date`: $0 $* echo module-id=$id echo version=$version echo info=$info echo config file is: $config: echo ----- cat $config echo ----- 次のようなログが(Upstart のログに)記録されます。 start script invoked at Wed Jun 7 13:20:18 JST 2017: /etc/armsd/scripts/start 2 0.0.0-0 /tmp/armsd.1025/tmp/0 module-id=2 version=0.0.0-0 info= config file is: /tmp/armsd.1025/tmp/0: ----- hogehoge ----- start script invoked at Wed Jun 7 13:20:18 JST 2017: /etc/armsd/scripts/start 3 0.0.0-0 /tmp/armsd.1025/tmp/1 module-id=3 version=0.0.0-0 info= config file is: /tmp/armsd.1025/tmp/1: ----- ----- start script invoked at Wed Jun 7 13:20:18 JST 2017: /etc/armsd/scripts/start 4 0.0.0-0 /tmp/armsd.1025/tmp/2 module-id=4 version=0.0.0-0 info= config file is: /tmp/armsd.1025/tmp/2: ----- ----- start script invoked at Wed Jun 7 13:20:18 JST 2017: /etc/armsd/scripts/start 0 0.0.0-0 /tmp/armsd.1025/tmp/3 module-id=0 version=0.0.0-0 info= config file is: /tmp/armsd.1025/tmp/3: ----- hoge1 http://www.yahoo.co.jp?file=hogehoge.img&hoge=fuga ----- start script invoked at Wed Jun 7 13:20:19 JST 2017: /etc/armsd/scripts/start 1 0.0.0-0 /tmp/armsd.1025/tmp/4 module-id=1 version=0.0.0-0 info= config file is: /tmp/armsd.1025/tmp/4: ----- ----- \\ === ファームウェア更新機能の実装 === モジュール ID: 0 には "ファームウェア(URL)" を割り当てていますので、ファームウェア更新機能を作成するには、 * VERSION((無条件に実行されるため、バージョンをチェックして無駄なダウンロードを避けるため)) および URL を config に記述するようにする * start / reconfig スクリプトで、config ファイルをパースしてファームウェア更新が必要か判定する という実装が考えられます。 サンプルは次のようになるでしょうか。 #! /bin/bash firmup_check() { local config=$1 local ma_version=`cat /etc/version` local VERSION="None" local URL="" . $config echo "MA version(current): \"$ma_version\"" echo "Version in config: \"$VERSION\"" if [ "$ma_version" != "$VERSION" ]; then echo "version unmatched, need to update firmware, firmware URL is \"$URL\"" # wget $URL -O /tmp/firmware.img # (download firmware) # firmup /tmp/firmware.img # (update firmware) else echo "version matched, not need to firm-update." fi } echo reconfig script invoked at `date`: $0 $* # $1 is module-id case "$1" in "0" ) firmup_check $4 ;; esac {{:mae3xx_tips:warplink_sps:change_config_00.png?1000|コンフィグ変更}} \\ 実行例は下記のようになります。 reconfig script invoked at Wed Jun 7 14:51:02 JST 2017: /etc/armsd/scripts/reconfig 0 0.0.0-0 /tmp/armsd.1025/candidate-config/0 MA version(current): "MA-E3xx firmware version 2.7.0 (Tue May 9 11:28:30 JST 2017)" Version in config: "MA-E3xx firmware version 2.7.1 (Tue May 10 11:28:30 JST 2017)" version unmatched, need to update firmware, firmware URL is "http://ma-tech.centurysys.jp/lib/exe/fetch.php?media=download_software:mae3xx:mae3xx_trusty_v2_7_1.img"