ばじめてのCloudlfare Tunnel その4 Public Hostnameモードの有効化されるドメイン名について
(作業をしていて少しはまったのメモです)
この記事でCloudflare Tunnelを用いて、公開用ウェブサーバをインバウンドセキュリティグループの設定なしで特定のプロトコルとポートを公開する方法をご紹介しました。
これはCloudflareをCDNとして利用する際、CDN以外から直接オリジンへのアクセスを防ぐもっとも簡単かつ安全な方法です。
ところで、オリジンにCloudflare CDN用にCNAMEを設定した場合に設定した際に用いたサブドメイン名とTunnelセット時にトンネル用にセットするサブドメインに同じ名前を使えるのか?それとも異なるサブドメインをセットした場合、どちらが有効化されるのか?について挙動を調べたのでまとめます。
結論、Tunnelのサブドメインが優先される
早速やってみます。いつも通りオリジンに対してCNAMEを普通にセットします。セキュリティグループはインバウンドHTTP(80)を解放したAmazon Linux 2023 EC2をオリジンに使用します。
オリジン:http://ec2-52-195-229-80.ap-northeast-1.compute.amazonaws.com/
Cloudflare CDN (CNAME):keyless.harunobukameda.labrat.online
この状態では当然両方のオリジンにアクセスが可能です。
(オリジンは素のnginxを使います)
ここにトンネルを設定していきます。マネージメントコンソール左ペインのAccess
をクリックします。
Launch Zero Trust
を押します。
左ペインからAccess
→Tunnel
をクリックします。
Create a tunnel
を押します。
適当な名前を付けSave tunnel
を押します。
マネージメントコンソールで表示される以下のコマンドをオリジンで実行します。
curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm &&
sudo yum localinstall -y cloudflared.rpm &&
sudo cloudflared service install <なにかの認証情報>
<なにかの認証情報>は皆さんのアカウントに紐付いた専用のBase64文字出るが表示されているはずです。
インストールが完了した後以下のコマンドを実行します。
sudo systemctl start cloudflared
マネージメントコンソールに戻りNext
を押します。
さぁ、ここが問題の設定画面です。
現在の環境は以下です。
オリジン:http://ec2-52-195-229-80.ap-northeast-1.compute.amazonaws.com/
Cloudflare CDN (CNAME):keyless.harunobukameda.labrat.online
以下の通り入力するとエラーとなります。
これはkeyless.harunobukameda.labrat.onlineというDNSエントリがすでに存在しているためです。つまりCDNで使うCNAME用DNS名とTunnel用DNS名は別でなければいけないことがわかります。ここはサブドメインをtunnel
と設定します。
DNSの画面に戻ると、tunnelという専用CNAMEレコードができています。
CNAME先のオリジンは以下です。
e88b170d-8aca-423b-9334-f89b96062973.cfargotunnel.com
これはCloudflare Tunnelを処理する専用エッジのDNS名です。
ではこの状態でアクセスが有効化されているものはどれでしょうか。
オリジン:http://ec2-52-195-229-80.ap-northeast-1.compute.amazonaws.com/
Cloudflare CDN (CNAME):keyless.harunobukameda.labrat.online
Cloudflare Tunnel(CNAME):tunnel.harunobukameda.labrat.online
結論は3つともアクセスが可能です。上2つはEC2のセキュリティグループのインバウンドが80を許可しているため、それ経由のアクセスとなります。3つ目は、Tunnelですのでセキュリティグループはアウトバウンドのみを許可すれば通信が可能です。
試しにインバウンドのセキュリティグループを以下にすれば3つ目のみがアクセス可能となります。
Discussion