このガイドでは、従来の DNS ベースのロードバランサーが提供する機能と同様に、Cloudflare Load Balancing で DNS 永続性を実現する方法を説明します。
DNS 永続性は、同じローカル DNS サーバーからの後続の DNS リクエストが、同じ IP アドレスを受け取るようにします。VPN 接続や認証システムなど、セッションの一貫性が必要なアプリケーションで役立ちます。
Cloudflare Load Balancing では、DNS のみの負荷分散に対して、いくつかの設定方法で DNS 永続性を実現できます。
DNS のみの負荷分散では、DNS 永続性を実現する方法が 3 つあります。
この方法では、DNS リクエストを受け取った Cloudflare の拠点(PoP)に基づいて、地理的なステアリングを使います。
- エンドポイントごとにプールを作成します。どちらのプールにも Load Shedding は適用しません。
- DNS のみのロードバランサーを作成し、両方のプールを追加します。
pool_1をpool_2より上に並べます。 - Traffic Steering で Geo Steering を選びます。
- リージョン(例: Eastern North America)の Geo Steering ルールを作成し、同じプールを逆順(先に
pool_2、次にpool_1)で選びます。 - リクエストの送信元を決めるには、Never prefer ECS と PoP location を使います。
指定したリージョン内の Cloudflare PoP で受け取ったリクエストは一方のエンドポイントへ送られ、ほかのリージョンからのリクエストはもう一方のエンドポイントへ送られます。
リクエストを受け取った Cloudflare PoP をステアリングの判断基準にすると、IP ハッシュや IP 空間の分割より安定します。再帰 DNS プロバイダーが異なる出口 IP を使う影響を受けないためです。
この方法では、再帰 DNS リゾルバーの送信元 IP アドレスに基づいて、Load Shedding でトラフィックを振り分けます。
- エンドポイントごとにプールを作成します(例:
endpoint_1を含むpool_1とendpoint_2を含むpool_2)。 - 最初のプールで、Endpoint Steering に Hash を選びます。
- Load Shedding を次のように設定します。
- Policy: IP Hash
- Shed %: 50%(2 つのプールに均等に振り分ける場合)
- DNS のみのロードバランサーを作成し、両方のプールを追加します。
pool_1をpool_2より上に並べます。 - 追加のトラフィックステアリングやルールは設定しません。
この設定では、IP ハッシュを使ってリクエストの半分を 2 番目のプールへ振り分け、再帰リゾルバーの送信元 IP ごとにセッションアフィニティを維持します。
一部の再帰 DNS プロバイダー(Google DNS 8.8.8.8 や Quad9 9.9.9.9 など)は出口 IP をランダムに変えることがあり、永続性の安定性が下がることがあります。
この方法では、カスタムルールで IP アドレス範囲に基づいてトラフィックを分割します。
- エンドポイントごとにプールを作成します。どちらのプールにも Load Shedding は適用しません。
- DNS のみのロードバランサーを作成し、両方のプールを追加します。
pool_1をpool_2より上に並べます。 - トラフィックステアリングは設定しません。
- 次の内容で Custom Rule を作成します。
- Field: IP Source Address
- Operator: is in
- Value: IP 空間の一部(例: IPv4 空間の下位半分は
0.0.0.0/1)
- ルールアクションでは Override > Endpoints を選び、プールを逆順(
pool_2、pool_1)に設定します。
IPv4 空間の下位半分に属する送信元 IP のトラフィックは一方のエンドポイントへ、上位半分のトラフィックはもう一方のエンドポイントへ送られます。
方法 2 と同様に、出口 IP が変わる再帰 DNS プロバイダーでは、この方法の安定性は下がることがあります。