この記事は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 moto@18.177.98.46
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.
moto@18.177.98.46'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 (eay@cryptsoft.com) 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.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 が使えないようにしておきましょう
$ 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 192.168.100.1
moto@192.168.100.1'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 を設定してダッシュボードを作ってみました。
設定のポイント
-
down_max / down_avg を 表示>系列のオーバーライド>系列固有のオーバーライドで、Y軸を反転する (マイナス方向にする)
-
temp を 表示>系列のオーバーライド>で Y-Axis を 2(右側) にする (その他の項目は % なので、右側の軸を温度℃として独立させる)
-
SORACOM Lagoon のより詳しい使い方については、下記のリンクを参照ください
https://dev.soracom.io/jp/lagoon/what-is-lagoon/
https://dev.soracom.io/jp/start/lagoon-dashboards/
https://dev.soracom.io/jp/start/lagoon-panel/
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 など)
- アクセスの種類: プログラムによるアクセス
アクセス権限には、下記のようなポリシーを作成して指定しておきます
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "*"
}
]
}
作成が完了した際に表示される「アクセスキー ID」と「シークレットアクセスキー」をメモしておきます(または .csv ファイルをダウンロードしておきます)。
Lambda 設定
AWS Lambda コンソールから関数の作成で「一から作成」を選び、関数名(update_route53
など)とランタイム(Python3.8
)を指定します。
Role の設定として AWSLambdaBasicExecutionRole
と 下記のようなポリシーを持つ Role を作成します (AmazonRoute53FullAccess
でも動作します)。
{
"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 ファイルの先頭の設定を編集します。
-- 設定項目
wan_if = "pp 1"
hosted_zone_id = "Z1234567890ABC"
name = "ddns.example.com"
(以下略)
先ほどと同じ手順で /lua/ddns.lua
にアップロードします。
$ ./upload.sh ddns.lua /lua/
Sent 1271 bytes in 0.1 seconds
または
$ sftp 192.168.100.1
moto@192.168.100.1'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 のための設定を入れておくことをお勧めします!