「Cloudflare Tunnel」はローカル環境のアプリケーションを簡単に外部へ公開できるサービスです。「自宅サーバー」を出先から使うために必要なポート開放などのさまざまな設定を丸ごとスキップ可能なうえ、Cloudflare Accessと組み合わせれば複数ユーザーでの認証も設定可能です。今回はまずCloudflare Tunnelでローカル環境のサービスを外部からアクセスできるようにするところまでを試してみました。

Cloudflare Tunnel · Cloudflare Docs

https://developers.cloudflare.com/tunnel/

以前、ローカルAIを動かすツール「Lemonade」をインストールしたうえで、Firefoxのチャット機能を完全ローカルAIにするなど活用していたのですが、このローカル環境で動いているAIを外部から使いたいと思っていました。

しかし、いわゆる自宅サーバーを設置するとなるとポート開放や固定グローバルIPアドレスの用意、リバースプロキシの構成や認証機構の構築などの手間がかかります。さらに、もともとのLemonadeがローカルで動かす前提の作りとなっており、そのままインターネットに公開するのは危険です。

そこで今回はCloudflare Tunnelを使用することにしました。Cloudflare Tunnelを使うと、ローカル環境で動作する「cloudflared」がCloudflare側へアウトバウンド接続を張り、その経路を通じて外部からローカルサービスへアクセスできるようになります。

ローカルネットワーク側で外向きの接続を作るだけなのでポート開放など受信側のネットワーク設定を変更せずに済むのが大きなメリットです。アクセスがCloudflare経由になるためHTTPS化や公開ホスト名の設定が簡単で、DDoSなどの攻撃に対する保護機能も使えるうえ、Cloudflare Accessを使うことで公開したURLに対して認証を設定してアクセスを制限することが可能です。



さっそくCloudflare Tunnelを設定していきます。まずCloudflareのダッシュボードにアクセスし、左上の検索欄に「トンネル」と入力。「Zero Trust > ネットワーク > トンネル」と書かれた項目をクリックします。



「トンネルを追加」をクリック。



「選択する Cloudflared」をクリックします。



分かりやすくトンネルの名前を付けて「トンネルを保存」をクリック。



コネクターをインストールする必要があります。「ダウンロード」の横にあるURLをクリックしてインストーラーをダウンロード。



インストーラーをダブルクリックするとコネクターがインストールされます。確認などはなく、画面が一瞬表示されて閉じればインストールは完了しています。何度もインストーラーを起動しないように注意してください。



続いてスタートメニューを開き、「powershell」と検索。ヒットした「Windows PowerShell」の項目から「管理者として実行する」をクリックします。



ブラウザに戻り、「次のコマンドを実行します:」の下のコマンドをクリックしてコピー。



右クリックでPowerShellに貼り付けてEnterキーで実行します。



ブラウザの画面をスクロールし、「コネクター」の欄に「接続済み」の表示が出ればOK。「次へ」をクリックします。



外部からアクセスするホスト名を設定し、ルーティング先の内部アドレスも設定します。「http://localhost:13305」で動くLemonadeサーバーにルーティングするよう設定して「セットアップを完了」をクリック。



外部から先ほど設定したホスト名でアクセスしてみると、ローカルで動いているLemonadeサーバーにアクセスできました。



このままでは誰でもアクセスできてしまうので、次回は認証を設定していきます。