通过 Cloudflare Gateway,您可以按 DNS 位置或按用户过滤 DNS over HTTPS (DoH) 请求,而无需在您的设备上安装 Cloudflare One Client。
基于位置的策略要求您将 DNS 请求发送到特定于位置的 DoH 终结点,而基于身份的策略要求请求中包含特定于用户的 DoH 令牌。
基于位置的策略要求您将 DNS 查询发送到分配给该位置的唯一 DoH 终结点:
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query获取您位置的 DoH 子域。
浏览器可以配置为使用任何 DNS over HTTPS (DoH) 终结点。如果您选择直接在浏览器中配置 DoH,则必须选择一个 Gateway DNS 位置作为您的 DoH 终结点,否则该浏览器中将不会进行 DNS 过滤。
Mozilla Firefox
- 在 Firefox 中,转到 Settings(设置)。
- 在 Privacy & Security(隐私与安全) 中,转到 DNS over HTTPS。
- 在 Enable secure DNS using(启用安全 DNS,使用) 下,选择 Max Protection(最大保护)。
- 在 Choose provider(选择提供商) 中,选择 Custom(自定义)。
- 在字段中,输入
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query。
Firefox 现在已配置为使用您的 DoH 端点。有关在 Firefox 中配置 DoH 设置的更多信息,请参阅 Mozilla 的文档 ↗。
Google Chrome
- 在 Chrome 中,转到 Settings(设置) > Privacy and security(隐私和安全) > Security(安全)。
- 向下滚动并开启 Use secure DNS(使用安全 DNS)。
- 选择 With Custom(使用自定义)。
- 在 Enter custom provider(输入自定义提供商) 字段中,输入
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query。
阅读更多关于在 Chrome 上启用 DNS over HTTPS ↗的信息。
Microsoft Edge
- 在 Microsoft Edge 中,转到 Settings(设置)。
- 选择 Privacy, search, and services(隐私、搜索和服务),然后向下滚动到 Security(安全)。
- 开启 Use secure DNS(使用安全 DNS)。
- 选择 Choose a service provider(选择服务提供商)。
- 在 Enter custom provider(输入自定义提供商) 字段中,输入
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query。
Brave
- 在 Brave 中,转到 Settings(设置) > Security and privacy(安全和隐私) > Security(安全)。
- 开启 Use secure DNS(使用安全 DNS)。
- 选择 With Custom(使用自定义)。
- 在 Enter custom provider(输入自定义提供商) 字段中,输入
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query。
Safari
目前 Safari 不支持 DNS over HTTPS。
您的 DNS 查询现在将发送到 Gateway 进行过滤。要过滤这些请求,请使用 DNS 位置选择器构建 DNS 策略。
Windows 11
-
获取与您位置的 DoH 终结点关联的
A和AAAA记录值。- 运行以下命令以获取您的
A记录值:
nslookup -type=A <your-subdomain>.cloudflare-gateway.com- 获取您的
AAAA记录值:
nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com- 复制生成的 IP 地址。
- 运行以下命令以获取您的
-
将地址添加到您的已知 DoH 服务器列表中。
- 针对每个地址运行以下命令:
Add-DnsClientDohServerAddress -ServerAddress <IP-address> -DohTemplate https://<your-subdomain>.cloudflare-gateway.com/dns-query -AllowFallbackToUdp $False -AutoUpgrade $False- 确认已添加这些地址。
Get-DnsClientDohServerAddress -
在 Windows 中,转到 Settings(设置) > Network & Internet(网络和 Internet) > 您的活动 Internet 连接。此选项可以是 Ethernet(以太网) 或 Wi-Fi。
-
在 DNS server assignment(DNS 服务器分配) 下,选择 Edit(编辑)。
-
在下拉菜单中,选择 Manual(手动)。
-
启用 IPv4。
-
在 Preferred DNS(首选 DNS) 和 Alternate DNS(备用 DNS) 中,输入您的
A记录命令中的 IPv4 地址。将 DNS over HTTPS 设置为 On (automatic template)(开(自动模板))。 -
启用 IPv6。
-
在 Preferred DNS(首选 DNS) 和 Alternate DNS(备用 DNS) 中,输入您的
AAAA记录命令中的 IPv6 地址。将 DNS over HTTPS 设置为 On (automatic template)(开(自动模板))。
Windows Server 2022
获取与您位置的 DoH 终结点关联的 A 和 AAAA 记录值。
- 运行以下命令以获取您的
A记录值:
nslookup -type=A <your-subdomain>.cloudflare-gateway.com- 获取您的
AAAA记录值:
nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com- 复制生成的 IP 地址。
- 将这些地址 ↗添加到您的已知 DoH 服务器列表中。
- 配置 Windows Server 客户端 ↗或设置组策略 ↗以使用 DoH。
欲了解更多信息,请参阅针对 Windows Server 2022 及更高版本的 Microsoft 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 查询,每个查询必须包含特定于用户的身份验证令牌。如果您每个用户有多个设备,并且希望应用特定于设备的策略,则需要将每个设备映射到不同的电子邮件。
目前,身份验证令牌只能通过 API 生成。您可以运行这个自动执行设置过程的交互式 Python 脚本,或按照下面描述的步骤进行操作。
每个 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_id、client_secret 和 id。
示例响应
{
"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": []
}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_ID 是 id 的值,而不是 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": []
}创建新用户并可选地将他们添加到组中。
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": []
}使用您的服务令牌身份验证登录您的 团队域,为用户请求 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"
}将 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 策略。