SORACOM × YAMAHA ルーターでアレコレ


この記事はSORACOM Advent Calendar 2019の22日目の記事です。

逸般の誤家庭用ルーターとして定番の YAMAHA さんのルーター RTX-1200 と SORACOM でできる事をいろいろ試してみました。

RTX-1200 で SORACOM Air を使う

モデムの入手

RTX-1200 で SORACOM Air の接続を行うためには、USB モデムを使うのが良いでしょう。
現行の製品だと NCXX UX302NC-R が LTE の接続も出来ておすすめです(SORACOMのユーザコンソールからも発注できます)。
うちでは、昔懐かしい富士ソフトさんのFS01BUを使っています。
その他の製品は、こちらのページに対応表がありますので、なんとかして入手してください。

モデムの設定

Web UI からであれば、ルーター機能→インターフェースから、 PPP(モバイル)インターフェースを追加、で下記のようなメニューが出てきます。

残念ながら SORACOM は選択肢にないようなので、適当に選び、次の画面で APN 設定を行います。

もし、コマンドラインから設定する場合には、下記のようになります。

pp select 100
 description pp SORACOM
 pp bind usb1
 pp keepalive interval 60 retry-interval=60 count=5
 pp always-on on
 pp auth accept pap chap
 pp auth myname sora sora
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ipv6cp use off
 ip pp nat descriptor 1000
 mobile auto connect on
 mobile disconnect time off
 mobile disconnect input time off
 mobile disconnect output time off
 mobile access-point name soracom.io cid=1
 mobile access limit length off
 mobile access limit time off
 pp enable 100

下記のようなコマンドで接続状況が確認できます。

> show status pp 100
PP[100]:
Description:PRV/MOBILE/0:SORACOM
Mobile device is Online.
Connecting to soracom.io
outgoing side,
14 hours 38 minutes 22 seconds  connection.
Received:    1355 times [219977 octets]
Transmitted: 1416 times [169130 octets]
Time total: 1 day 21 hours 59 minutes 5 seconds
Received total:    12511 times [3820830 octets]
Transmitted total: 11500 times [1819576 octets]
Alert: None
Discard Received: 0 time [0 octet]
Discard Transmit: 0 time [0 octet]
FCS error: 0  total: 0
    rx discard: 0  queue length: 0/20
    tx discard: 29  error: 0
PPP Configure Options
    LCP Local: Magic-Number ACCM PFC, Remote: CHAP Magic-Number ACCM PFC
    IPCP Local: IP-Address Primary-DNS(100.127.0.53) Secondary-DNS(100.127.1.53
), Remote:
    PP IP Address Local: 10.145.79.159, Remote: Unnumbered
    CCP: None

のようになります。

また、SORACOM の各種サービスを使う場合には、下記のように 100.127.0.0/16 を SORACOM 経由にしておく必要があります。

ip route 100.127.0.0/16 gateway pp 100

SORACOM Napter を使ってリモートから設定を行う

リモートから接続を行うためには、ポート転送の設定が必要となります。

下準備

下記のようにコンソールの設定と SSH と HTTP 用の転送設定を入れておきます。

# console prompt "RTX "
RTX # console character ascii
RTX # nat descriptor masquerade static 1000 22 192.168.100.1 tcp 22
RTX # nat descriptor masquerade static 1000 80 192.168.100.1 tcp 80

SSH での接続

SSH で接続を行うためには、SSH を有効にする必要があります。アクセス管理 → SSH・SFTP の設定から、SSH を有効にします。
アクセス元には LAN のアドレスと Napter 用に 192.168.100.1-192.168.1.254 100.127.10.16 を許可します。

設定ができたら、SORACOM のユーザーコンソールで、

のように、TLS をオフでアクセス許可を行います。

表示されている SSH 用のコマンドの user 部分を読み替えて、SSH コマンドを実行します。

$ ssh -p 33368 [email protected]
The authenticity of host '[18.177.98.46]:33368 ([18.177.98.46]:33368)' can't be established.
RSA key fingerprint is SHA256:bDybM0KoJgjgkpgfaYYejxkcOeL1fJ3UZV/XFpsk9ew.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[18.177.98.46]:33368' (RSA) to the list of known hosts.
[email protected]'s password:


RTX1200 Rev.10.01.75 (Fri Feb 16 13:38:37 2018)
  Copyright (c) 1994-2018 Yamaha Corporation. All Rights Reserved.
  Copyright (c) 1991-1997 Regents of the University of California.
  Copyright (c) 1995-2004 Jean-loup Gailly and Mark Adler.
  Copyright (c) 1998-2000 Tokyo Institute of Technology.
  Copyright (c) 2000 Japan Advanced Institute of Science and Technology, HOKURIKU.
  Copyright (c) 2002 RSA Security Inc. All rights reserved.
  Copyright (c) 1997-2010 University of Cambridge. All rights reserved.
  Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved.
  Copyright (c) 1995 Tatu Ylonen , Espoo, Finland All rights reserved.
  Copyright (c) 1998-2004 The OpenSSL Project.  All rights reserved.
  Copyright (C) 1995-1998 Eric Young ([email protected]) All rights reserved.
  Copyright (c) 2006 Digital Arts Inc. All Rights Reserved.
  Copyright (C) 1994-2012 Lua.org, PUC-Rio.
  Copyright (c) 1988-1992 Carnegie Mellon University All Rights Reserved.
  Copyright (C) 2004-2007 Diego Nehab. All rights reserved.
  Copyright (c) 2005 JSON.org
00:a0:de:6a:de:8e, 00:a0:de:6a:de:8f, 00:a0:de:6a:de:90
Memory 128Mbytes, 3LAN, 1BRI
>

無事にログインすることができました!

Web GUI の接続

アクセス管理 → GUI の設定で、同様に 192.168.100.1-192.168.100.254 100.127.10.16 を許可します。

次に SORACOM ユーザーコンソールで TLS オン、ポート 80 番でアクセス許可します。

表示されたアドレスにアクセスしてみるとログインを求められるので、パスワードを入れて

ログインすることが出来ました。

RTX-1200 の稼働状況をモニタリングする (Harvest/Lagoon)

Lua スクリプトと Harvest を使って RTX-1200 の稼働状況を記録し、さらに Lagoon でダッシュボードを作ってみましょう。

設定

SORACOM Harvest を有効にしておきます。

グループ設定で Harvest を ON にします

スクリプトの設置

次にスクリプト(harvest.lua)をダウンロードします
https://gist.github.com/j3tm0t0/a3a47b48befee1e64df9b69a4b16b015

  • WAN 接続のためのインターフェースが LAN2 以外の場合は、適宜変更してください
  • デフォルトでは毎秒のトラフィックを計測し、1分間の最大トラフィックと平均のトラフィックを記録するようにしています

Lua スクリプトをアップロードするには、tftp や sftp を使います。

下準備
RTX # make directory /lua
RTX # tftp any
RTX # sftpd host any

設定が終わったら tftp none / sftpd none を実行して tftp や sftp が使えないようにしておきましょう

tftp
$ cat upload.sh
#!/bin/bash
password=hogehoge # Administrator パスワード
router=192.168.100.1
if [ "$2" = "" ]
then
    echo $0 [file to upload] [path to upload]
    exit
fi
echo put $1 $2/$1/$password | tftp $router
$ ./upload.sh harvest.lua /lua
Sent 4828 bytes in 0.1 seconds
sftp
$ sftp 192.168.100.1
[email protected]'s password: (注意: ここでは、administrator パスワードを入れる必要があります!)
Connected to 192.168.100.1.
sftp> cd lua
sftp> put harvest.lua
Uploading harvest.lua to /lua/harvest.lua
harvest.lua                                                100% 4669   453.2KB/s   00:00
sftp>

実行

まずはルータのコンソールからテストで1回実行してみましょう。

テスト実行
RTX # lua /lua/harvest.lua

SIM 一覧から、SIM を選択し「操作」から「データを確認」を選びます。自動更新を ON にしておきましょう。

1分後に Harvest にデータが届いたら、送信されたデータが表示されると思います。これを毎分実行するようにしてみましょう。

スケジュール設定
RTX # schedule at 1 */* *:* * lua /lua/harvest.lua

しばらくするとこのようなグラフが記録されます。

Lagoon でダッシュボードを作る

このままでは少し見づらいので、SORACOM Lagoon を設定してダッシュボードを作ってみました。

設定のポイント

Dynamic DNS を設定する (Funk)

外出時や海外にいる時に、自宅に VPN 接続して安全にインターネットを利用したい場合があります。そういった際の接続先として固定 IP アドレスが使えれば良いのですが、現在使っている契約では固定 IP アドレスの契約がありませんでした。そこで、DDNS (Dynamic DNS) を利用して接続先のホスト名が常にルータの IP アドレスとなるようにします。

RTX-1200 では標準で NetVolante の DDNS 機能が使えますが、Route53 で管理しているドメインの hostname としてルータのアドレスが引けるようにしたかったので、Lambda で更新をしようと思いましたが、RTX-1200 の Lua では HTTPS が利用できません。そのため、API Gateway + Lambda という構成は取れません。
そこで SORACOM Funk と AWS Lambda を使って実装してみたいと思います。

構成
RTX-1200 (Lua) -(http post)-> http://funk.soraocm.io -> Lambda -> Route53

設定

スクリプトはこちら からダウンロードします。
- lambda_function.py Lambda に設置するスクリプト
- ddns.lua RTX 側のスクリプト

IAM 設定

AWS IAM コンソールから、Funk で使用する IAM ユーザを作成します。
- ユーザ名: 任意 (funk-rtx など)
- アクセスの種類: プログラムによるアクセス

アクセス権限には、下記のようなポリシーを作成して指定しておきます

IAMuserPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "*"
        }
    ]
}

作成が完了した際に表示される「アクセスキー ID」と「シークレットアクセスキー」をメモしておきます(または .csv ファイルをダウンロードしておきます)。

Lambda 設定

AWS Lambda コンソールから関数の作成で「一から作成」を選び、関数名(update_route53など)とランタイム(Python3.8)を指定します。
Role の設定として AWSLambdaBasicExecutionRole と 下記のようなポリシーを持つ Role を作成します (AmazonRoute53FullAccess でも動作します)。

LambdaPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "*"
        }
    ]
}

関数が作成されたら lambda_function.py の内容をペーストして「保存」を押します。
最後に Function の右上に表示されている ARN をコピーしておきます。

例) arn:aws:lambda:ap-northeast-1:123412341234:function:update_route53

SORACOM Funk 設定

グループ設定を開きます
- Funk 設定を ON にして AWS Lambda を選択
- 関数の ARN に先ほどコピーした ARN を入れる

  • 「認証情報を新規作成する...」を選び、作成しておいた IAM ユーザの情報を入れ「登録」を押します。

最後に「保存」を押せば設定は完了です。

Lua スクリプトの設置

ダウンロードした ddns.lua ファイルの先頭の設定を編集します。

ddns.lua
-- 設定項目
wan_if = "pp 1"
hosted_zone_id = "Z1234567890ABC"
name = "ddns.example.com"

(以下略)

先ほどと同じ手順で /lua/ddns.lua にアップロードします。

tftp
$ ./upload.sh ddns.lua /lua/
Sent 1271 bytes in 0.1 seconds

または

sftp
$ sftp 192.168.100.1
[email protected]'s password: (Administratorのパスワード)
Connected to 192.168.100.1.
sftp> put ddns.lua /lua/
Uploading ddns.lua to /lua/ddns.lua
ddns.lua                                                       100% 1225   278.3KB/s   00:00

実行

先ほどと同様に、コマンドラインから実行してみましょう。

RTX # lua /lua/ddns.lua
RTX # show log reverse
2019/12/22 16:35:26: 200:"OK"

と表示されていれば、正常に実行されました。

$ host ddns.example.com
ddns.example.com has address xxx.xxx.xxx.xxx

DNS レコードが正しくアップデートされました!
これをスケジュール実行しておけば、IP アドレスが変わっても自動的に更新されます。

RTX # schedule at 2 */* *:00 * lua /lua/ddns.lua

最後に

駆け足で色々なサービスと連携させてみましたが Napter 経由での設定は特に便利だと思います。
インターネット回線故障時などのためにバックアップ回線としてモバイル回線を設定されている人もいらっしゃると思いますが、何かあった時のためにぜひ Napter のための設定を入れておくことをお勧めします!