Date: 2018.04.21
Home / Server/Network. / いつの間にかアカウント登録無しでのngrok利用にセッション時間制限が設定されてた。
Google Home Miniで家電を操作。パート2.Google AssistantをIFTTT連携させて音声操作。」で実装していた「Google Home Mini」と「eRemote RJ-3」を使って声での家電操作。
それが数日前から気付いたら反応しないようになり、宅内サーバー側を再起動してサービスを立ち上げ直すと直後はきちんと動作するのに、気付いたらまた無反応に。
最初はファイアウォール(Sophos XG Firewall)を疑ってログ調べたりポリシーいじってみたりもしたけど結局解消せずで。
再起動すれば直るけど、フリー使用の為にngrokで払い出されるURLが毎回ランダムで変わって、そのURLをIFTTT側で書き換えにゃならんので自動的再起動を仕込んだところでどうしようもないし。

で、とりあえずngrokで払い出された公開用URLに試しにアクセスしてみたら・・・
こんなエラー出た・・・
ngrok Tunnel Expired




Tunnel Expired

This tunnel expired 16 hours, 24 minutes ago.

Sign up for a free account so that your tunnels don't time out or you can restart ngrok to get a new tunnel.

Anybody can use ngrok without an account, but there are limits on how long tunnels can stay open and how much bandwidth they can process. Sign up for a free account so your tunnel don't time out and also get more bandwidth, http basic auth, tcp tunnels, custom subdomains and more.

The error encountered was: ERR_NGROK_708

まあ、要約するとトンネル(セッション)の期限が切れたのでngrokに登録するか再起動しろって事のようで。

期限ってなんだろうと思って試しに普段バックグラウンド起動してたngrokを一度コンソール上で起動してみたら
$ ngrok http --region ap 1234
ngrok by @inconshreveable                                       (Ctrl+C to quit)

Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.2.8
Region                        Asia Pacific (ap)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://xxxxxxxx.ap.ngrok.io -> localhost:1234
Forwarding                    https://xxxxxxxx.ap.ngrok.io -> localhost:1234

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

見事に「Session Expires」なんて項目が出てる。
どうやら8時間で強制的に切られるようで。
導入した時はなかったはずなので(利用できてたし)、ここ数日で変更されたんだろうか。
事象が出始めた直前にメンテナンスで再起動していたのでその時に反映されたのかもしれないけど。

で、ngrokアカウントにサイアンアップして利用を推奨してきてたので登録してみる事に。 無料利用に登録の有無で何か違いがあるんだろうかと半信半疑だったけど。

登録はこちらから。「ngrok SIGN UP

登録完了後に認証させる手順が表示されます。
手順はngrokをダウンロードして解凍し、直接実行ファイルを指定する内容になっているけど、今回はインストール済みでパスも通っているので若干異なります。

なのでコマンド1行だけです。
Authtokenは登録直後に表示される「Explore ngrok」にコマンドが記載されているのでそちらから。
もしくはメニューの「Auth」にYour Tunnel Authtokenとして記載されています。
$ ngrok authtoken (Authtoken)

実行すると自動的に設定ファイル「ngrok.yml」にauthtokenが書き込まれ、プロセス起動時にこれを利用して認証されるよう。
まあ、手動で書いてもいいとは思うけど。
今回は実行ユーザーのホームディレクトリ配下に隠しディレクトリ「.ngrok2」が作成され、その中にファイルが作成されていました。

authtokenが書かれた「ngrok.yml」が用意された後、再度ngrokを一度コンソール上で起動。すると、
$ ngrok http --region ap 1234
ngrok by @inconshreveable                                       (Ctrl+C to quit)

Session Status                online
Account                       xxxx (Plan: Free) ← アカウント登録時に入力したユーザー名が表示される。
Version                       2.2.8
Region                        Asia Pacific (ap)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://xxxxxxxx.ap.ngrok.io -> localhost:1234
Forwarding                    https://xxxxxxxx.ap.ngrok.io -> localhost:1234

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

「Session Expires」が消え、代わりに「Account」情報が表示されるように。
これで期限は消えたって事でいいんだろうか。
まあ、少し様子見です。(変わってなければ8時間で分かると思うけど。)

ちなみに、ngrokのアカウントコンソールDashboardで「Status」を見ると、こんな感じでTunnels Onlineが確認できます。
ngrok Tunnels Online Status

【関連記事】
Google Home 関連記事一覧。


Secret

TrackBackURL
→https://000dandelion000.blog.fc2.com/tb.php/284-5a527e6d