Cloudflare の DNS の基本:プロキシ化って何?

Cloudflare の DNS 設定で「プロキシ化」とあって戸惑ったのでどんな動作なのかまとめてみました。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

最近 Cloudflare を触り始めているのですが、一番最初に設定を行う DNS の設定について「プロキシ化」と出てきて戸惑うことがありました。

Cloudflare の DNS 設定

Cloudflare ではネームサーバーを登録して DNS の管理を行った上でサービスを利用します。そのため一番最初にドメインの登録を行います。登録は以下のエントリの手順に従ってください。なお、サブドメインがサポートされているのは Enterprise プランのみなのでご注意ください

Cloudflare のプロキシ化

Cloudflare では最初に行う基本設定が DNS です。ここで、A レコード、AAAA レコード、CNAME を設定するときにはプロキシの設定があります。DNS 設定でのプロキシとは一体何なのでしょうか?

以下のドキュメントに記載があります。つまり A、AAAA、CNAME レコードをプロキシ化すると DNS クエリの問い合わせ結果がオリジンの DNS ターゲットではなく、Cloudflare Anycast IP になります。

When you proxy an A, AAAA, or CNAME DNS record for your application (also known as orange-clouding), DNS queries for these records will resolve to Cloudflare Anycast IPs instead of their original DNS target.

Proxy status

DNS の問い合わせ結果が Cloudflare Anycast IP になると、普通の DNS の問い合わせとどの様な違いがあるのでしょうか?

DNS のみ

一般的な DNS の動作となり、DNS で登録されていたオリジンの IP アドレス(A, AAAA の場合)か、オリジンを指す FQDN(CNAME の場合)が返ってきて、最終的にはどちらもオリジンの IP アドレスが戻ってくるので、その IP アドレスに対してアクセスを行います。

つまり、以下のように A レコードを設定していれば、普通に203.0.113.1が返ってくるという当たり前の動作です。

cf.example.net.	300	IN	A	203.0.113.1

プロキシ化

では、プロキシ化されている場合はどうなるのでしょうか?この場合は、以下のように DNS を登録していてもオリジンの IP アドレスなどを返しません。

cf.example.net.	300	IN	A	203.0.113.1

以下のように A レコードを設定していても、別の IP アドレス(Cloudflare の IP アドレス)が返ってきます。

% dig cf.example.net +short
198.51.100.1
198.51.100.2

返ってくる別の IP アドレスは Cloudflare の Anycast IP なので、クライアントは Cloudflare に対してアクセスします。そして Cloudflare のネットワークを経由してオリジンのサーバーへアクセスします。つまり、Cloudflare 自体がオリジンサーバーのリバースプロキシとして動作することが「プロキシ化」の実態です。ここで勘違いをしやすいのですがDNS で登録した IP アドレスは問い合わせ結果に返ってこないという点に注意しましょう。

プロキシ化のメリット

Cloudflare のネットワークを経由してオリジンサーバーへアクセスするメリットとは何なのでしょうか?

一般的にインターネット経由でサーバーにアクセスする場合は多数の ISP などを経てアクセスします。この場合の経路は ISP 同士がどの IX を経由するか個別最適になるため、クライアントとサーバーの間では必ずしも最適にならずネットワークパフォーマンスが落ちがちです。

Cloudflare のプロキシ化により、リクエストのアクセス経路を最適化できパフォーマンスの向上が見込めます。それだけでなく、グローバルで複数リージョンに分散していても同じ IP アドレスを使用でき、オリジンサーバーの隠蔽による悪意あるトラフィックの防止が可能となります。類似の機能は AWS の Global Accelerator や Google Cloud における Network Service Tiers の Premium Tier で実装されているものになります。さらに Cloudflare のネットワークを経由することで様々なネットワーク機能、例えば Waiting Room や認証などを容易に統合できます。

さいごに

Cloudflare で一番最初に設定する DNS ですが、初めて設定したときにプロキシ化とは何なのかが把握できなかったためまとめてみました。Cloudflare のネットワーク機能はプロキシ化を前提としているものが多いですので、設定することを推奨します。ただしオリジンの IP アドレスではなくなるので、フォワードプロキシやファイアウォールの設定にはご注意ください。

最初につまずきやすそうな概念かと思うので、Cloudflare を初める方の手助けに慣れればと思います。