迁移到任播和 RFC 8484 DoH

我们针对 dns.google 网域发布 DoH,并为 Google 公共 DNS 推出了众所周知的任播 IP 地址,而使用其他 IP 地址在 dns.google.com 网域上推出测试版 DoH 服务现已弃用,并将关闭。

RFC 8484 API 的实验性版本也已弃用;dns.google/experimental 不受支持,dns.google/experimental 将迁移到 dns.google/dns-query。

时间表

日期 关闭步骤
2019-07-23 2019-08-01 dns.google.com/experimental 重定向到 dns.google/dns-query - DONE
2019-08-05 2019-08-21 dns.google.com 解析为 Google 公共 DNS 任播 IP 地址 - DONE
2019-09-24 将 dns.google.com 的旧 IP 地址重定向到 dns.google - DONE
2020-06-23 dns.google.com 会随时随地重定向到 dns.google

对此时间表所做的更改会在此处更新,并发布到 public-dns-announce。 订阅邮件内容较少的邮寄名单,获取最新动态。

2019 年 8 月 1 日,星期四

https://dns.google.com/experimental 的请求被 HTTP 301 重定向到 https://dns.google/dns-query

/resolve 使用 JSON API 的 DoH 应用不受影响。

2019 年 8 月 21 日,星期三

dns.google.com 会解析为 Google 公共 DNS 任播 IP 地址

这对大多数 DoH 应用而言都是透明的,无需进行任何更改。

2019 年 9 月 24 日,星期二

对以前的 dns.google.com IP 地址进行 DoH 查询后,系统会将 HTTP 301 重定向到 https://dns.google/

这可能会影响使用 RFC 8484 或 JSON API 的 DoH 应用。

如果应用向硬编码、可配置或永久缓存的 IP 地址发送 DoH 请求,则必须支持下列其中一项或两项:

2020 年 6 月 23 日,星期二

通过任播 IP 地址向 dns.google.com 查询 DoH 后,系统会将 HTTP 301 重定向到 dns.google。

这可能会影响使用 RFC 8484 或 JSON API 的 DoH 应用。

如要与 Google DoH 搭配使用,应用必须至少支持以下其中一项:

针对 DoH 客户端的变更

跟踪 HTTP 重定向

DoH 服务器只是处理 DNS 查询的 HTTP 服务器。因此,它们可能会返回 HTTP 重定向(代码 301、302、307 或 308),并且 DoH 客户端应该像任何其他 HTTP 客户端一样跟踪这些重定向。

开发者可以将 https://8.8.8.8/experimentalhttps://8.8.8.8/resolve 作为其 DoH 网址的基础,检查 HTTP 重定向支持情况;它们会返回指向 https://dns.google/dns-queryhttps://dns.google/resolve 的 HTTP 301 重定向(保留所有 GET 参数)。

将 dns.google 域名用于 Google DoH

DoH 应用应使用 dns.google 而不是 dns.google.com。无论是使用 RFC 8484 还是 JSON API,任何具有硬编码或已配置的 DoH 解析器列表的 DoH 应用都需要将任何网址或 URI 模板中的 dns.google.com 替换为 dns.google。

使用 Google 公共 DNS 任播 IP 地址

向硬编码或已配置的 IP 地址列表(即使仅用于引导)发送 DoH 请求的 DoH 应用需要将以前的 dns.google.com 地址替换为 Google 公共 DNS 任播 IP 地址

用于配置的 URI 模板

DoH 应用应提供端点可配置性;首选标准方法是使用 URI 模板。具有完整配置的 DoH 应用开发者应通知用户新网址(URI 模板:https://dns.google/dns-query{?dns})。

针对 RFC 8484 DoH 使用 https://dns.google/dns-query

具有硬编码或配置的 DoH 解析器列表的 DoH 应用需要将互联网草稿 DoH API 的 https://dns.google.com/experimental 网址替换为 https://dns.google/dns-query,并确认完全符合 RFC 8484 规范。

/experimental API(仅在 dns.google.com 上可用)接受了使用非网络安全 Base64 编码和 application/dns-udpwireformat 内容类型的查询,但被 /dns-query API 拒绝的查询(仅在 dns.google 上可用)。以下两部分将介绍这些差异。

对 GET dns 参数使用 Base64Url 编码

对 GET 请求中的 dns 参数使用网络安全 Base64Url 编码,将 Base64 (+ /) 替换为 (- _) 并移除填充 (=) 字符。

接受并发送 application/dns-message

在 Accept 标头中使用 application/dns-message(在 Content-Type 标头中使用 RFC 8484 POST),并接受其作为响应的 Content-Type。

对 POST 使用旧的 Content-Type 将失败,并返回 415 Unsupported Media Type(不支持的媒体类型)。

在 Accept 标头中使用旧 Content-Type 的应用将获得包含 Content-Type application/dns-message 的响应。接受这些以及不会因非预期的 Content-Type 而忽略的 DoH 应用仍可正常运行。