最近、ngorkという便利なツールがあることを知りましたので、そのインストール方法と使い方を紹介します。
ngrokは「エングロック」と発音し、トンネリングを用いてローカルサーバーを全世界に公開できるツールです。
パソコン上のWebカメラ動画ストリーミングも公開可能という優れものです。
Windows、MacOS、Linux、FreeBSDで使えるそうです。
ここでは、Windows10の場合で説明します。
- ngrokサインアップしておく
- ZIPファイルをダウンロードして解凍し、ngrok.exeファイルを実行してみる
- Authtokenを設定し、Basic認証ができるようにする
- ローカルサーバーを起動しておく
- トンネリング地域を日本にし、Basic認証有りで公開するコマンド
- ngrokを終了する
- URLにBasic認証を含めてブラウザからアクセスする方法(非推奨ですよ)
- トラフィック調査ウィンドウで監視できる
- まとめ
【目次】
ngrokサインアップしておく
以下のngrokサイトを開いて、「Get started for free」 をクリックします。
サインアップしなくてもngrokをフリーで使うことはできますが、セキュリティ強化のためのBasic認証を使うためにはサインアップが必要です。
それには現時点ではメールアドレス登録だけで済みます。
GitHubやGoogleのアカウントを持っていれば、それでログインすることもできます。
ZIPファイルをダウンロードして解凍し、ngrok.exeファイルを実行してみる
Windows用、MacOS用、Linux用、FreeBSD用のファイルがダウンロードできます。
私の場合は、「Download for Windows」というボタンをクリックして、Windows10 64bit用のZIPファイルをダウンロードしました。
そのZIPファイルを解凍すると、
ngrok.exe
という単独の実行ファイルがありますので、自分の好きなフォルダに保存しておきます。
これは単独のexe形式ファイルなので、扱いが楽ですね。
では、ngrok.exeファイルを起動すると、Windows10では下図の様なコマンドプロンプトウィンドウが開きます。
(図01)
この説明文をDeepLで翻訳してみると、こんな感じでコマンドの使い方が書いてありました。
名前 ngrok - ローカルポートを公開URLにトンネリングし、トラフィックを検査する 説明 ngrokは、NATやファイアウォールに囲まれたローカルネットワークのサービスを 安全なトンネルを介して公衆インターネットに公開します。ローカルウェブサイトの共有、Webhookコンシューマの構築/テスト Webhook コンシューマーの構築/テスト、個人サービスのセルフホスティングなどが可能です。 各コマンドの詳細なヘルプは「ngrok help <command>」で確認できます。 ngrok の Web インターフェースの http://localhost:4040 を開いて、トラフィックを検査します。 EXAMPLES ngrok http 80 # ポート 80 のウェブサーバーの安全な公開 URL ngrok http -subdomain=baz 8080 # 8080 番ポートを baz.ngrok.io で利用可能にします。 ngrok http foo.dev:80 # localhost の代わりに host:port にトンネリングします。 ngrok http https://localhost # ローカルの https サーバーを公開する ngrok tcp 22 # 任意の TCP トラフィックをポート 22 にトンネリングする ngrok tls -hostname=foo.com 443 # foo.com の TLS トラフィックを 443 番ポートに送る ngrok start foo bar baz # 設定ファイルからトンネリングを開始 VERSION 2.3.40 AUTHOR: inconshreveable - alan@ngrok.com COMMANDS: authtoken 設定ファイルにauthtokenを保存する credits 作者とライセンス情報を表示 http HTTPトンネルを開始する start 設定ファイルから名前を指定してトンネルを開始する tcp TCPトンネルを開始 tls TLSトンネルを開始 update ngrok を最新のバージョンに更新します。 version バージョン文字列を表示します。 help コマンドの一覧や 1 つのコマンドのヘルプを表示します。 ngrok はコマンドラインアプリケーションなので、このターミナルプロンプトで「ngrok.exe http 80」と入力してみてください。 このターミナルプロンプトで「ngrok.exe http 80」と入力すると、80 番ポートが公開されます。 www.DeepL.com/Translator(無料版)で翻訳しました。
Authtokenを設定し、Basic認証ができるようにする
ngrokを使うにあたって、最低限のセキュリティとして、Basic認証を使うのは必須だと思います。
それを使う為には、Authtokenを設定しておきます。
ngrokのサイトにログインすると、下図の様に左側に「Your Authtoken」という項目があるので、そこを開いて、Authtokenをコピーしておきます。
(図02)
これは第三者に知られないように注意してください。
次に、ngrokのコマンドプロンプトで、以下のように入力します。
(Windows10パソコンの場合)
ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxx
※Windows PCの場合は、最初の「./
」は不要です
(図03)
すると、Windows10パソコンの場合、パソコンディスク内の以下のパスにAuthtoken入りの ngrok.ymlファイルが保存されます。(user-nameは自分のPCのユーザー名)
C:\Users\user-name\.ngrok2\ngrok.yml
これで、コマンド入力時に毎回Authtokenを入力しなくて済み、自動で入力しくれるようになります。
ローカルサーバーを起動しておく
ここで、ローカルサーバーを起動しておきます。
ただ、残念ながら、file:///C:~
のようなアドレスで開くローカルファイルは公開できません。
Apacheなどのサーバーを使うか、ラズパイやESP32などで、ローカルIPアドレスが発行されているサーバーを使わねばなりません。
トンネリング地域を日本にし、Basic認証有りで公開するコマンド
Basic認証を使ったとしても万全ではないのですが、最低限のセキュリティ対策としてBasic認証を使う場合の個人的にお勧めの設定コマンドを紹介します。
例えば、ご自分のネットワーク上のマイコンのローカルIPアドレスが、192.168.0.10
で、ポート番号が80番の場合、以下のコマンドを入力します。
ngrok http -auth="user-name:password" -region=jp 192.168.0.10:80
-auth
でBasic認証を設定します。
ユーザー名とパスワードの間にスペースなしのコロン「:」を入力します。
-region
で(jp)として地域を日本にしておきます。
設定しない場合、デフォルトで米国(us)になります。そうすると、通信速度が遅くなるかもしれません。
そのコマンドでエンターを押すと下図の様な画面になります。
(図04)
上図のようにhttpsのところのURLをコピーします。
Windwos10のコマンドプロンプトの場合、範囲選択するには下図の様に画面上で右クリックして、「マーク」を選択すれば範囲選択できて、コピーできるようになります。
(図05)
そうしたら、ブラウザを開き、URL入力欄に貼り付けすると、下図の様にBasic認証画面が出ます。
先ほど設定したユーザー名とパスワードを入力します。
(図06)
これでログインすれば、ローカルサーバーが公開できると思います。
ngrokを終了する
ngrokを終了させる方法は、下図の様にウィンドウの右端上に表示されています。
つまり、「Ctrl」+「c」キーを打つと画面がクリアーされ、トンネリングサーバーが終了します。
その後にウィンドウを閉じればOKです。
(図07)
ここで注意!
この操作をせずにウィンドウを閉じると、まだトンネリングサーバーが生きている場合があるので注意してください。
パソコンを再起動すれば、トンネリングサーバーは終了します。
URLにBasic認証を含めてブラウザからアクセスする方法(非推奨ですよ)
正直言って脆弱性があるため、あまりお勧めしませんが、URLにBasic認証ユーザー名およびバスワードを入れ込むという方法があります。
Basic認証はユーザー名やパスワード等を入力するのが面倒ですが、URLに入れ込むと入力が楽になります。
(※これは、あくまでテスト段階で作業を簡略化するためだけの方法と思って下さい。)
以下の感じです。
https://user-name:password@xxxxxxxx.jp.ngrok.io
このように、ユーザー名とパスワードの間に半角コロン(:)を入れ、その後にアットマーク(@)を入れます。
その後にngrokのURLを入力すれば良いわけです。
これは、ブラウザのシークレットモードでは機能しませんので注意してください。
更に注意しなければならないことは、必ずSSL通信のhttpsを使う事は大前提ですが、いくらSSL通信だからといってBasic認証をURLに含めてアクセスすると、履歴がブラウザに残りますし、経由しているサーバーにも履歴が残りますし、何らかの方法でユーザー名とパスワードが漏れる可能性が無いとは言えません。そのことをよく認識しておく必要があります。
URLにパスワードなどを含めて送信することの脆弱性はIPA(情報処理推進機構)に以前掲載されたことがありましたので、検索してみてください。
トラフィック調査ウィンドウで監視できる
あと、ngorkの便利な機能として、トラフィック調査ができるツールが装備されています。
ブラウザのURL入力欄に、
http://localhost:4040/
と入力すれば、下図の様なローカルサイトが開きます。
(図10)
コマンドプロンプトでもある程度確認できますが、これは結構便利ですよ。
何秒前にアクセスしたかが一目瞭然ですし、コマンドクエリの内容もわかります。
なかなかngrokは良いですね。
まとめ
以上、ngrokのインストール方法と簡単な使い方でした。
ローカルサーバーを全世界に公開できるこのツールは素晴らしいですね。
SSLでも公開できるところも素晴らしいです。
かなり完成されたツールだなぁという印象でした。
そして、Basic認証が使えるのはありがたいですね。
Webカメラのストリーミングも使えたので、とても優れたツールだと思います。
自前IoT化に役立つと思いますよ。
では、今回はここまでです。
次回はM5Cameraのストリーミングをngrokで行う方法を紹介します。
すぐにアップする予定です。
ではまた…。
コメント
こんにちわ。
お手数ですが、「ngrokインストール方法と簡単な使い方」についてご教授お願い致します。
何回やっても、
Failed to complete tunnel connection
The connection to
https://xxxx-xxxx-xx-xxxx-x-xxxx-xxxx-xxxx-xxxx.jp.ngrok.io
was successfully tunneled to your ngrok client, but the client failed to establish a connection to the local address192.168.0.07:80
.Make sure that a web service is running on
192.168.0.07:80
and that it is a valid address.The error encountered was: dial tcp
192.168.0.7:80
: connect: connection refusedと表示されてしまいます。
いろいろ手を尽くしたつもりですが、素人の70過ぎの年寄りには解明できません。
ご教授願えれば助かります。
吉野さん
記事をご覧いただき、ありがとうございます。
ちょっと気になったのが、ローカルIPアドレス表記が
192.168.0.07
となっているのはどうなんでしょうか?
確か、
07
のところはゼロを抜いて7
と入力しなければエラーになったような気がします。(違ったらゴメンナサイ)はじめまして、
下記について教えていただけないでしょうか?
Androidスマホ(タブレット)にngrokをインストールしようとしました。
手順として
1) ngork arm64をダウンロード
2)termuxをグーグルよりインストール
3)pkg update を入力
4)pkg pkg upgrade を入力
5)yを入力
6)ダウンロードしたngrokのtermuxでデレクトリーを開く
7)tar -xzvf <YOUR_FILE_NAME.tgz>を入力
8)ngrok authtoken を入力
すると
Error : “/data/data/com.termux/files/usr/bin/ngrok” has expected e_type: 2
とエラーがでました。
どうしたらうまくインストールできるでしょうか。
因みにディレクトリーを /data/data/com.termux/files/usr/bin に変えてリスト表示させるとngrokのファイルがありました。
よろしくお願いします。
ポチさん
記事をご覧いただき、誠にありがとうございます。
この記事は2021年5月に書いたもので、私自身、最近はngrokを全く使っておらず、すっかり忘れてしまったところです。
ただ、今のngorkの公式サイトのダウンロードページを見ても、Android用のアプリはありませんでした。
よって、Androidでは動作しないのではないかと思われます。
私はAndroidについては全く無知なのですが、以下のOSまでだそうです。
Windows, MacOS, Linux, Docker, FreeBSD
回答ありがとうございます。
COPILOTはできると回答してきたのですが、嘘つきCOPILOTだったみたいです。
別の方法でトライしてみます。