1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカルホストで動作しているアプリケーションを簡易的に本番モードで試したり、ユーザテストのためにngrokを使っていましたが、Cloudflareもトンネル機能が無償である程度使えるようなので触ってみました。

Cloudflare

Cloudflareは、2019年7月に設立されたアメリカ合衆国の企業で、コンテンツデリバリネットワーク(CDN)、インターネットセキュリティサービス、DDoS防御、分散型ドメイン名サーバー(DNS)システムなどを提供しています。

2025年6月時点で、Content Delivery Network(CDN)市場83.4%のシェアだそうです。

Cloudflare Tunnel

Cloudflare Tunnelは、サーバーへのインバウンド(内向き)通信設定なしに、対象サーバーからアウトバウンド(外向き)通信のみで、外部からの安全なサーバーアクセスを実現するサービスです。CloudflareのZero Trust製品の一部として提供されています。

主な利点と特徴:

  • ルータのポート開放不要: 自宅サーバーなどの公開時に必要となるポート開放が不要になります。これにより、セキュリティリスクを低減し、ルータ操作ができない環境でもサーバー公開が可能です。
  • 安全な接続: cloudflared という軽量なデーモン(コネクタ)をオリジンサーバーにインストールし、これを使ってCloudflareのグローバルネットワークへ安全なアウトバウンド接続(トンネル)を確立します。外部からの直接的なアクセス経路がないため、オリジンサーバーのIPアドレスを隠蔽し、攻撃対象を減らします。
  • IPアドレス変更に強い: ルータにWebサーバーのIPアドレスを記憶させる必要がないため、IPアドレス変更の影響を受けにくいです。
  • Terraformでの設定・管理: TerraformなどのIaC(Infrastructure as Code)ツールで設定を自動化・管理できます。
  • SSH接続やWebサイト公開: 自宅のマシンへのSSH接続や、自宅サーバーでホストしているWebサイトをポート開放せずに公開するなどの用途に利用されます。
  • Zero Trustとの連携: Cloudflare Zero Trustと連携することで、特定のユーザーのみがアクセスできる公開Webサービスを簡単に構築できます。
  • 管理が容易: Cloudflare Zero Trustのダッシュボード(Networks > Tunnels)からトンネルの作成や管理を行うことができます。

Cloudflare Tunnel利用手順

アカウントの作成

Cloudflareのアカウントが必要になりますがこの作業は省略します。

Zero Trustの利用登録

こちらも登録が必要です。無料プランでも十分な機能がありますので、最初は無料プランで登録します。手順は割愛します。

Tunnel の作成

Zero Trustのページでサイドナビゲーションメニュー内「Networks > Tunnels」にあります。
image.png

"Add a tunnel"ボタンで作成を開始します。

タイプ選択

Tunnelのタイプが「Cloudflared」と「WARPConnector(beta)」があるようです。
image.png

WARP Connectorはbeta版なので、手順も少なそうな"Cloudflared"を選択しました。
軽量なコネクタ(cloudflared)をサーバーにインストールし、Cloudflareのグローバルネットワークへ安全なトンネルを確立します。

Tunnel の命名

トンネル名を付ける必要があります。アプリケーション名やステージングや本番等のようにそういった文字列を入れるとよいようです。

image.png

Connectorのインストール

ページ内ではconnectorと読んでいますが、各種OSに対応するインストール方法が用意されています。今回はDockerを使ってみることにしました。

image.png

以下のコマンドでインストールと実行が可能なようです。

tokenオプションの値はページ内に記載しているものを使います

docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token ey...9

以上を実行するとConnectorsセクションに接続中のコネクタが表示されました。
image.png

接続設定

トンネル先の接続設定を行います。
基本的には Subdomain や Domain、Path には用意したものを記入します。
Service の設定は口述しますが、基本的に localhost:<ポート番号> でよいですが,Dockerルータを利用するならサービス名を記入することもできます。

image.png

Docker Composeへの構成

前セクションのようにDockerコンテナとの接続が確認できれば、Docker Composeを利用して別コンテナへのプロキシを設定できます。
今回はNginxコンテナを用意してCloudflaredコンテナから接続できるようにしてみます。

docker-compose.yml

接続設定 で示したように http://nginx:80 へのトンネルを作成した場合、以下のような docker-compose.yml になります。サービスの一つに cloudflare-tunnel(サービス名は任意)を用意し、depends_onnginx サービスとリンクしておけば Docker ルータ経由したアクセスが可能です。

services:
  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/ngin.conf:/etc/nginx/nginx.conf
    ports:
      - ${NGINX_HTTP_PORT:-80}:80
      - ${NGINX_HTTPS_PORT:-443}:443
    depends_on:
      - backend
      - app

  cloudflare-tunnel:
    image: cloudflare/cloudflared:latest
    depends_on:
      - nginx
    command: >
      tunnel --no-autoupdate run --token ${CLOUDFLARE_TUNNEL_TOKEN:? Set CLOUDFLARE_TUNNEL_TOKEN into .env}

そもそもですが、localhost とのポートマッピングをしておけば http://localhost:80 でも接続は可能ですね。

まとめ

Cloudflare の Zero Trust サービスにある Tunnel 機能を利用してみました。手軽さは Ngrok の方に軍配が上がるかなとは思いますが、制限が強めなのでその観点で困っている場合は Cloudflare を一度利用してみるといいかもしれません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?