Back

Tailscaleでローカルウェブアプリに安全にアクセスする

Tailscaleでローカルウェブアプリに安全にアクセスする

機能開発の真っ最中。デザイナーが自分のマシンでレビューする必要がある。選択肢は、未完成のブランチをステージングサーバーにプッシュするか、ポートフォワーディングと格闘するか、ngrokを起動してトンネルが生き続けることを祈るか。どれもしっくりこない。

Tailscaleは、よりクリーンな方法を提供します。この記事では、Tailscale Serveを使用して、ファイアウォールポートを開いたりリバースプロキシを設定したりすることなく、デバイスやチームメイト間でローカルウェブアプリに安全にアクセスする方法を説明します。

重要なポイント

  • tailnetは、すべてのデバイスにWireGuard経由で安定した暗号化接続を提供します。静的IP、VPN設定、ファイアウォールルールは不要です。
  • Tailscale Serveは、自動HTTPS、安定したホスト名、ポートを開くことなく、ローカル開発サーバーをtailnetに公開します。
  • Tailscale Funnelは、tailnet外の人と共有する必要がある場合に、そのアクセスをパブリックインターネットに拡張します。
  • このワークフロー全体が、ほとんどの内部レビューシナリオにおいて、ステージングデプロイ、ポートフォワーディング、トンネルツールを置き換えます。

Tailnetとは何か、そしてローカル開発においてなぜ重要なのか

デバイスにTailscaleをインストールすると、それらはtailnetと呼ばれるプライベート暗号化ネットワークに参加します。すべてのデバイスは、接続しているWi-Fiネットワークに関係なく、一貫して機能する安定したIPアドレスとDNSホスト名を取得します。

これが基盤です。カフェにいるあなたのラップトップと自宅のデスクトップは同じtailnet上にあり、暗号化されたWireGuardトンネルを介して直接相互に到達できます。静的IP、VPN設定、ファイアウォールルールは不要です。

Tailscale Serve: 安全なローカル開発サーバーのための適切なツール

Tailscale Serveは、ローカルサービス(例えばlocalhost:3000で実行されている開発サーバー)をtailnet内の他のデバイスに公開します。対象がチームであり、パブリックインターネットではない場合に適したツールです。

ローカルウェブアプリをチームメイトと共有するには、次のコマンドを実行します:

tailscale serve 3000

これだけです。TailscaleはMagicDNSを介してHTTPS証明書を自動的にプロビジョニングし、次のような安定したURLでアプリを利用可能にします:

https://your-device-name.your-tailnet.ts.net

Tailscaleがインストールされ、適切なアクセス権限を持つチームメイトは、異なる都市、異なるネットワークからでも、そのURLを開いてローカル開発サーバーに直接アクセスできます。

Serveが処理すること

  • 自動HTTPS — TailscaleがTLS証明書を管理します。自己署名証明書の警告はありません。
  • 安定したホスト名 — URLはセッション間で変更されません。
  • ポートを開かない — ローカルサービスはlocalhostにバインドされます。パブリックインターネットには何も公開されません。
  • ID伝播 — Tailscaleは、認証されたユーザーのIDをリクエストヘッダー(Tailscale-User-LoginTailscale-User-Name)を介してバックエンドに転送できます。これは開発環境での軽量なアクセス制御に便利です。

セキュリティのため、開発サーバーはlocalhostにバインドしたままにしてください(ほとんどのフレームワークのデフォルト)。Tailscale Serveは安全なプロキシレイヤーとして機能し、アプリはパブリックインターフェースでリッスンする必要がありません。

Tailscale ServeとFunnel: 違いを理解する

この違いは重要であり、明確にする価値があります。

Tailscale ServeTailscale Funnel
アクセスできる人Tailnetメンバーのみパブリックインターネット上の誰でも
ユースケースチームコラボレーション、内部レビュークライアントデモ、Webhookテスト
HTTPSはい (MagicDNS)はい
閲覧者のデバイスにTailscaleが必要はいいいえ

すでにTailscaleを持っているチームメイトと共有する場合はServeを使用してください。tailnet外の誰か(クライアント、ステークホルダー、Webhookプロバイダー)がローカルサービスに到達する必要がある場合は**Tailscale Funnelを使用**してください。

Funnelでアプリを公開するには:

tailscale funnel 3000

URL形式は同じですが、トラフィックはオープンインターネットからルーティング可能になります。これは慎重に、必要な場合にのみ使用してください。

このワークフローが輝く実際のシナリオ

  • レスポンシブデザインレビュー — 何もデプロイせずに、異なるネットワーク上のデザイナーとNext.js開発サーバーを共有します。
  • リモートペアプログラミング — コーディング中に、チームメイトがブラウザでローカルアプリを開きます。
  • ステークホルダープレビュー — ステージング環境を立ち上げることなく、Funnelを使用して期限付きのデモリンクを提供します。
  • モバイルテスト — tailnet上にあるスマートフォンからlocalhost開発サーバーにアクセスします。

始め方

  1. 各デバイスにTailscaleをダウンロードしてインストールします。
  2. サインインし、管理コンソールでMagicDNSが有効になっていることを確認します。
  3. localhost:3000(または任意のポート)で開発サーバーを起動します。
  4. ホストマシンでtailscale serve 3000を実行します。
  5. 他のtailnetデバイスから提供されたhttps:// URLを開きます。

配信を停止するには、次のコマンドを実行します:

tailscale serve reset

まとめ

Tailscale Serveは、ローカル開発作業を共有する際の摩擦を取り除きます。チームは安定した暗号化されたHTTPSリンクを取得します。サービスはlocalhost上に留まります。内部レビューのためにステージングサーバーを完全にスキップできます。本当にパブリックアクセスが必要な場合、Funnelは1つのコマンドで利用できます。セットアップ全体は数分で完了し、インフラストラクチャの変更は不要です。Tailscaleをインストールし、1つのコマンドを実行し、URLを共有するだけです。

よくある質問

はい。Tailscale Serveは、暗号化されたWireGuard接続を介して、tailnetの認証されたメンバーにのみローカルサービスを公開します。開発サーバーはlocalhostにバインドされたままで、パブリックインターネットから到達可能になることはありません。アクセスはtailnetのアクセス制御(grantsやACLポリシーなど)によって管理されるため、承認されたチームメイトのみが接続できます。

もちろんです。Tailscale Serveは、TCPポートでリッスンする任意のローカルサービスで動作します。React開発サーバー、Djangoアプリ、Railsサーバー、または単純な静的ファイルサーバーを実行している場合でも、Tailscale Serveを正しいポート番号に向けるだけで、残りは処理されます。

基盤となる開発サーバーとTailscaleプロセスがアクティブでなくなるため、配信されたURLは到達不能になります。Tailscale Serveはアプリを独立して実行し続けることはありません。ラップトップを再度開いて開発サーバーを再起動すると、tailscale serveを再度実行することで、同じ安定したURLでアクセスが復元されます。

利用可能性は、tailnetで使用されているプランによって異なります。Tailscaleは、限られたユーザーとデバイスを持つ無料のPersonalプランを提供していますが、チームや組織は、tailnetの設定方法に応じて異なるプランが必要になる場合があります。

]

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay