👌

閉域ネットワーク上のWebサービスをngrockでお手軽にテストする

に公開

はじめに

私はAzureインフラエンジニア・コンサルタントのお仕事をしていますが、ハイブリッドクラウド構成でオンプレミスとパブリッククラウド間を専用線接続しており、クラウド上のWebサービスも閉域ネットワークからのみアクセスするという要件は非常に多いです。

閉域ネットワークでのWebサービス開発、テストの"あるある"

  • 課題提起: 閉域ネットワーク内のWebサービス、開発は進むけどテストはどうする?
    • 通常のアクセスができないため、テスト環境の準備が面倒。
  • 従来の(ちょっぴり面倒な)アプローチ:
    • Windows仮想マシン: リモートデスクトップで接続してブラウザを開く。いちいちログインする手間、起動の遅さなどが気になる。
    • Linuxサーバ上のプロキシ: プロキシサーバを立ててブラウザの設定を変える。設定が煩雑、使い終わった後の後片付けも必要。
    • curlで頑張る: APIの動作確認ならまだしも、Web画面の確認は絶望的。
    • Azure Bastionなどの踏み台サービス: Azure環境であれば、Azure Bastionなどを使ってよりセキュアに仮想マシンへ接続できます。しかし、結局のところ閉域ネットワーク内にWindows仮想マシンが必要であり、その構築・維持コストや利用の手間を考えると、一時的な Web サービス確認には向いているとは言えません
  • 「もっとスマートにできないものか…」 そんな風に感じているクラウドインフラ開発者の方、多いのではないでしょうか?

ngrokとは?

ひとことで言うと、一時的なトンネルで閉域の壁を越えるサービスです。

  • ngrokの基本概念:
    • ローカル(若しくは閉域ネットワーク内)で動いているサービスを、一時的にインターネット上に公開できるツール。
    • 外部からアクセス可能なURLを発行し、そのURLへのアクセスをローカルに転送(トンネリング)する。
    • まさに 「魔法のトンネル」 のような存在。
  • なぜ閉域ネットワークで使えるのか?:
    • 閉域ネットワーク内のサーバからngrokエージェントを起動し、外部(ngrokサーバー)へ向けてアウトバウンド接続を張る形になるため、ファイアウォールの設定変更が不要なケースが多い。
    • これこそが、セキュリティ要件の厳しい閉域環境でも気軽に使える理由。
  • 手軽さのポイント:
    • コマンド一つで起動。設定ファイルもシンプル。
    • 無料プランでも十分使える(ただし、発行されるURLが変わるなどの制限あり)。
  • 注意点:
    • もちろん、ngrok を動かすためには閉域ネットワーク内に軽量な Linux サーバ (1コアのもので十分) が必要になります。しかし、ブラウザ用途のためだけに Windows 仮想マシンを丸ごと立ち上げるのと比べれば、その構築・運用コストは遥かに経済的です。

ngrokを使ったお手軽テストの実践例

  • シナリオ: 閉域ネットワーク内のサーバで動いているhttp://localhost:80のWebサービスを外部からブラウザでテストしたい場合。
  • ステップバイステップ:
    1. ngrokのアカウント作成
      • 公式サイト(https://ngrok.com/)にアクセスして、まずはアカウント作成(Freeプラン)
    2. ngrokのダウンロードとインストール:
      • 公式サイトから適切なOSのインストール手順を確認してngrokのインストール
    3. 認証設定(任意だが推奨):
      • ngrokのWebサイトで認証トークン(authtoken)を取得して、以下のコマンドを実行
      • ngrok config add-authtoken <YOUR_AUTH_TOKEN>
      • これにより、セッションの継続やカスタムサブドメインの利用(有料プラン)が可能に。
    4. トンネルの開始:
      • Webサービスが動いているサーバで以下のコマンドを実行。
      • ngrok http 80
    5. テストURLへのアクセス:
      • コマンド実行後に表示されるForwardingのURL(例: https://xxxxxx.ngrok-free.app)に、お手持ちのPCのブラウザからアクセス!
  • テスト環境での活用イメージ:
    • 開発中のWeb画面の挙動を、チームメンバーや関係者に一時的に共有して確認してもらう。
    • Webhookの疎通確認(外部サービスからのコールバックをローカルで受け取る)。
    • スマートフォンなど、特定デバイスからのアクセス確認。

以下は、私が実際にローカルPC上のDockerで動いているDifyサービスを一時的に外部公開する流れです。

ngrockのAPTインストール

curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
  | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
  && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
  | sudo tee /etc/apt/sources.list.d/ngrok.list \
  && sudo apt update \
  && sudo apt install ngrok

Auth Token確認

https://dashboard.ngrok.com/get-started/your-authtokenにアクセスして、自身のアカウント用の認証トークンを取得。

img

ngrokにAuth Token設定

以下のコマンドでngrokのAuth Tokenを指定します。

ngrok config add-authtoken <<Your Auth Token>>

ngrokの起動

今回はとりあえず認証などは無しでカジュアルに起動しました。

接続元IP制限などを行う場合はFreeプランではNGでした。。。

ngrok http http://localhost:80/

うまくリッスン状態になって、専用URLが払い出されていますね。

img

無事専用URL経由でインターネット外部から接続できました。

img

ngrokのターミナル画面でもアクセス履歴が常に更新表示されています。

img

注意点とちょっとしたコツ

  • セキュリティに関する考慮:
    • あくまで「一時的なテスト」が目的。本番環境での利用は避けるべき。
    • 認証のかかっていないサービスを公開する場合は特に注意が必要。ngrokにはIPアドレス制限やBasic認証機能もあるので、必要に応じて活用する。
  • 無料プランの制限:
    • セッションごとにURLが変わる。
    • 接続時間や帯域、使える機能に制限がある。継続的な利用には有料プランの検討も。
  • ログの確認:
    • ngrokのCLI上や、ngrokのダッシュボード(Web UI)でアクセスログを確認できる。デバッグに役立つ。

まとめ

賢く手間なくテストを進めよう

  • 閉域ネットワークという制約の中でも、ngrok を使えばWebサービスのテストがぐっと楽になる。
  • Windows VMの起動やプロキシ設定の手間から解放され、開発体験が向上する
  • 一時的な利用に特化することで、「お手軽」 かつ 「迅速」 なテストを実現。
  • クラウドインフラ開発者にとって、まさに 「知っておくと便利なツール」 の一つになるでしょう。

Discussion