zrokガイド:Ngrokに代わる「救世主」、localhostを高速かつ安全に公開する方法

Network tutorial - IT technology blog
Network tutorial - IT technology blog

ローカル環境から成果物をデモする際の悩み

素晴らしい機能を実装し終えて、すぐにクライアントにデモリンクを送りたいと思ったことはありませんか?あるいは、自宅のRaspberry PiサーバーでStripeからのWebhookを受け取る必要があるかもしれません。以前なら、Ngrokが定番の選択肢でした。しかし、現在のNgrokの無料版は、1GBの帯域制限、頻繁に変わるURL、そしてブラウザで「偽サイト」と警告が表示されるなど、かなり制約が厳しくなっています。

さまざまなトンネルツールを試した結果、たどり着いたのがzrokです。これはOpenZitiプラットフォーム上に構築されたオープンソースツールです。わずか30秒でNATやファイアウォールを「突破」できるだけでなく、機能も非常に豊富です。最大の魅力は、HTTP、TCPの共有はもちろん、コマンド一つでフォルダをネットワークドライブのように公開できる点にあります。

以前、クライアント先の古いルーターでポート開放の設定をするだけで午前中を潰してしまったことがあります。zrokを使えば、そうした障壁はすべて解消されます。固定IPもルーターの管理者権限も不要。インターネットさえあれば準備完了です。

なぜzrokは(無料なのに)使う価値があるのか?

技術的には、zrokは自分のPCから彼らのゲートウェイまで安全なトンネルを作成します。ユーザーがURLにアクセスすると、リクエストは安全にローカルホストへルーティングされます。

Ngrokからzrokに乗り換えた理由は以下の通りです:

  • NAT/ファイアウォールの回避: 3層のネットワーク内にあるマシンでも問題なく動作.
  • プライベートモード: 許可したユーザーのみがアクセス可能。SSHの利用に最適。
  • セルフホスト可能: zrokのサーバーを信頼できない場合は、独自のサーバーを立てて100%データを管理できます。
  • 帯域制限なし: 現在のところ、SaaSの無料版でも通常のデモ作業には十分すぎるほどスムーズに動作します。

Linuxでの迅速な導入

以下はUbuntu 22.04での手順ですが、他のディストリビューションでも同様です。

1. 認証トークンの取得

zrok.ioにアクセスしてアカウントを登録します。メール認証後、ダッシュボードにログインすると、zrok inviteコマンドと長いトークンが表示されます。このトークンは後で環境を有効化する際に必要になるので、保存しておいてください。

2. zrokのインストール

公式スクリプトを使用して自動化:

curl -sSLf https://get.zrok.io | sudo bash

インストール後、zrok versionで確認。バージョン(例:v0.4.x)が表示されれば準備完了です。

3. 環境の有効化

ステップ1で取得したトークンを使って、自分のPCをzrokシステムに紐付けます:

zrok enable <your_token_here>

このコマンドにより、PC固有の安全なアイデンティティが作成されます。この操作は一度だけでOKです。

よくある3つの活用シーン

シーン1:Webアプリを素早く公開する(ポート 8080)

ポート8080でNode.jsアプリを動かしている場合、共有リンクを取得するには以下のコマンドを打ちます:

zrok share public http://localhost:8080

すぐに.share.zrok.ioで終わるURLが表示されます。このURLへのリクエストはすべてローカルPCに転送されます。非常に便利です!

シーン2:Webhook用にURLを固定する

Stripe Webhookなどを統合している際、zrokを再起動するたびにStripe側のURLを書き換えるのは面倒です。そこでreserve機能を使います。

まず、特定の名前を予約します:

zrok reserve public http://localhost:8080 --unique-name my-webhook-api

次回からは、以下のコマンドを実行するだけです:

zrok share reserved my-webhook-api

URLは常にmy-webhook-api.share.zrok.ioになります。※この名前はzrokシステム全体でユニークである必要があります。

シーン3:ログファイルやドキュメントフォルダを共有する

数百MB of ログファイルを同僚に送る際、Google Driveにアップロードするのは時間がかかります。そんな時はフォルダを直接共有します:

zrok share public ./logs_folder --backend-mode web

受け取り側は、シンプルなWebインターフェースを通じて、あなたのPCから直接ファイルを最高速度でダウンロードできます。

Private Shareによる高度なセキュリティ

外出先のカフェから自宅のPCにSSH接続したいけれど、ハッカーによるパスワード試行が心配な場合、privateモードを使います。ここでOpenZitiのZero Trustの真価が発揮されます。

自宅のPC(サーバー側):

zrok share private localhost:22 --backend-mode tcp

アクセスコード(例:abc123xyz)が発行されます。

カフェのPC(クライアント側):

zrok access private abc123xyz

クライアント側でポート(通常は9191)が開きます。あとは自分自身のlocalhostにSSHするだけです:

ssh user@localhost -p 9191

これでSSHサービスはインターネットから完全に隠蔽されます。ポート22をスキャンされる心配もありません。

実際に使ってみてわかったこと

zrokは強力ですが、データは中間サーバーを経由します。ファイルの転送速度が遅いと感じる場合は、ゲートウェイとの地理的な距離が原因かもしれません。超低遅延が求められるプロジェクトでは、日本国内などのVPSにzrok self-hostedを構築することを検討してください。

また、不特定多数にURLを公開する場合は、ボット対策として基本的な認証レイヤーを追加することをお勧めします:

zrok share public http://localhost:8080 --basic-auth admin:password123

まとめ

zrokは、開発者やDevOpsエンジニアにとって軽量ながら非常に多機能なツールです。セキュリティを犠牲にすることなく、サービスの共有という課題を完璧に解決してくれます。Ngrokの制約に疲れたなら、今すぐzrokを試してみてください。わずか2分で、自分の通信環境を完全にコントロールできるようになります。

Share: