デフォルトでは、ユーザーデバイス上のすべての DNS リクエストは、ローカル解決でよく使うトップレベルドメイン(localhost など)を除き、Cloudflare の パブリック DNS リゾルバー で解決されます。パブリックインターネットでは解決されない内部サーバー名やドメインへユーザーが接続できるようにするには、次の 2 つの方法があります。
Local Domain Fallback は、特定の DNS リクエストを Cloudflare のパブリック DNS リゾルバーではなく、プライベート DNS リゾルバーへ送るよう Cloudflare One Client に指示します。この方法は、長いあいだプライベート DNS の主な提供手段であり、いちばん簡単な選択肢です。ただし次の 2 点の制約があります。特定の属性に基づいてプライベート DNS クエリを別のリゾルバーへ決定的に振り分けられないこと、および Cloudflare が解決していないため、このトラフィックに Gateway DNS ポリシーを適用できないことです。
Local Domain Fallback の仕組みの詳細は、Cloudflare One Client が DNS リクエストを処理する方法 を参照してください。
Local Domain Fallback の一覧にドメインを追加する手順は次のとおりです。
- Cloudflare ダッシュボード ↗ で、Zero Trust > Team & Resources > Devices > Device profiles > General profiles を開きます。
- 表示または変更したい デバイスプロファイル を探し、Configure を選択します。
- Local Domain Fallback までスクロールし、Manage を選択します。
-
Domain に、プライベート DNS サーバーで解決したい apex ドメイン(
example.com)を入力します。apex ドメイン配下のプレフィックスはすべて Local Domain Fallback の対象になります(つまり、example.comは*.example.comとして解釈されます)。 -
DNS Servers に、そのドメイン名を解決する DNS サーバーの IP アドレスを入力します。パフォーマンスの問題を避けるため、Cloudflare はサーバーを最大 8 台までにすることを推奨します。
-
任意の説明を入力し、Save domain を選択します。
Local Domain Fallback の一覧は、特定の デバイスプロファイル にスコープされます。デバイスプロファイルに対応する Local Domain Fallback リソースがない場合、そのデバイスは手順 2 に表示されるデフォルトのローカルドメインを使います。
-
cloudflare_api_token↗ に次の権限を追加します。Zero Trust Write
-
(任意)複数のデバイスプロファイルで再利用できるドメインの一覧を作成します。たとえば、デバイスプロファイルと同じモジュールでローカル値を宣言できます。
local-domains.local.tftf locals { default_local_domains = [ # Default Local Domain Fallback entries recommended by Cloudflare { suffix = "corp" }, { suffix = "domain" }, { suffix = "home" }, { suffix = "home.arpa" }, { suffix = "host" }, { suffix = "internal" }, { suffix = "intranet" }, { suffix = "invalid" }, { suffix = "lan" }, { suffix = "local" }, { suffix = "localdomain" }, { suffix = "localhost" }, { suffix = "private" }, { suffix = "test" } ] } -
デフォルトのデバイスプロファイルに Local Domain Fallback を設定するには、
cloudflare_zero_trust_device_default_profile_local_domain_fallback↗ リソースを使います。カスタムのデバイスプロファイルに Local Domain Fallback を設定するには、cloudflare_zero_trust_device_custom_profile_local_domain_fallback↗ を使います。例:device-profiles.tftf resource "cloudflare_zero_trust_device_custom_profile_local_domain_fallback" "example" { account_id = var.cloudflare_account_id policy_id = cloudflare_zero_trust_device_custom_profile.example.id domains = concat( # Global entries local.default_local_domains, # Profile-specific entries [ { suffix = "example.com" description = "Domain for local development" dns_server = ["1.1.1.1", "192.168.0.1"] } ] ) }
suffix には、プライベート DNS サーバーで解決したい apex ドメイン(example.com)を指定します。apex ドメイン配下のプレフィックスはすべて Local Domain Fallback の対象になります(つまり、example.com は *.example.com として解釈されます)。dns_server には、そのドメイン名を解決する DNS サーバーの IP アドレスを入力します。パフォーマンスの問題を避けるため、Cloudflare はサーバーを最大 8 台までにすることを推奨します。
Cloudflare One Client はすべてのサーバーを試し、no records found であっても、最も速い応答を常に使います。ドメインごとに少なくとも 1 台の DNS サーバーを指定することを推奨します。値を指定しない場合、Cloudflare One Client は起動前にデバイスで使われていた DNS サーバーを特定し、Local Domain Fallback 一覧の各ドメインにそのサーバーを使います。
Cloudflare One Client は、Split Tunnel の設定 に従って、DNS トラフィックを Local Domain Fallback サーバー へルーティングします。クエリがプライベート DNS サーバーに届くようにするには、次を確認します。
-
DNS サーバーに WARP トンネル内からのみ到達できる場合(
cloudflaredや Cloudflare WAN 経由など):-
Networking > Routes を開き、DNS サーバーが Cloudflare に接続されていることを確認します。DNS サーバーを接続するには、プライベートネットワーク を参照してください。
-
Split Tunnel の設定 で、DNS サーバーの IP が WARP トンネル経由でルーティングされることを確認します。
-
-
DNS サーバーに WARP トンネル外からのみ到達できる場合(サードパーティ VPN 経由など)は、DNS サーバーの IP が WARP トンネルから除外されている ことを確認します。
詳細は Cloudflare One Client による DNS リクエストの扱い を参照してください。
リゾルバーポリシー は Local Domain Fallback と似た機能を提供しますが、ローカルデバイスではなく Cloudflare Gateway で実行されます。プライベート DNS 解決をより細かく制御したい場合に推奨します。たとえば、特定の地域のユーザー全員が最も近いプライベート DNS サーバーを使うようにしたり、プライベート DNS トラフィックを解決する前に特定の条件を満たすようにしたり、プライベート DNS トラフィックに Gateway の DNS ポリシー を適用したりできます。
リゾルバーポリシーを作成するには:
-
Cloudflare ダッシュボード ↗ で Zero Trust > Traffic policies > Resolver policies を開きます。
-
Add a policy を選択します。
-
対象トラフィックの式を作成します。たとえば、内部サービスのホスト名を解決できます。
セレクター 演算子 値 Host in internal.example.com宛先が Local Domain Fallback の対象になっていないことを確認してください。
-
Select DNS resolver で Configure custom DNS resolvers を選びます。
-
カスタム DNS リゾルバーの IP アドレスを入力します。IP アドレスを入力すると、Gateway は Zero Trust で設定した 仮想ネットワーク を検索します。
-
Network で、クエリを公開(インターネット)へ送るか、非公開(プライベートネットワークサービス)へ送るかを選びます。
-
(任意)各 IP アドレスにカスタムポートを入力します。
-
Create policy を選択します。
カスタムリゾルバーはアカウントに保存され、あとから再利用できます。ポリシーには IPv4 アドレスを最大 10 個、IPv6 アドレスを最大 10 個追加できます。
-
次の権限を
cloudflare_api_token↗ に追加します。Zero Trust Write
-
cloudflare_zero_trust_gateway_policy↗ リソースでリゾルバーポリシーを作成します。resource "cloudflare_zero_trust_gateway_policy" "resolver_policy" { name = "Example resolver policy" enabled = true account_id = var.cloudflare_account_id description = "TERRAFORM MANAGED resolver policy" action = "resolve" traffic = "dns.fqdn in {\"internal.example.com\"}" identity = "identity.email in {\"jdoe@example.com\"}" precedence = 1 rule_settings = { dns_resolvers = { # You can add up to 10 IPv4 and 10 IPv6 addresses to a policy. ipv4 = [{ ip = "192.0.2.24" port = 53 route_through_private_network = true vnet_id = cloudflare_zero_trust_tunnel_cloudflared_virtual_network.staging_vnet.id }] ipv6 = [{ ip = "2001:DB8::" port = 53 route_through_private_network = true vnet_id = cloudflare_zero_trust_tunnel_cloudflared_virtual_network.staging_vnet.id }] } } }
ユーザーのクエリがリゾルバーポリシーに一致すると、Gateway は次の順でリスト上のリゾルバーへクエリを送ります。
- 公開リゾルバー
- アカウントのデフォルト仮想ネットワーク配下のプライベートリゾルバー
- カスタム仮想ネットワーク配下のプライベートリゾルバー
Gateway は、以降のクエリで使うため、最も速いリゾルバーをキャッシュします。リゾルバーの優先順位は、データセンターごとにユーザー単位でキャッシュされます。