本节介绍如何验证您的 Gateway DNS 配置。在设置后测试您的策略有助于在生产环境中使用它们之前,确认查询是否按预期被过滤。
在开始之前,请确保您的设备正在向 Gateway 发送 DNS 查询。您可以通过以下两种方式之一来完成此操作:
- Cloudflare One Client —— 如果您的设备运行 Cloudflare One Client,DNS 查询将自动路由到 Gateway。
- DNS 位置 —— 如果您使用的是仅限 DNS 的部署(不带 Cloudflare One Client),请验证您网络的 DNS 解析器是否指向了您的 Gateway DNS 位置 的 IP 地址。
在您创建了阻止域名的 DNS 策略后,您可以使用 dig(命令行 DNS 查找工具,可在 macOS 和 Linux 上使用)或 nslookup(在 Windows 上使用)来查看该策略是否按预期工作。
例如,如果您创建了阻止 example.com 的策略,您可以执行以下操作来查看 Gateway 是否成功阻止了 example.com:
-
打开终端。
-
输入
dig example.com(如果您使用的是 Windows,则输入nslookup example.com)并按 Enter(回车) 键。 -
在
dig输出中,检查标头行(以;; ->>HEADER<<-开头的一行)中的status:字段。如果该策略关闭了阻止页面,您应该会看到REFUSED—— 这是一个表示服务器拒绝回答该查询的 DNS 响应代码:dig example.com; <<>> DiG 9.10.6 <<>> example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 6503 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;example.com. IN A ;; Query time: 46 msec ;; SERVER: 172.64.36.1#53(172.64.36.1) ;; WHEN: Tue Mar 10 20:22:18 CDT 2020 ;; MSG SIZE rcvd: 29If the block page is enabled for the policy, you should see
NOERROR(meaning the query was resolved) in the header with162.159.36.12and162.159.46.12as the answers. These are Cloudflare's block page IP addresses:dig example.com; <<>> DiG 9.10.6 <<>> example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR id: 14531 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1452 ;; QUESTION SECTION: ;example.com. IN A ;;ANSWER SECTION: example.com. 60 IN A 162.159.36.12 example.com. 60 IN A 162.159.46.12 ;; Query time: 53 msec ;; SERVER: 172.64.36.1#53(172.64.36.1) ;; WHEN: Tue Mar 10 20:19:52 CDT 2020 ;; MSG SIZE rcvd: 83
如果您阻止了安全类别或内容类别,您可以使用与每个类别关联的测试域名来测试该策略是否正常工作。
配置 Gateway 策略以阻止该类别后,当您尝试在浏览器中访问测试域名时,该域名将显示阻止页面;或者当您使用命令行界面执行 dig 时,将返回 REFUSED。
-
单单词类别 —— 对于名称为单个单词的类别(例如 Malware),测试域名使用以下格式:
<NAME_OF_CATEGORY>.testcategory.com -
多单词类别 —— 对于名称包含多个单词的类别(例如 Parked & For Sale Domains),测试域名使用以下格式:
- 移除单词之间的所有空格
- 将
&替换为and - 将所有字母转为小写
| 类别 | 测试域名 |
|---|---|
| Anonymizer | anonymizer.testcategory.com |
| Command and Control & Botnet | commandandcontrolandbotnet.testcategory.com |
| compromised Domain | compromiseddomain.testcategory.com |
| Cryptomining | cryptomining.testcategory.com |
| Malware | malware.testcategory.com |
| New Domains | newdomains.testcategory.com |
| Parked & For Sale Domains | parkedandforsaledomains.testcategory.com |
| Phishing | phishing.testcategory.com |
| Potentially Unwanted Software | potentiallyunwantedsoftware.testcategory.com |
| Private IP Address | privateipaddress.testcategory.com |
| Spam | spam.testcategory.com |
| Spyware | spyware.testcategory.com |
| Unreachable | unreachable.testcategory.com |
EDNS 客户端子网 (ECS) 是一种 DNS 扩展,它将用户 IP 地址的一部分发送给权威 DNS 名称服务器,从而使它们能够返回地理位置最佳的解答。Cloudflare 发送用户 IP 地址的前 /24 位,以便在保护隐私的同时提供位置信息。如果您为您的 DNS 位置启用了 EDNS 客户端子网,则可以按如下方式进行验证:
-
获取您的 DNS 位置的 DoH (DNS over HTTPS) 子域名:
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Networks(网络) > Resolvers & Proxies(解析器和代理) > DNS locations(DNS 位置)。
- 选择您要测试的 DNS 位置。
- 记录 DNS over HTTPS 的值。
-
打开终端并运行以下命令:
curl 'https://<DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query?type=TXT&name=o-o.myaddr.google.com' -H 'Accept: application/dns-json' | json_pp输出中应包含您的 EDNS 客户端子网:
{ "AD": false, "Answer": [ { "TTL": 60, "data": "\"108.162.218.211\"", "name": "o-o.myaddr.google.com", "type": 16 }, { "TTL": 60, "data": "\"edns0-client-subnet 136.62.0.0/24\"", "name": "o-o.myaddr.google.com", "type": 16 } ], "CD": false, "Question": [ { "name": "o-o.myaddr.google.com", "type": 16 } ], "RA": true, "RD": true, "Status": 0, "TC": false } -
要验证您的 EDNS 客户端子网,请获取您的源 IP 地址:
curl ifconfig.me136.62.12.156%源 IP 地址应落在您的 EDNS 客户端子网所指定的 /24 范围内。
现代网页浏览器和操作系统设计为将 DNS 记录缓存一段设定的时间。当发起对 DNS 记录的请求时,浏览器缓存是检查所请求记录的首个位置。如果响应已被缓存, DNS 策略可能看起来不起作用。
要清除您的 DNS 缓存:
ChromeOS
- 转到
chrome://net-internals/#dns。 - 选择 Clear host cache(清除主机缓存)。
Windows
- 打开管理员命令提示符或 PowerShell。
- 运行以下命令:
ipconfig /flushdnsmacOS
- 打开 Terminal。
- 运行以下命令:
sudo killall -HUP mDNSResponder
sudo killall mDNSResponderHelper
sudo dscacheutil -flushcache