« ^ »

Cloudflare Tunnelを使う

所要時間: 約 3分

開発中のやWebサーバーなどの機能を公開する時、これまでNgrokを使用していた。ローカルで実行するngrokコマンドはNgrokのサーバーとトンネルを確立し、Ngrokが保有するドメインへのアクセスをトンネル経由でローカルへと転送する。ngrokコマンドまで到達した通信は、ngrokコマンド起動時に指定した先へとさらに転送される。Ngrokにはいくつかプランが用意されている。無料であるフリープランも用意されているが、ドメインの固定はできず、またアクセスには警告画面のようなものを表示する。有料プランは、これらの問題は解消されるが、月20ドルだ。正直、高い。もしこれならGoogle Cloud ComputeEngineで無料インスタンスを配備し、sshポートフォワードで転送させるほうが安上りになる。しかし、それだけのためにインスタンスを保守する作業をしたくない。

調べていたところ、Cloudflareは同様の機能 Cloudflare Tunnel を提供していた。私の場合、既にドメインを保有しており、Cloudflareで管理している。そのため、そのドメインに割り振れるのは都合がよい。今回はこれを試すことにする。

cloudflaredを準備する

Cloudflare Tunnel を利用するには cloudflared コマンドが必要だ。まずはこれをインストールする。各環境毎にインストール方法が整備されている1。今回はmacOSにhomebrewを使用してインストールする。

brew install cloudflare/cloudflare/cloudflared

インストールが完了すると cloudflared コマンドが使用できる。

次にコマンドが認証情報を使用できるようにする。

cloudflared login

実行するとブラウザが開き、認証などを求められる。全ての処理が済むと $HOME/.cloudflared/cert.pem に認証情報が書き込まれる。

トンネルの作成

次にトンネルを作成する。

cloudflared tunnel create MY_TUNNEL_NAME

成功すると MY_TUNNEL_NAME というトンネルが作成される。

このトンネルをDNSにひもづける。ドメインを保有しているためこれが出来る。ひもづけたいドメイン名には自分の保有するドメインを指定する。(例: testing.example.com )

cloudflared tunnel route dns MY_TUNNEL_NAME ひもづけたいドメイン名

トンネルへの接続確認をする

トンネルへの接続確認のための機能が用意されているため、接続確認にはそれを用いる。

cloudflared tunnel run --hello-world MY_TUNNEL_NAME

ひもづけたドメインにアクセスすると、Cloudflareのテストページが表示される。このページはローカルで動作している cloudflared が返している。

トンネルへ接続する

接続確認が済んだら、あとは接続するのみだ。Cloudflareから受け取った通信を、ローカルのどこに転送するかは --url で指定する。 ここでは http://localhost:8080 に転送する。

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

基本的な使い方はこれだけだ。

TODO QUICサポート

cloudflaredはQUICをサポートするようになった。minetestはUDPで通信するため、もしかしたらQUICにも対応しているたもと思い試してみたが上手くいかなかった。それはおそらくminetestがQUICをサポートしていないからだろう。この事について後日調査する。

料金

この機能は無料で提供されている。ドメインは自分で準備する必要があり、それは有料だが安いものであれば年間2000円といったところか。だいぶ安い。

脚注