常见问题解答

常规

什么是 Google 公共 DNS?

Google 公共 DNS 是一项免费的全球域名系统 (DNS) 解析服务,可用作您当前 DNS 提供商的替代方案。

Google 为何开发 DNS 服务?

我们相信,更快、更安全的 DNS 基础架构可以显著改善网络浏览体验。Google 公共 DNS 在速度、安全性和结果有效性方面进行了诸多改进。我们在文档中分享了这些改进,以便参与 Web 社区中持续进行的对话。

我可以使用 Google 公共 DNS 托管我的域名吗?

Google 公共 DNS 不是权威 DNS 托管服务,也不能用作权威 DNS 托管服务。如果您希望使用高容量、可编程且使用 Google 基础架构的权威域名服务器,可试试 Google 的 Cloud DNS

Google 公共 DNS 是否提供屏蔽或过滤不需要的网站的功能?

Google 公共 DNS 是一台 DNS 解析和缓存服务器;它不会执行任何类型的屏蔽或过滤,但在极少数情况下,会对某些网域执行屏蔽或过滤,具体如下:

  • 我们认为,这对于保护 Google 用户免受安全威胁至关重要
  • 我们有法律义务屏蔽特定网域。(如需了解详情,请参阅屏蔽页面)。

但我们认为,屏蔽功能通常最好由客户端执行。如果您有兴趣启用此类功能,应考虑安装相应的客户端应用或浏览器插件。

Google 公共 DNS 是否存在任何跨产品依赖项?

Google 公共 DNS 是一项独立的服务。

我需要有 Google 账号才能使用 Google 公共 DNS 吗?

使用 Google 公共 DNS 无需任何账号。

Google 公共 DNS 与我的 ISP 的 DNS 服务或其他开放 DNS 解析器有何不同?如何判断画质是否有所提升?

开放式解析器和您的 ISP 都提供 DNS 解析服务。我们建议您将 Google 公共 DNS 与任何其他备用 DNS 服务一起尝试作为主要或辅助 DNS 解析器。在确定适合您的 DNS 解析器时,需要考虑许多因素,例如速度、可靠性、安全性和响应的有效性。与 Google 公共 DNS 不同,某些 ISP 和开放式解析器会出于商业目的屏蔽、过滤或重定向 DNS 响应。另请参阅 Google 公共 DNS 是否提供屏蔽或过滤不需要的网站的功能?问题的答案。

Google 公共 DNS 如何处理不存在的网域?

根据 DNS 协议标准,如果您针对不存在的域名发出查询,Google 公共 DNS 始终会返回 NXDOMAIN 记录。浏览器应将此响应显示为 DNS 错误。相反,如果您收到的不是错误消息,而是任何其他响应(例如,您被重定向到其他页面),则可能是以下原因所致:

  • 客户端应用(例如浏览器插件)正在为不存在的网域显示备用网页。
  • 某些 ISP 可能会拦截所有 NXDOMAIN 响应,并将其替换为指向其自己的服务器的响应。如果您担心您的 ISP 会拦截 Google 公共 DNS 请求或响应,则应与您的 ISP 联系。

未来是否会使用 Google 公共 DNS 投放广告?

我们致力于维护 DNS 协议的完整性。 Google 公共 DNS 绝不会返回不存在的网域的广告服务器地址。

什么是 DNS over HTTPS (DoH)?

通过加密的 HTTPS 连接进行 DNS 解析。DNS-over-HTTPS 可显著增强桩解析器和递归解析器之间的隐私性和安全性,并与 DNSSEC 相辅相成,以提供端到端身份验证 DNS 查找。

使用和支持

我目前使用的是其他 DNS 服务。我还可以使用 Google 公共 DNS 吗?

您可以将 Google 公共 DNS 与当前的 DNS 解析器一起设置为主 DNS 解析器或辅助 DNS 解析器。请注意,操作系统对 DNS 解析器的处理方式有所不同:有些操作系统更倾向于使用您的主 DNS 解析器,仅在主要 DNS 解析器未能响应时使用辅助解析器,而其他操作系统则在每个解析器之间轮循。

如果配置的解析器之间存在安全性或过滤方面的差异,您将获得所有解析器中安全性或过滤级别最低的解析器。NXDOMAIN 过滤或重定向到屏蔽网页有时可能会起作用,但 SERVFAIL 不会屏蔽网域,除非所有解析器都返回 SERVFAIL。

Google 公共 DNS 是否适用于所有类型的联网设备?

Google 公共 DNS 可在任何符合标准的网络设备上使用。 如果您发现 Google 公共 DNS 在任何情况下都无法正常运行,请告诉我们。

我可以在办公室计算机上运行 Google 公共 DNS 吗?

某些办公室具有专用网络,允许您访问在工作之余无法访问的网域。使用 Google 公共 DNS 可能会限制您对这些专用网域的访问权限。 请先查看 IT 部门的政策,然后再在办公室计算机上使用 Google 公共 DNS。

Google 公共 DNS 在哪些国家/地区提供?

它面向全球互联网用户提供,但您的体验可能会因您所在的具体位置而有很大差异。

Google 公共 DNS 是否适用于所有 ISP?

Google 公共 DNS 应该适用于大多数 ISP(假设您有权更改网络 DNS 设置)。

我需要同时使用两个 Google 公共 DNS IP 地址吗?

您只需使用其中一个 IP 地址,即可将 Google 用作主要服务。但是,切勿将同一地址指定为主服务器和辅助服务器。

指定 IP 地址的顺序是否重要?

顺序无关紧要。这两个 IP 地址都可以是主域名服务器或辅助域名服务器。

服务的服务等级协议 (SLA) 是什么?

免费的 Google 公共 DNS 服务没有服务等级协议 (SLA)。

我正在运行 ISP。我可以将用户重定向到 Google 公共 DNS 吗?

如需使用 Google 公共 DNS,ISP 应按照 ISP 说明,了解自己是否需要在向 Google 公共 DNS 发送查询之前执行任何操作。

如何获得 Google 公共 DNS 团队的支持?

我们建议您加入我们的 Google 群组,以便及时了解该团队的最新动态,并提出任何疑问。如果您遇到问题并希望报告,请参阅报告问题了解相关流程。

技术

Google 公共 DNS 如何确定将我的查询发送到何处?

任播路由会将您的查询定向到最近的 Google 公共 DNS 服务器。如需详细了解任播路由,请参阅 Wikipedia 条目

Google 公共 DNS 使用在 DNS 根区域和顶级域名的区域中发布的域名服务器 (NS) 记录,查找对任何网域具有权威性的 DNS 服务器的名称和地址。其中一些域名服务器还使用任播路由。

您的服务器目前位于何处?

Google 公共 DNS 服务器遍布全球。这个问题有两个答案,一个适用于客户端,另一个适用于 Google 公共 DNS 从中获取要返回给客户端的答案的 DNS 服务器。

当客户端向 Google 公共 DNS 发送查询时,这些查询会被路由到宣传所用任播地址(8.8.8.88.8.4.42001:4860:4860:: 中的某个 IPv6 地址)的最近位置。宣传这些任播地址的具体位置会因网络状况和流量负载而异,其中包括 Google 边缘网络中的几乎所有核心数据中心和边缘接入点 (PoP)。

Google 公共 DNS 从核心数据中心和 Google Cloud 区域位置向权威服务器发送查询。Google 发布了 Google 公共 DNS 可用于查询权威 DNS 服务器的 IP 地址范围列表(并非使用列表中的所有范围)。您可以使用它来确定缺少 EDNS 客户端子网 (ECS) 数据的 DNS 查询的地理位置,并配置 ACL 以允许从 Google 公共 DNS 发出更高的查询速率。

除了此常见问题解答之外,Google 还会将此列表发布为 DNS“TXT”记录。Google 每周都会通过添加、修改和移除来更新这两个来源。 每个 IP 地址范围条目都包含最近机场的 IATA 代码。用于 GeoIP 数据或 ACL 的自动化操作应通过 DNS 获取此类数据,而不是通过抓取此网页来获取(请参阅下文中的示例)。

Google 公共 DNS 用于发送查询的 IP 地址范围的位置

以编程方式获取位置数据

地址范围可以以以下方式提取:

  • JSON 文件

    curl https://www.gstatic.com/ipranges/publicdns.json
    
  • RFC 8805 地理位置 Feed

    curl https://www.gstatic.com/ipranges/publicdns_geofeed.txt
    

您可以使用以下 Python 脚本创建 IP 地址范围列表,Google 公共 DNS 将使用该列表向权威 DNS 服务器发出查询。

这些数据还可在 locations.publicdns.goog. 中以 TXT 记录的形式提供。但是,数据大小意味着 DNS TXT 记录不再是合适的格式。我们会将 TXT 记录替换为上述 JSON 格式的文件。如果您使用的是 TXT 记录,请改用 JSON 文件,因为我们计划在将来移除该 TXT 记录。

命令行

您可以使用 curljq 工具从命令行中提取 Google 公共 DNS IP 网段。

curl https://www.gstatic.com/ipranges/publicdns.json | jq '.prefixes[]  | .ipv4Prefix // .ipv6Prefix '

这需要满足以下条件:

Python

您可以使用以下 Python 脚本创建 Google 公共 DNS 使用的 IP 地址范围列表。

#!/usr/bin/env python3
"""An example to fetch and print the Google Public DNS IP ranges."""

import ipaddress
import json
import urllib.request

publicdns_url = 'https://www.gstatic.com/ipranges/publicdns.json'


def read_url(url):
  try:
    s = urllib.request.urlopen(url).read()
    return json.loads(s)
  except urllib.error.HTTPError:
    print('Invalid HTTP response from %s' % url)
    return {}
  except json.decoder.JSONDecodeError:
    print('Could not parse HTTP response from %s' % url)
    return {}


def main():
  publicdns_json = read_url(publicdns_url)
  print('{} published: {}'.format(publicdns_url,
                                  publicdns_json.get('creationTime')))

  locations = dict()
  ipv4, ipv6 = set(), set()
  for e in publicdns_json['prefixes']:
    if e.get('ipv4Prefix'):
      ip = ipaddress.IPv4Network(e.get('ipv4Prefix'), strict=False)
      ipv4.add(ip)
    if e.get('ipv6Prefix'):
      ip = ipaddress.IPv6Network(e.get('ipv6Prefix'), strict=False)
      ipv6.add(ip)
    locations[ip] = e.get('scope')
  print('IP ranges used by Google Public DNS for contacting '
        'authoritative DNS servers:')
  for i in list(ipv4) + list(ipv6):
    print(i, locations[i])


if __name__ == '__main__':
  main()

对于 macOS,此脚本需要如下配置 Python 3 运行时:

  • 安装适用于 macOS 的当前版本 Python 3 运行时。
  • 从“应用程序”文件夹的 Python 文件夹中运行随附的 Install Certificates.command,以安装可供 Python 运行时使用的可信根证书列表 (cert.pem)。将 VERSION 替换为您安装的 Python 版本(例如 3.8):
    sudo "/Applications/Python VERSION/Install Certificates.command"

Google 公开 DNS 是否基于开源软件(例如 BIND)?

Google 公共 DNS 是 Google 对 DNS 标准的自行实现。

Google 是否计划以开源软件的形式发布 Google 公共 DNS 代码?

目前,我们没有计划开源 Google 公开 DNS。不过,我们已详细说明我们为提高速度、安全性和标准合规性而采取的所有步骤。

Google 公共 DNS 是否支持 IPv6?

Google 公共 DNS 具有 IPv6 地址,可用于处理来自具有 IPv6 连接的客户端的传入请求,并响应所有 IPv6 地址请求,并在有 AAAA 记录时返回这些记录。我们完全支持仅使用 IPv6 的权威域名服务器。如需了解 IPv6 解析器地址,请参阅 开始使用 Google 公共 DNS 的说明。

请注意,您可能不会看到 Google 网站的 IPv6 结果。为了优化用户体验,Google 仅向具有良好 IPv6 连接的客户端提供 AAAA 记录。此政策与 Google 公共 DNS 完全无关,由 Google 的权威域名服务器强制执行。如需了解详情,请参阅 通过 IPv6 访问 Google 页面。

对于仅限 IPv6 的网络和系统,您可以使用 Google 公共 DNS64 为具有 A 记录但没有 AAAA 记录的域名获取合成 AAAA 记录。这些合成的 AAAA 记录使用为 NAT64 服务预留的众所周知的 IPv6 前缀,将仅支持 IPv6 的客户端定向到 NAT64 网关。只需按照使用入门说明配置系统,用 DNS64 IPv6 配置替换解析器地址即可。

Google 公共 DNS 是否支持 DNSSEC 协议?

Google 公共 DNS 是一款具有安全意识的验证解析器。来自 DNSSEC 签名区域的所有响应都会经过验证,除非客户端在 DNS 请求中明确设置 CD 标志以停用该验证。

如何确定我是否使用了 DNSSEC?

您可以访问 http://www.dnssec-failed.org/ 执行简单的测试。由于身份验证链已损坏,此网站已被专门配置为返回 DNS 错误。如果您没有收到错误消息,则表示您未使用 DNSSEC。

Google 公共 DNS 如何处理无法通过 DNSSEC 验证的查找?

如果 Google 公共 DNS 无法验证响应(由于配置错误、RRSIG 记录缺失或不正确等),则会返回错误响应 (SERVFAIL)。不过,如果影响较大(例如,某个非常热门的网域未通过验证),我们可能会暂时停用该网域的验证,直到问题得到解决。

如何了解给定网域未通过 DNSSEC 验证的原因?

Verisign Labs 的 DNS 分析器和 Sandia National Laboratories 的 DNSViz 是两个 DNSSEC 可视化工具,可显示任何网域的 DNSSEC 身份验证链。它们会显示发生断点的位置,对查找 DNSSEC 失败的原因非常有用。

Google 公共 DNS 提供的是旧数据。我可以强制刷新数据吗?

您可以使用刷新缓存工具刷新常见记录类型和大多数域名的 Google 公开 DNS 缓存。您无需证明对网域的所有权即可清空网域,但您必须解决限制自动滥用服务的 reCAPTCHA 问题。

针对您使用 NS 记录注册或委托子网域的网域刷新任何记录类型,不仅会刷新该类型的缓存响应,还会刷新该网域的域名服务器的委托信息。如果您最近更改了域名服务器(通过更改注册商或 DNS 托管服务提供商),请务必先执行此操作,然后再刷新 www 等子网域,以免系统根据旧 DNS 服务器上过时的数据刷新这些子网域。

如果 Google 公共 DNS 返回的回答包含过时 CNAME 记录,您需要清除每个 CNAME 网域的 CNAME 记录类型,从链中的最后一个 CNAME 开始,一直回溯到查询的名称。清空所有 CNAME 后,使用使用过时 CNAME 进行响应的任何记录类型清空查询的名称。

可刷写的内容有一些限制:

  • 无法清空使用 EDNS 客户端子网 (ECS) 进行地理定位的网域。对于使用 ECS 的任何网域,请为已启用 ECS 的记录的 TTL 设置得足够短(15 分钟或更短),确保永远无需清空这些记录。

  • 要刷新域名的所有子网域或所有记录类型,唯一的方法是针对要刷新的每个域名刷新每种记录类型。如果这不可行,您可以随时等待记录 TTL 到期(即使实际 TTL 更长,这些记录通常限制为 6 小时)。

  • 如需刷新国际化域名(如 пример.example),请使用 Punycoding 形式(在上述示例中为 xn‑‑e1afmkfd.example)。包含 ASCII 字母、数字、连字符或下划线以外字符的域名无法刷新。

Google 公共 DNS 是否会通过加密与客户端的通信来保护所谓的“最后一跳”?

传统 DNS 流量通过 UDP 或 TCP 传输,且不加密。我们还提供 DNS-over-TLSDNS-over-HTTPS,它们可对客户端与 Google 公共 DNS 之间的流量进行加密。您可以尝试访问:https://dns.google

既然已经有了 DNSSEC,为什么还需要 DNS-over-HTTPS?

DNS-over-HTTPS 和 DNSSEC 是相辅相成的。Google 公共 DNS 会尽可能使用 DNSSEC 对来自域名服务器的响应进行身份验证。不过,为了安全地对来自 Google 公共 DNS 的传统 UDP 或 TCP 响应进行身份验证,客户端需要自行重复 DNSSEC 验证,而目前只有少数客户端解析器会执行此操作。DNS over HTTPS 会对桩解析器和 Google 公共 DNS 之间的流量进行加密,并补充 DNSSEC 以提供端到端身份验证的 DNS 查找。

有没有工具可以用来测试 Google 公共 DNS 与其他 DNS 服务的性能?

您可以使用许多免费工具来衡量 Google 公共 DNS 的响应时间。我们建议使用 Namebench。无论您使用哪种工具,都应针对大量网域(超过 5, 000 个)运行该工具,以确保结果具有统计显著性。虽然测试需要更长时间才能运行完毕,但使用至少 5,000 个域名可确保最大限度地减少因网络延迟(数据包丢失和重传)而产生的变化,并彻底测试 Google 公共 DNS 的大型名称缓存。

如需在 Namebench 中设置域名数量,请使用测试数量 GUI 选项或 -t 命令行标志;如需了解详情,请参阅 Namebench 文档

当我针对 Google 公共 DNS 解析器运行 pingtraceroute 时,响应延迟时间比其他服务长。这是否意味着 Google 公共 DNS 的速度始终较慢?

除了 ping 时间之外,您还需要考虑解析名称所需的平均时间。例如,如果您的 ISP 的 ping 时间为 20 毫秒,但平均域名解析时间为 500 毫秒,则总体平均响应时间为 520 毫秒。如果 Google 公共 DNS 的 ping 时间为 300 毫秒,但可在 1 毫秒内解析许多域名,则总体平均响应时间为 301 毫秒。为了更好地进行比较,我们建议您测试一组大型网域的域名解析。

Google 公共 DNS 如何与 CDN 地理位置信息搭配使用?

许多提供可下载或流式传输的多媒体内容的网站都使用基于 DNS 的第三方内容分发网络 (CDN)(例如 Akamai)托管其内容。当 DNS 解析器向权威域名服务器查询 CDN 的 IP 地址时,域名服务器会返回离解析器(而非用户)最近(在网络距离上)的地址。在某些情况下,对于基于 ISP 的解析器以及 Google 公共 DNS 等公共解析器,解析器可能不在用户附近。在这种情况下,浏览体验的速度可能会受到一定程度的减慢。 在这方面,Google 公共 DNS 与其他 DNS 提供商没有什么不同。

为了缩短 DNS 服务器与用户之间的距离,Google 公共 DNS 已在全球部署了服务器。具体而言,欧洲的用户应定向到欧洲的 CDN 内容服务器,亚洲的用户应定向到亚洲的 CDN 服务器,美国东部、中西部和西部的用户应定向到这些各自区域中的 CDN 服务器。我们还发布了此信息,以帮助 CDN 为多媒体用户提供良好的 DNS 结果。

此外,Google 公共 DNS 使用 RFC 中所述的称为 EDNS 客户端子网的技术解决方案。这样,解析器就可以将客户端 IP 地址的一部分(IPv4 的第一个 24 位或更少,IPv6 的第一个 56 位或更少)作为 DNS 消息中的源 IP 传入,以便域名服务器可以根据用户的位置(而不是解析器的位置)返回经过优化的结果。

隐私权

当我使用 Google 公共 DNS 服务时,Google 会记录哪些信息?

Google 公共 DNS 隐私权页面列出了我们收集的完整信息。Google 公共 DNS 遵守 Google 的主要隐私权政策,该政策可在我们的隐私权中心查看。

我们只会暂时记录您的客户端 IP 地址(会在一两天内清除),但我们会延长有关 ISP 和城市/都市圈位置的信息,以便提高我们的服务速度、质量和安全性。

收集到的信息是否会存储在我的 Google 账号名下?

存储的数据不会与任何 Google 账号相关联。

Google 是否会与 Google 以外的任何人分享从 Google 公共 DNS 服务收集的信息?

不会,但Google 隐私权政策中所述的少数情况除外,例如法律程序和可强制执行的政府要求。(另请参阅 Google 的用户数据要求透明度报告。)

Google 是否会将临时日志或永久日志中的信息与我为使用其他服务而向 Google 提供的任何个人信息相关联或合并?

隐私权页面所述,我们不会以这种方式组合或关联日志数据。