跳转到内容
搜索文档

解析私有 DNS

最后更新 查看 MarkdownAgent 设置

默认情况下,用户设备上的所有 DNS 请求都由 Cloudflare 的 公共 DNS 解析器 解析,但用于本地解析的常用顶级域(例如 localhost)除外。要允许用户连接到在公共互联网上无法解析的内部服务器名称或域,您有两种选择:

Local Domain Fallback(本地域回退)

Local Domain Fallback 指示 Cloudflare One 客户端将特定的 DNS 请求发送到您的私有 DNS 解析器,而不是发送到 Cloudflare 的公共 DNS 解析器。在很长一段时间内,这种方法都是私有 DNS 的主要交付机制,也是最简单的选择,但它有两个缺点:您无法根据特定属性确定性地将私有 DNS 查询路由到不同的解析器,并且您无法对该流量应用 Gateway DNS 策略,因为 Cloudflare 并不对其进行解析。

要了解有关 Local Domain Fallback 工作原理的更多信息,请参阅Cloudflare One 客户端如何处理 DNS 请求

添加域

要将域添加到 Local Domain Fallback 列表中:

  1. Cloudflare 仪表板 中,前往 Zero Trust > Team & Resources(团队和资源) > Devices(设备) > Device profiles(设备配置文件) > General profiles(常规配置文件)
  2. 找到您要查看或修改的 设备配置文件,然后选择 Configure(配置)
  3. 向下滚动到 Local Domain Fallback(本地域名回退) 并选择 Manage(管理)
  1. 在 **Domain(域名)**中,输入您想使用私有 DNS 服务器解析的顶级域(example.com)。该顶级域下的所有前缀都将受到 Local Domain Fallback 的约束(换句话说,example.com 被解释为 *.example.com)。

  2. 在 **DNS Servers(DNS 服务器)**中,输入应解析该域名的 DNS 服务器的 IP 地址。Cloudflare 建议将列表限制在最多八个服务器,以避免性能问题。

  3. 输入可选的描述,然后选择 Save domain(保存域名)

Local Domain Fallback 列表的范围限定为特定的设备配置文件。如果设备配置文件没有对应的 Local Domain Fallback 资源,这些设备将使用步骤 2 中显示的默认本地域。

  1. 向您的 cloudflare_api_token 添加以下权限:

    • Zero Trust Write
  2. (可选)创建一个可以在多个设备配置文件中重复使用的域名列表。例如,您可以在与设备配置文件相同的模块中声明本地值:

    local-domains.local.tftf
    locals {
    	default_local_domains = [
    		# Cloudflare 推荐的默认 Local Domain Fallback 条目
        {
      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"
    }
    	]
    }
  3. 要为默认设备配置文件配置 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(
    		# 全局条目
    		local.default_local_domains,
    
    		# 特定于配置文件的条目
    		[
    			{
    			suffix = "example.com"
    			description = "本地开发域名"
    			dns_server = ["1.1.1.1", "192.168.0.1"]
    			}
    		]
    	)
    }

对于 suffix,指定您想使用私有 DNS 服务器解析的顶级域(example.com)。该顶级域下的所有前缀都将受到 Local Domain Fallback 的约束(换句话说,example.com 被解释为 *.example.com)。对于 dns_server,输入应解析该域名的 DNS 服务器的 IP 地址。Cloudflare 建议将列表限制在最多八个服务器,以避免性能问题。

Cloudflare One 客户端尝试所有服务器,并始终使用最快的响应,即使该响应是 no records found。我们建议为每个域名指定至少一个 DNS 服务器。如果未指定值,Cloudflare One 客户端将尝试识别在启动前设备上使用的 DNS 服务器,并在 Local Domain Fallback 列表中为每个域名使用该服务器。

将流量路由到回退服务器

Cloudflare One 客户端根据您的 Split Tunnel 配置将 DNS 流量路由到您的 Local Domain Fallback 服务器。为确保查询能够到达您的私有 DNS 服务器:

  • 如果您的 DNS 服务器仅在 WARP 隧道内可达(例如,通过 cloudflared 或 Cloudflare WAN):

    1. 转到 Networking(网络)> **Routes(路由)**并验证 DNS 服务器已连接到 Cloudflare。要连接 DNS 服务器,请参阅私有网络

    2. 在您的 Split Tunnel 配置中,验证 DNS 服务器的 IP 路由是否通过 WARP 隧道。

  • 如果您的 DNS 服务器仅在 WARP 隧道外可达(例如,通过第三方 VPN),请验证 DNS 服务器的 IP 已从 WARP 隧道中排除

欲了解更多信息,请参阅 Cloudflare One 客户端如何处理 DNS 请求

解析器策略(Resolver policies)

解析器策略提供与本地域回退(Local Domain Fallback)类似的功能,但发生在 Cloudflare Gateway 中,而不是在本地设备上。如果您想要对私有 DNS 解析进行更精细的控制,建议使用此选项。例如,您可以确保特定地理区域的所有用户都使用离他们最近的私有 DNS 服务器,确保在解析私有 DNS 流量之前满足特定条件,并将 Gateway DNS 策略应用于私有 DNS 流量。

创建解析器策略

要创建解析器策略:

  1. Cloudflare 仪表板中,转到 Zero Trust > Traffic policies(流量策略)> Resolver policies(解析器策略)

  2. 选择 Add a policy(添加策略)

  3. 为您期望的流量创建一个表达式。例如,您可以解析内部服务的主机名:

    选择器 运算符
    Host(主机) in(属于) internal.example.com

    确保您的目标不受本地域回退的限制。

  4. Select DNS resolver(选择 DNS 解析器) 中,选择 Configure custom DNS resolvers(配置自定义 DNS 解析器)。

  5. 输入自定义 DNS 解析器的 IP 地址。当您输入 IP 地址时,Gateway 将在 Zero Trust 中配置的虚拟网络中进行搜索。

  6. Network(网络) 中,选择是公开路由查询(路由到互联网)还是私有路由查询(路由到私有网络服务)。

  7. (可选)为每个 IP 地址输入自定义端口。

  8. 选择 Create policy(创建策略)

自定义解析器将保存到您的账户中以备后用。您可以在一个策略中添加最多 10 个 IPv4 和 10 个 IPv6 地址。

  1. 向您的 cloudflare_api_token 添加以下权限:

    • Zero Trust Write
  2. 使用 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 {\"[email protected]\"}"
    	precedence  = 1
    	rule_settings = {
    			dns_resolvers = {
    			# 您可以在一个策略中添加最多 10 个 IPv4 和 10 个 IPv6 地址。
    				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 将按以下顺序将查询发送到您列出的解析器:

  1. 公共解析器
  2. 账户默认虚拟网络后面的私有解析器
  3. 自定义虚拟网络后面的私有解析器

Gateway 将缓存最快的解析器,以用于后续查询。解析器优先级针对每个数据中心在每个用户的基础上进行缓存。

这篇文档对您有帮助吗?