なぜポートフォワーディングをやめてCloudflare Tunnelに移行したのか?
Home LabやVPSを運用していて、ハッカーの攻撃を恐れてポート80や443を開放するのをためらっていませんか?Cloudflare Tunnelは、自宅の「ドア」を閉じたまま、アプリケーションをインターネットに公開できるソリューションです。以前はサービスを公開するたびにルーターのポートフォワーディングを設定する必要があり、非常に面倒でした。さらに、プロバイダーのIPアドレスが頻繁に変わるため、DDNSが不安定になることもありました。
システム全体をCloudflare Tunnelに移行して半年以上が経過し、特に価値があると感じた3つのメリットを紹介します。
- CGNATの突破: 4G回線やマンションの共有回線など、ルーターの設定権限がない環境でもウェブサイトを公開できます。
- 完全な匿名性: ハッカーはサーバーの実際のIPアドレスをスキャンできません。すべてのトラフィックは、サーバーに到達する前にCloudflareのファイアウォールでフィルタリングされます。
- 手軽なSSL化: Certbotのインストールや、3ヶ月ごとのLet’s Encrypt証明書の更新を心配する必要はありません。
クイックスタート:5分でDockerアプリを公開する
始めるには、Cloudflareのアカウントと、ネームサーバーをCloudflareに設定したドメインが必要です。
ステップ1:ダッシュボードでTunnelを作成する
Zero Trust Dashboard -> Networks -> Tunnels にアクセスします。Create a Tunnel を選択し、home-server のような分かりやすい名前を付けて保存します。
ステップ2:Dockerでコネクタを実行する
Cloudflareからトークンが発行されます。サーバー上で以下のコマンドを実行してください(YOUR_TOKEN_HERE を実際のトークンに置き換えてください)。
docker run -d --name cloudflared cloudflare/cloudflared:latest tunnel --no-autoupdate run --token YOUR_TOKEN_HERE
実行すると、このコンテナはCloudflareへのアウトバウンド接続を確立します。ルーターやVPSのファイアウォールでポートを開放する必要は一切ありません。
ステップ3:Public Hostnameの設定
ウェブ画面に戻り、Public Hostname タブで **Add a public hostname** をクリックし、以下の情報を入力します。
- Subdomain:
app - Domain: 自分のドメインを選択
- Service Type: HTTP
- URL:
localhost:8080(アプリケーションのポート番号)
https://app.yourdomain.com にアクセスしてみましょう suspension、緑色の鍵マークが表示され、アプリがオンラインになっているはずです!
Docker Composeによるプロフェッショナルなデプロイ
実際には、管理のために常に docker-compose.yml を使用しています。この方法では、コンテナ同士がDockerの内部ネットワークを介して接続されます。ホスト側にポートを公開(ports: セクションの記述)する必要すらありません。
version: "3.9"
services:
my-app:
image: nginx:alpine
container_name: web_app
networks:
- internal_network
tunnel:
image: cloudflare/cloudflared:latest
restart: always
command: tunnel run --token ${CF_TUNNEL_TOKEN}
networks:
- internal_network
networks:
internal_network:
driver: bridge
Tips: ダッシュボードの設定で localhost:80 と入力する代わりに、http://web_app:80 と入力してください。Cloudflare Tunnelは、同じネットワーク内の web_app コンテナを直接見つけ出します。
Cloudflare Accessによる2段構えのセキュリティ
PortainerやAdminerなどの管理ツールを使用する場合、私はよく Cloudflare Access を併用します。ログイン画面をそのまま公開するのではなく、自分のメールアドレスのみアクセスを許可するポリシーを設定できます。その際、Cloudflareは本人確認のためにメールでOTP(ワンタイムパスワード)を送信します。これにより、アプリのパスワードに対するブルートフォース攻撃を100%防ぐことができます。
トラブルを避けるための重要な注意点
非常に便利なCloudflare Tunnelですが、万能ではありません。長期運用の中で気づいた注意点を共有します。
1. アップロード容量の制限
Cloudflareの無料プランでは、デフォルトでアップロードファイルサイズが約100MBに制限されています。Nextcloudで4K動画をバックアップする場合などは、413エラーが発生します。大容量ファイルを頻繁に転送する必要がある場合は、慎重に検討してください。
2. レイテンシ(遅延)
トラフィックがCloudflareのインフラを経由するため、Pingが20ms〜50msほど増加します。一般的なウェブアプリなら問題ありませんが、低遅延が求められるゲームサーバーなどを運用する場合は問題になる可能性があります。
3. トークンの管理
CF_TUNNEL_TOKEN は非常に重要です。これを知っている人は誰でもあなたのシステムに「侵入」できてしまいます。トークンは .env ファイルに保存し、絶対にGitHubなどで公開しないようにしてください。
結論として、Cloudflare Tunnelは従来のポート開放(NAT)に代わる大きな進歩です。高速で安全、かつデプロイも非常に簡単です。Home Labを構築しているなら、ぜひ今日からTunnelに切り替えてみてください。

