管理 DNSSEC 配置

为托管地区启用 DNSSEC

您可以使用 Google Cloud Console 轻松为现有托管地区启用 DNSSEC;只需点击该地区的 DNSSEC 设置,然后在弹出菜单中选择“开启”:

“启用 DNSSEC 地区”弹出窗口

在出现的确认对话框中,只需点击启用按钮。

“启用 DNSSEC”确认对话框

您还可以使用 gcloud 命令行工具或 API 为现有托管地区启用 DNSSEC:

gcloud

gcloud dns managed-zones update EXAMPLE_ZONE --dnssec-state on

将上述命令行中的 EXAMPLE_ZONE 替换为实际的地区 ID。

Python

def enable_dnssec(project_id, name, description=None):
client = dns.Client(project=project_id)
zone = client.zone(name=name)
zone.update(dnssec='on', description=description)

在创建地区时启用 DNSSEC

在 Cloud Console 中创建地区时,您可以轻松启用 DNSSEC。只需点击 DNSSEC 设置选项,然后在弹出菜单中选择“开启”:

创建带有 DNSSEC 签名的地区

您也可以在使用 gcloud 命令行工具或 API 在创建地区时启用 DNSSEC:

gcloud

gcloud dns managed-zones create EXAMPLE_ZONE \
    --description "Signed Zone" --dns-name myzone.example.com --dnssec-state on

将上述命令行中的 EXAMPLE_ZONE 替换为实际的地区 ID。

Python

def create_signed_zone(project_id, name, dns_name, description):
client = dns.Client(project=project_id)
zone = client.zone(
    name,  # examplezonename
    dns_name=dns_name,  # example.com.
    description=description,
    dnssec='on')
zone.create()
return zone

验证 DNSSEC 部署

您可以使用 DNSVizVerisign DNSSEC 调试程序Zonemaster 来验证启用了 DNSSEC 的地区是否已正确部署(在使用 Cloud DNS 域名服务器或 DS 记录来更新注册商以激活 DNSSEC 之前,也可以使用后两个工具)。例如,example.com 是为 DNSSEC 正确配置的一个网域,您可以在 http://dnsviz.net/d/www.example.com/dnssec/ 上使用 DNSViz 查看该网域。

针对带有 DNSSEC 签名的地区推荐的 TTL 设置

与 TTL 过期时间不同,DNSSEC 签名的过期时间为固定的绝对时间,而 TTL 过期时间是一个相对时间(相对于域名服务器发送查询响应时间)。 如果配置的 TTL 超过签名生命周期,则可能会导致许多客户端在 DNSSEC 签名已过期时同时请求记录。 如果 TTL 太短,这也会导致 DNSSEC 验证解析器出现问题。

如需详细了解 TTL 选择方面的建议,请参阅 RFC 6781 第 4.4.1 节图 11,但要点如下:

将 TTL 设置为比签名有效期至少短几倍,以避免查询负载达到峰值。

在阅读 RFC 时请注意,许多签名时间参数都是由 Cloud DNS 确定的,您不能对这些参数进行更改。目前包括以下参数(但这些参数会随时发生变化,恕不另行通知;届时本文档也会做相应更新):

  • 生效偏移量 = 1 天
  • 有效期 = 21 天
  • 重新签名周期 = 3 天
  • 刷新周期 = 18 天
  • 抖动间隔 = ½ 天(或 ±6 小时)
  • 最短签名有效期 = 刷新周期 - 抖动间隔 = 17.75 天 = 1533600

切勿将 TTL 设置为超过最短签名有效期。

为托管地区停用 DNSSEC

移除 DS 记录并等到这些记录在缓存中过期后,您可以使用以下 gcloud 命令轻松停用 DNSSEC:

gcloud dns managed-zones update EXAMPLE_ZONE --dnssec-state=off

将上述 gcloud 命令中的 EXAMPLE_ZONE 替换为实际的地区名称。

DNSSEC、网域转移和地区迁移

对于已在网域注册商处激活 DNSSEC 且已启用 DNSSEC 的地区,在以下情况下,您必须采取额外措施来确保网域正常运转:

  • 网域被转移到另一个注册商(或所有权被转移)时

  • 在 Cloud DNS 和另一个 DNS 运营商之间迁移 DNS 地区时

Cloud DNS 采用 KSK Double-DS 滚动更新变体(请参阅 RFC 6781 第 4.1.2 节)技术方法来完成这些迁移操作。

如需了解此过程的一般信息和潜在问题,请参阅 ICANN 提供的演示文稿 PDF,其中提供了很多信息。

将带有 DNSSEC 签名的地区迁移到 Google Cloud DNS

如果要将带有 DNSSEC 签名的地区迁移到 Google Cloud DNS,请检查 Cloud DNS 是否支持已在使用中的相同 KSK 算法。 如果不支持,请先在网域注册商处停用 DNSSEC,然后在注册商处迁移地区并更新域名服务器记录,以使用 Cloud DNS 域名服务器。

如果 Cloud DNS 支持现有 KSK 和 ZSK 算法,您可以按照以下步骤在启用 DNSSEC 的情况下执行迁移:

  1. 在 DNSSEC“转移”状态下新建一个带有 DNSSEC 签名的地区。 在“转移”状态下,您可以手动将 DNSKEY 复制到地区中。

  2. 导出您的地区文件并将其导入新地区中。

  3. 添加旧地区的地区文件中的 DNSKEY(包括 KSK 和 ZSK)。

    • 您还可以使用 dig 命令查询其他域名服务器,以获取其中的 DNSKEY 记录。
  4. 将新地区的 DS 记录添加到您的注册商。

  5. 在注册商处将域名服务器记录更新为新地区的 Cloud DNS 域名服务器。

退出 DNSSEC 转移状态

如需退出 DNSSEC 转移状态,请等待对 Google Cloud DNS 的域名服务器引用(NS 和 DS)已传播到所有权威域名注册管理机构域名服务器,并且所有旧域名服务器 DNSSEC 资源记录(包含域名注册管理机构父地区的 NS 和 DS 记录以及旧地区中的 DNSKEY、NSEC/NSEC3 和 RRSIG 记录)的 TTL 均已过期。请务必移除手动添加的转移 DNSKEY 记录。

然后,您可以将地区的 DNSSEC 状态从“转移”更改为“开启”。 执行此项更改可从地区启用自动 ZSK 轮换。通常,您的地区可以在一周后安全地退出 DNSSEC 转移状态,并且保持在 DNSSEC 转移状态的时间不应超过一到两个月。

您还应该从注册商处移除旧 DNS 运营商地区的 DS 记录

从 Google Cloud DNS 迁移带有 DNSSEC 签名的地区

在将带有 DNSSEC 签名的地区迁移到另一个 DNS 运营商之前,请检查该运营商是否支持您使用的相同 KSK 算法。 如果不支持,请先在网域注册商处停用 DNSSEC,然后在注册商处迁移地区并更新域名服务器记录,以使用新的域名服务器。

如果新运营商支持相同的 KSK(最好同时支持相同的 ZSK)算法,并支持将现有 DNSKEY 复制到新地区,您可以按照以下步骤在启用 DNSSEC 的情况下执行迁移:

  1. 将 DNSSEC 状态从“开启”更改为“转移”。这会阻止 ZSK 轮换。

  2. 导出您的地区文件(包括 DNSKEY)并将其导入新地区。

  3. 如果未导入 DNSKEY(包括 KSK 和 ZSK),请手动添加。

    • 使用 dig 命令查询您地区的 Cloud DNS 域名服务器,以获取其中的 DNSKEY 记录:

      dig DNSKEY myzone.example.com. @ns-cloud-e1.googledomains.com.
      
  4. 为新地区启用 DNSSEC 签名,并在注册商处为新 KSK 添加 DS 记录。

    • 如果您的注册商不支持多个 DS 记录,请在第 6 步中执行此操作。
  5. (可选)将新地区的新 DNSKEY 导入 Cloud DNS 中。

    • 您可以使用与第 3 步类似的 dig 命令来执行此操作,但跳过从 Cloud DNS 导出的 DNSKEY。
  6. 在注册商处更新域名服务器记录以使用新的 DNS 运营商。

    • 如果您只能在注册商处替换 DS 记录,请立即执行此操作。

如果另一个 DNS 运营商在迁移带有 DNSSEC 签名的地区(如 Dyn)方面有自己的流程,那么该运营商的迁移步骤应当在这里的第 1 步操作完成之后与此步操作并行执行。

完成另一方的所有必要步骤后,通过将 DNSSEC 状态更新为“关闭”来停用 DNSSEC(或者只是在 Cloud DNS 中删除相应地区),然后从注册商处移除 Cloud DNS 地区的 DS 记录

后续步骤