🦁

はじめてのCloudflare Tunnel その3 Quick Tunnel を試してみる&必要アウトバウンド通信の整理

2023/05/08に公開

前回までの記事(その1その2)ではCloudflare Tunnelを利用してプライベートサーバを記事的に外部からアクセスさせる方法とその監視方法についてご紹介しました。
この方法はDNSエントリをCloudflareに預けることで動作します。

しかしながら、テスト中にDNSをCloudflareに預けることが難しい時や、一時的にWebサーバにブラウザからテスト目的でアクセスさせるために外部開放を行いたいケースがあります。運用ポリシーによっては一時的とはいえインバウンド通信を許可するにはそれなりのプロセスが必要で、テスト用環境であればなおさらそのプロセスが重たいケースがあります。

その際便利なのがCloudflare Quick Tunnelです。これはあらかじめCloudflareが用意している専用FQDNで一時的にTunnelを成立させ外部からアクセスさせることが可能です。

やってみる
その1の手順に従いcloudflaredがサーバにインストールされ起動していることが前提です。
手順はこちらにありますが基本はシンプルです。

wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && dpkg -i cloudflared-linux-amd64.deb
cloudflared service install
systemctl start cloudflared

cloudflaredが起動したら以下のコマンドを実行します。

cloudflared tunnel --url http://localhost

作業環境でWebサーバが80番で起動している前提です。別ポートで起動している場合例えば

cloudflared tunnel --url http://localhost:8080

等と作業してください。以下のように独自URLが出力されます。

[root@ip-172-31-14-42 ~]# cloudflared tunnel --url http://localhost
2023-05-08T00:47:17Z INF Thank you for trying Cloudflare Tunnel. Doing so, without a Cloudflare account, is a quick way to experiment and try it out. However, be aware that these account-less Tunnels have no uptime guarantee. If you intend to use Tunnels in production you should use a pre-created named tunnel by following: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps
2023-05-08T00:47:17Z INF Requesting new quick Tunnel on trycloudflare.com...
2023-05-08T00:47:18Z INF +--------------------------------------------------------------------------------------------+
2023-05-08T00:47:18Z INF |  Your quick Tunnel has been created! Visit it at (it may take some time to be reachable):  |
2023-05-08T00:47:18Z INF |  https://trailers-modules-intl-wav.trycloudflare.com                                       |
2023-05-08T00:47:18Z INF +--------------------------------------------------------------------------------------------+
https://trailers-modules-intl-wav.trycloudflare.com

このURLが一時的なトンネルです。このURLにアクセスするとインバウンド通信の設定不要でアクセスが可能です。
試しにctr+cでプロセスを停止して再度実行すると以下のように都度都度異なるサブドメインが割り当てられることがわかります。

https://sunny-copied-community-pros.trycloudflare.com
https://keeping-largest-pastor-leaves.trycloudflare.com 
https://harvard-dvds-disk-knights.trycloudflare.com 

この機能は無償でご利用が可能です。
どこのエッジになんのプロトコルでTunnelがアクセスしているのか、が出力されています。

2023-05-08T00:50:15Z INF Registered tunnel connection connIndex=0 connection=c985df1f-61d7-49e9-be4a-ccebbde89670 event=0 ip=198.41.192.67 location=NRT protocol=quic

cloudflaredの動作に必要なアウトバウンド設定
以下の通りです。

Quick Tunnelに限らずcloudflaredはデフォルトでquick/UDPでの接続を行うため、UDP設定が必要です。
しかしながら環境によってはUDPが使えないケースもあります。その場合HTTP/2でのアクセスを行うには--protocolオプションを使用します。

cloudflared tunnel --protocol http2 --url http://localhost

ドキュメントを見ると昔はquic接続が行えない場合は自動でダウングレードが行われたようですが今は明示的に指定を行う必要があります。
その際必要なアウトバウンド設定は以下の通りです。

IPレンジを絞る場合は以下を確認して下さい。
https://www.cloudflare.com/ja-jp/ips/

勘違いしやすい点
Quick Tunnel構築の手順をもう一度見てみます。

cloudflared tunnel --protocol http2 --url http://localhost

Cloudflare側で設定されているTunnelへの接続はcloudflared起動時に自動で行われます。このため、Quick Tunnel接続の際にはQuickオプションなどが付与されないため、通常トンネル構築用コマンドに思えてしまいますが注意してください。

Discussion