跳转到内容
搜索文档

DNS over HTTPS(DoH,DNS over HTTPS)

最后更新 查看 MarkdownAgent 设置

通过 Cloudflare Gateway,您可以按 DNS 位置或按用户过滤 DNS over HTTPS (DoH) 请求,而无需在您的设备上安装 Cloudflare One Client。

基于位置的策略要求您将 DNS 请求发送到特定于位置的 DoH 终结点,而基于身份的策略要求请求中包含特定于用户的 DoH 令牌

按位置过滤 DoH 请求

基于位置的策略要求您将 DNS 查询发送到分配给该位置的唯一 DoH 终结点

https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query

前提条件

获取您位置的 DoH 子域

配置浏览器以使用 DoH

浏览器可以配置为使用任何 DNS over HTTPS (DoH) 终结点。如果您选择直接在浏览器中配置 DoH,则必须选择一个 Gateway DNS 位置作为您的 DoH 终结点,否则该浏览器中将不会进行 DNS 过滤。

Mozilla Firefox

  1. 在 Firefox 中,转到 Settings(设置)
  2. Privacy & Security(隐私与安全) 中,转到 DNS over HTTPS
  3. Enable secure DNS using(启用安全 DNS,使用) 下,选择 Max Protection(最大保护)
  4. Choose provider(选择提供商) 中,选择 Custom(自定义)
  5. 在字段中,输入 https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query

Firefox 现在已配置为使用您的 DoH 端点。有关在 Firefox 中配置 DoH 设置的更多信息,请参阅 Mozilla 的文档

Google Chrome

  1. 在 Chrome 中,转到 Settings(设置) > Privacy and security(隐私和安全) > Security(安全)
  2. 向下滚动并开启 Use secure DNS(使用安全 DNS)
  3. 选择 With Custom(使用自定义)
  4. Enter custom provider(输入自定义提供商) 字段中,输入 https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query

阅读更多关于在 Chrome 上启用 DNS over HTTPS的信息。

Microsoft Edge

  1. 在 Microsoft Edge 中,转到 Settings(设置)
  2. 选择 Privacy, search, and services(隐私、搜索和服务),然后向下滚动到 Security(安全)
  3. 开启 Use secure DNS(使用安全 DNS)
  4. 选择 Choose a service provider(选择服务提供商)
  5. Enter custom provider(输入自定义提供商) 字段中,输入 https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query

Brave

  1. 在 Brave 中,转到 Settings(设置) > Security and privacy(安全和隐私) > Security(安全)
  2. 开启 Use secure DNS(使用安全 DNS)
  3. 选择 With Custom(使用自定义)
  4. Enter custom provider(输入自定义提供商) 字段中,输入 https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query

Safari

目前 Safari 不支持 DNS over HTTPS。

您的 DNS 查询现在将发送到 Gateway 进行过滤。要过滤这些请求,请使用 DNS 位置选择器构建 DNS 策略。

配置操作系统以使用 DoH

Windows 11

  1. 获取与您位置的 DoH 终结点关联的 AAAAA 记录值。

    1. 运行以下命令以获取您的 A 记录值:
    nslookup -type=A <your-subdomain>.cloudflare-gateway.com
    1. 获取您的 AAAA 记录值:
    nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com
    1. 复制生成的 IP 地址。
  2. 将地址添加到您的已知 DoH 服务器列表中。

    1. 针对每个地址运行以下命令:
    Add-DnsClientDohServerAddress -ServerAddress <IP-address> -DohTemplate https://<your-subdomain>.cloudflare-gateway.com/dns-query -AllowFallbackToUdp $False -AutoUpgrade $False
    1. 确认已添加这些地址。
    Get-DnsClientDohServerAddress
  3. 在 Windows 中,转到 Settings(设置) > Network & Internet(网络和 Internet) > 您的活动 Internet 连接。此选项可以是 Ethernet(以太网)Wi-Fi

  4. DNS server assignment(DNS 服务器分配) 下,选择 Edit(编辑)

  5. 在下拉菜单中,选择 Manual(手动)

  6. 启用 IPv4

  7. Preferred DNS(首选 DNS)Alternate DNS(备用 DNS) 中,输入您的 A 记录命令中的 IPv4 地址。将 DNS over HTTPS 设置为 On (automatic template)(开(自动模板))

  8. 启用 IPv6

  9. Preferred DNS(首选 DNS)Alternate DNS(备用 DNS) 中,输入您的 AAAA 记录命令中的 IPv6 地址。将 DNS over HTTPS 设置为 On (automatic template)(开(自动模板))

Windows Server 2022

获取与您位置的 DoH 终结点关联的 AAAAA 记录值。

  1. 运行以下命令以获取您的 A 记录值:
nslookup -type=A <your-subdomain>.cloudflare-gateway.com
  1. 获取您的 AAAA 记录值:
nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com
  1. 复制生成的 IP 地址。
  2. 将这些地址添加到您的已知 DoH 服务器列表中。
  3. 配置 Windows Server 客户端设置组策略以使用 DoH。

欲了解更多信息,请参阅针对 Windows Server 2022 及更高版本的 Microsoft DoH 指南

使用通用 DoH 终结点

您可以将 DoH 请求发送到通用 Cloudflare DoH 终结点 dns.cloudflare-gateway.com。要在请求中指定位置,请包含一个名为 cf-dns-location 的标头,其值为您位置的 DoH 子域。例如:

GET /dns-query?name=example.com&type=A HTTP/2
Host: dns.cloudflare-gateway.com
cf-dns-location: 9y65g5srsm
Accept: application/dns-message

按用户过滤 DoH 请求

为了根据用户身份过滤 DoH 查询,每个查询必须包含特定于用户的身份验证令牌。如果您每个用户有多个设备,并且希望应用特定于设备的策略,则需要将每个设备映射到不同的电子邮件。

目前,身份验证令牌只能通过 API 生成。您可以运行这个自动执行设置过程的交互式 Python 脚本,或按照下面描述的步骤进行操作。

1. 为账户创建服务令牌

每个 Cloudflare 账户一次只能有一个激活的、被授权用于 DNS over HTTPS (DoH) 的 Access 服务令牌

curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{"name":"ACME Corporation service token"}'

保存服务令牌的 client_idclient_secretid

示例响应

{
	"result": {
		"client_id": "88bf3b6d86161464f6509f7219099e57.access",
		"client_secret": "bdd31cbc4dec990953e39163fbbb194c93313ca9f0a6e420346af9d326b1d2a5",
		"created_at": "2022-06-09T01:59:17Z",
		"expires_at": "2023-06-09T01:59:17Z",
		"id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
		"name": "ACME Corporation service token",
		"updated_at": "2022-06-09T01:59:17Z"
	},
	"success": true,
	"errors": [],
	"messages": []
}

2. 为服务令牌启用 DoH 功能

curl --request PUT \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations/doh/$SERVICE_TOKEN_ID" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

如果您收到 access.api.error.service_token_not_found 错误,请检查 $SERVICE_TOKEN_IDid 的值,而不是 client_id

示例响应

{
	"result": {
		"client_id": "88bf3b6d86161464f6509f7219099e57.access",
		"created_at": "2022-06-09T01:59:17Z",
		"expires_at": "2023-06-09T01:59:17Z",
		"id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
		"name": "ACME Corporation service token",
		"updated_at": "2022-06-09T01:59:17Z",
		"duration": "8760h"
	},
	"success": true,
	"errors": [],
	"messages": []
}

3. 创建用户

创建新用户并可选地将他们添加到组中。

curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/users" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
  "name": "John Doe",
  "email": "jdoe@acme.com",
  "custom": {"groups":[{"id": "02fk6b3p3majl10", "email": "finance@acme.com", "name": "Finance"}]}
}'

保存响应中返回的用户 id

示例响应

{
	"result": {
		"id": "54d425de-7a78-4186-9975-d43c88ee7899",
		"created_at": "2022-03-16T21:18:39.93598Z",
		"updated_at": "2022-05-17T23:50:39.598345Z",
		"uid": "54d425de-7a78-4186-9975-d43c88ee7899",
		"name": "John Doe",
		"email": "jdoe@acme.com",
		"custom": {
			"groups": [
				{
					"email": "finance@acme.com",
					"id": "02fk6b3p3majl10",
					"name": "Finance"
				}
			]
		}
	},
	"success": true,
	"errors": [],
	"messages": []
}

4. 为用户生成 DoH 令牌

使用您的服务令牌身份验证登录您的 团队域,为用户请求 DoH 令牌。

curl "https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/doh-token?account-id=<ACCOUNT_ID>&user-id=<USER_ID>&auth-domain=<TEAM_NAME>.cloudflareaccess.com" \
--header "Cf-Access-Client-Id: <CLIENT_ID>" \
--header "Cf-Access-Client-Secret: <CLIENT_SECRET>"

响应包含与用户关联的唯一 DoH 令牌。此令牌将在 24 小时内过期。我们建议为 DoH 令牌设置刷新流,而不是为每个 DoH 查询都生成一个新令牌。

示例响应

{
	"token": "y2khbGciOiJSUzI1NiIsImtpZCI6ImJlZjVkYjg4ZTEwMjk3ZDEwNzhkMmEyYjE0MjMxZTljYTQwMjQ2NjAwOTQzNmJhOTQwOGJkODY3ZmI4OWFiOGQifQ.eyJ0eXBlIjoiZG9oIiwiYXVkIjoiY2xvdWRmbGFyZS1nYXRld2F5LmNvbSIsImlhdCI6MTY1NDc1MTg3NSwiZXhwIjoxNjU0ODM4Mjc1LCJhY2NvdW50LWlkIjoiMTA4MDM0OGIyZGYzYmQwN2QxZmI1MjM3Y2Q1ZDU5M2EiLCJ1c2VyLWlkIjoiNTRkNDI1ZGUtN2E3OC00MTg2LTk5NzUtZDQzYzg4ZWU3ODk5In0.I5p4WsH2dPhQ8vwy84zF05PsoBHCsUSXAaMpNhEH36oFZ3tXcs9ksLz7OzpZ_x3HxUfO3n57LlpAF1VehaBt2i94XCkvSgtHpYcwd_qZydLp-BGtcyfU1LbdXQC3m6zxKcIWu5VySi8I-J25UYlpyJhYgZ4DQUZIpqbSSt6WcVRKvA7OBa7xjkTux4OcqWAViO_ZS-GLwl-fqhvolmiwk37seBD3YuV1zG06VeWXfrMkZ5MbhooHD1DZDBHOZpTtmN8MbeKeI4tlY1mb_O3-jE-um6F9Hrl4NQm89MKFzsum-_Rywi5m4PTSlDza7fjdJs7RzFgJd3VWgzG-jgyQKw"
}

5. 发送经过身份验证的 DoH 查询

将 DoH 查询发送到位于 https://<ACCOUNT_ID>.cloudflare-gateway.com/dns-query 的解析器,确保在 CF-Authorization 标头中包含用户的 DoH 令牌。

curl --silent "https://<ACCOUNT_ID>.cloudflare-gateway.com/dns-query?name=example.com" \
--header "accept: application/dns-json" \
--header "CF-Authorization: <USER_DOH_TOKEN>" | jq

如果该网站被拦截,并且您已为该策略启用了拦截页面,则查询将返回 162.159.36.12(Gateway 拦截页面的 IP 地址)。如果拦截页面被禁用,则响应将为 0.0.0.0

示例响应

{
	"Status": 0,
	"TC": false,
	"RD": true,
	"RA": true,
	"AD": false,
	"CD": false,
	"Question": [
		{
			"name": "example.com",
			"type": 1
		}
	],
	"Answer": [
		{
			"name": "example.com",
			"type": 1,
			"TTL": 60,
			"data": "162.159.36.12"
		}
	]
}

您可以通过检查您的 Gateway DNS 日志来验证请求是否与正确的用户电子邮件相关联。要过滤这些请求,请使用任何 Gateway 基于身份的选择器构建 DNS 策略。

这篇文档对您有帮助吗?