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?

Cloudflare Tunnelを使う

Posted at

使うと何が嬉しいか

Cloudflare Tunnelを使うと、ファイアウォールの内側にあるサーバーをポートを開けることなくインターネットに公開することができます。また、CloudflareのWAFやCDNやSSLが簡単に使えるようになったりゼロトラスト的にトラフィック監視したり、というのも可能になります

また、大抵のご家庭にあるような気がする自宅サーバーを公開しようとした場合にも、サーバーにインストールしたCloudflareクライアントがCloudflaredネットワーク経由で公開してくれるので、わざわざ自宅回線をグローバルIPで契約しなくても良くなります

仕組み

サーバーに常駐したCloudflaredクライアントがCloudflareのネットワークとの接続を維持した状態にしておいて、インターネットからアクセスしてくるユーザーからのhttpリクエストをCloudflareネットワークに仲介してもらう、という仕組みです
180c49e5984f-20231129.png

内側から外側への接続を通しているだけなのでファイアウォール設定でポートを開ける必要はなく、サーバーのIPがころころ変わってもCloudflareクライアントがCloudflareネットワークを見つけられれば良いので関係なく、必ずCloudflareネットワークを通るのでトラフィック監視やWAF、CDNが簡単に使えます

使い方

ここにドキュメントがあります
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/

Tunnelを使うときに実際やる手順は以下の2つだけです

  1. Tunnelをつくる (Tokenを発行する、URLと紐づける)
  2. サーバーにCloudflaredをインストールしてTunnelと接続する

Cloudflaredクライアントはネットワークが繋がってる環境で動かしてやれば勝手にCloudflareネットワークを見つけて動いてくれます。そこから先は公式サイトのダッシュボードから設定するだけで公開できますので簡単です

1. Cloudflare Tunnelの準備

1-1. Cloudflareアカウントをつくる

まだ作ってない人は以下からアカウントを作りましょう
https://one.dash.cloudflare.com/

2025年1月現在、無料、Standard、Enterpriseの3プランか、プラン選択できるアラカルトのいずれかで契約することができます。無料プランでもアクティブユーザー数50人まで利用できて、基本的な機能は使えますのでまずはこちらで良いと思います

1-2. DNSにサイトを登録する

DNSをCloudflareにしておけば設定が簡単になるので、今回はこちらでやってみます
https://dash.cloudflare.com/26802817ab1ba28e006f8b744823326d

ドメインを取得した際に別のDNSを設定されていると思いますので、そちらにもCloudflareのDNS URLを設定しにいく必要があります。どのURLを設定すれば良いかは画面上に表示されますのでそちらを貼ってやればOKです

1-3. Tunnelを作成する

設定したサイトで使うTunnelを設定していきます
以下からTunnelを作成するを選択します
https://one.dash.cloudflare.com/26802817ab1ba28e006f8b744823326d/networks/tunnels

CloudflaredかWARPを選ぶように表示されます
今回はCloudflaredを選択します

適当な名称をつけてやります

最後に環境を選んでやるとトークンを発行してインストール手順も表示してくれます

以下はDebianの場合

dockerでも出来ます

下の方にあるConnectors欄には実際に接続されているTunnelが表示されますので、画面を開いたままサーバー側の準備を完了すれば、ここで確認することができます

2. サーバー側の準備

2-1. Ubuntuの場合

httpサーバーがあるサーバーにcloudflaredをインストールして、URLを指定して起動してやればTunnelを動作させることが出来ます。インストール手順は先ほどのページに表示されているものそのままです

インストール
sudo apt-get update
sudo apt-get install -y curl
sudo apt-get install apache2 -y
sudo apt-get clean

sudo service apache2 start

curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
sudo cloudflared service install ここにtokenを書く

あとは以下コマンドで実行してやればOKです

--no-autoupdateは自動更新を無効にするオプション、--urlで公開するhttpサーバーのURLを指定、--tokenが先ほど格好されたtokenを指定します

Tunnel起動
cloudflared tunnel --no-autoupdate run --url http://localhost --token ここにtokenを書く

2-2. dockerの場合

dockerで開発している場合はcloudflaredコンテナを追加してdocker-compose.ymlで紐づけ設定を書いてやるのが良いと思います

以下ではhttpdコンテナとcloudflaredコンテナを立てて動作させてみます

docker-compose.yml
version: '3.8'

services:
  http_server:
    image: httpd:latest
    container_name: cloudflared-http-server-container
    ports:
      - "8080:80" # ローカル環境で確認する場合に使用

  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared-container
    depends_on:
      - http_server
    command: 
      tunnel --no-autoupdate run --url http://http_server --token ここにtokenを書く

3. Tunnelの設定

3-1. 接続を確認する

上記で設定したCloudflaredが接続できていると1-3で設定中だった画面に接続された旨が表示されます。上手くいっているようなら次に進んでルーティングを設定します

パブリックホスト名タグを選択した状態で、インターネットから見た公開したいURL (サブドメイン、ドメイン、パス) とCloudflaredクライアントから見たサーバーのURL (公開したいサービス) を入力します。DNSをCloudflareにしておくと、ここの内容をDNSレコードに反映してくれてめちゃめちゃ楽です

Tunnelのページを見ると、上手く接続できていればHEALTHY、接続できていればINACTIVEが表示されます。ここでのHEALTHY/INACTIVEは、TunnelがCloudflareネットワークに接続できているか否かを示しているだけなので、Cloudflaredがサーバーを見つけられているか否かは反映していません

3-2. 表示の確認

最後に正常に動作できているか確認します

設定したURL (上記の場合はhttps://www.hoge.com) を開いて以下のようにhttpサーバーからの情報が表示されればOKです

上手くいっていない場合は、cloudflaredの入っているサーバーからcurlしてみるなどして動作を確認しましょう

まとめ

Tunnel自体もすごいんですが、これで公開するだけでSSLを付けてhttpsで公開してくれたり、CDNキャッシュやWAF、DDoS防御などがデフォルトで有効になるというのもすごいと思います。業務でも使いたくなりますね

レッツトライ

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?