NAT配下のWebサーバ等をインターネットからアクセスできるようにトンネリングをするngrokというサービスがあります。
これを使って、3Dプリンタの監視画像をインターネットから取得できないか試してみました。
テスト環境は以下のとおりです。
|
WiFi Router
| 192.168.10.1
|
+---- TTGO T-Camera
| 192.168.10.2
| 80/TCP Web, 81/TCP Streaming
|
+---- Raspberry Pi(Raspbian Lite)
192.168.10.3
まず、ngrok公式サイトからサインアップをします。サインアップすると、「Setup & Installation」という画面に移行しますので、これに沿って操作していきます。
まず、ngrokのダウンロードですが、Linux(ARM)のURLをコピーして、wgetでzipファイルを取得します。(下記はURLを書き換えてありますので、必ずURLをコピーしてください)
~$ wget https://bin.equinox.io/c/xxxxxxxxxx/ngrok-stable-linux-arm.zip
ダウンロードしたら、②、③に沿って展開とトークンの取得を行います。トークンの取得は③のところのコマンドラインをコピー&ペーストして実行するだけです。
~ $ unzip ngrok-stable-linux-arm.zip Archive: ngrok-stable-linux-arm.zip inflating: ngrok ~ $ ./ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Authtoken saved to configuration file: /home/pi/.ngrok2/ngrok.yml
トークンを取得したら、 ~/.ngrok2/ngrok.yml にある設定ファイルを作成します。
authtoken: xxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxx
tunnels:
ttgo:
addr: 192.168.10.2:80
proto: http
auth: "user:password"
bind_tls: true
1行目の内容はトークン取得で作成されている内容です。2行目以降が追加した内容になります。
tunnels:
ttgo: <-------- トンネルにつけた名前です
addr: 192.168.10.2:80 <---- アクセスされた際の転送先です
proto: http <---- httpプロトコルを指定します
auth: "user:password" <---- アクセスの際の認証を追加します
bind_tls: true <---- TLSで暗号化を強制します
作成したら、
~ $ ./ngrok start --all
で起動します。(終了すると tunnel も消滅するので screen と併用するとよいかと思います)
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account XXXXXXXXXXXXXXXXX (Plan: Free)
Version 2.3.27
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding https://b3d16323.ngrok.io -> http://192.168.10.2:80
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
という感じで状態が表示されます。この状態でインターネット側から https://b3d16323.ngrok.io にアクセスするとBASIC認証が求められ、設定したユーザー名とパスワードを入力すると、TTGO T-Cameraへアクセスすることができました。アクセスすると上記の状態の下にHTTPリクエストの状態がリストで表示されます。なお、b3d16323の部分は起動する度にランダムに変わります。有料プランにするとこの部分を固定にすることができるようです。
実際にGet Stillをクリックすると、
という感じで実際に画像を取得できました。なお、ストリーミングについては異なるポート(81/TCP)でのアクセスが必要なのですが、ngrokのコンフィグファイルでは複数のポートの設定も記述できるものの、ポートごとに異なるURLが割り付けられます。このため、うまくいきませんでした。有料プランにするとURLを指定できるので、うまく行く方法があるのかもしれません。


