如何将 DNS 区域文件导入 Route 53 并对导入它们时收到的错误进行排查?

3 分钟阅读
0

我正在从另一个服务提供商迁移到我的域名系统(DNS)。我需要通过导入 DNS 区域文件来迁移 Amazon Route 53 托管区域中的所有记录。该如何操作?

简短描述

在开始导入过程之前,请在 DNS 区域文件中确认以下内容,以避免在导入过程中出现错误:

  • 区域文件必须采用符合 RFC 的格式。
  • 区域文件中记录的域名必须与托管区域的名称匹配。
  • Route 53 支持 $ORIGIN$TTL 关键字。如果区域文件包含 $GENERATE$INCLUDE 关键字,导入将失败,且 Route 53 会返回错误。
  • 导入区域文件时,Route 53 将忽略权限声明 (SOA) 记录。区域文件中与托管区域名称相同的任何名称服务器 (NS) 记录也将被忽略。
  • 您最多可以导入 1000 条记录。
  • 如果托管区域已包含区域文件中显示的记录,则导入过程将失败,也不会创建任何记录。
  • 查看区域文件的内容,以确认记录名称是否包含或排除尾随点(视情况而定)。
  • 当区域文件中的记录的名称包括尾随点 (example.com.) 时,导入过程会将该名称解读为完全限定域名 (FQDN)。在这种情况下,将创建具有该名称的 Route 53 记录。
  • 当区域文件中的记录的名称不包括尾随点 (www) 时,导入过程会将该名称与区域文件中的域名 (example.com) 串联起来。在这种情况下,将创建具有串联名称 (www.example.com) 的 Route 53 记录。

**注意:**对于规范名称 (CNAME)、邮件交换器 (MX)、指针 (PTR) 和服务 (SRV) 记录,此尾随点行为也适用于包含在 RDATA 值中的域名。如果您使用的是 example.com 的区域文件,并且区域文件中的 CNAME 记录(不带尾随点)的 RDATA 值为 www.example.com(也没有尾随点),则导入过程将创建名为 support.example.com 的 Route 53 记录。该记录会将流量路由到 www.example.com.example.com。在导入区域文件之前,请查看 RDATA 值并根据需要进行更新。

解决方法

导入 DNS 区域文件

要通过导入区域文件来创建记录:

  1. 打开 Route 53 控制台
  2. 在导航窗格中,选择Hosted zones(托管区域)。
  3. 在托管区域页面上,选择 Create hosted zone(创建托管区域)。
  4. 输入域名。(可选)您还可以输入评论。
  5. 选择 Create(创建)。
  6. 选择 Import zone file(导入区域文件)。
  7. 在导入区域文件窗格中,将区域文件的内容粘贴到 Zone file(区域文件)文本框中。
  8. 选择 Import(导入)。

**注意:**根据区域文件中的记录数量,创建记录可能需要几分钟的时间。

在 Route 53 托管区域中创建 DNS 记录后,您可以继续迁移过程。要完成迁移过程,请按照使 Amazon Route 53 成为现有域的 DNS 服务中的步骤操作。

排查导入 DNS 区域文件时收到的错误

以下示例提供了解决导入 DNS 区域文件时可能收到的常见错误消息的问题排查步骤。

"Expected exactly one of [AliasTarget, all of [TTL, and ResourceRecords], or TrafficPolicyInstanceId], but found none in Change with {DNS_Record}"

**原因:**托管文件的 DNS 记录中没有指定 Time to Live (TTL) 值。

示例区域文件:

$ORIGIN testdomain.com
@ A 1.1.1.1
www CNAME example.com

示例错误消息:

Invalid request: Expected exactly one of [AliasTarget, all of [TTL, and ResourceRecords], or TrafficPolicyInstanceId], but 
found none in Change with [Action=CREATE, Name=testdomain.com, Type=A, SetIdentifier=null]

**解决方案:**使用 $TTL 关键字将 TTL 分配给所有的 DNS 记录,或根据您的使用案例,为各个记录指定 TTL 值。

$ORIGIN testdomain.com
$TTL 60
@ A 1.1.1.1
www CNAME example.com

-或者-

$ORIGIN testdomain.com
@ 60 A 1.1.1.1
www 60 CNAME example.com

“对于 {Record_Type} 类型的记录,区域文件包含太多的值。预计会有 1 个值,但指定了 {n} 个值。在第 {m} 行。”

**原因:**为第“m”行中的特定 DNS 记录指定了多个值。

示例 1 区域文件:

$ORIGIN testdomain.com
$TTL 60
@ TXT  "abc" "xyz"

示例 1 错误消息:

The zone file contains too many values for a record with a type of TXT. 1 
values were expected, but 2 values are specified. On line 3. '@ TXT  
"abc" "xyz"'

**解决方案:**在单独的行中指定多个 TXT 记录值。务必在每个值周围使用双引号 ("example value")。

$ORIGIN testdomain.com
$TTL 60
@ TXT "abc" 
@ TXT "xyz"

示例 2 区域文件:

$ORIGIN testdomain.com
$TTL 60
@ A 1.1.1.1 2.2.2.2 3.3.3.3

示例 2 错误消息:

The zone file contains too many values for a record with a type of A. 1 
values were expected, but 3 values are specified. On line 3. '@ A 
1.1.1.1 2.2.2.2 3.3.3.3'

解决方案:

$ORIGIN testdomain.com
$TTL 60
@ A 1.1.1.1 
@ A 2.2.2.2
@ A 3.3.3.3

"CharacterStringTooLong (Value is too long) encountered with {Value}"

**原因:**TXT 值字符串包含 255 个以上的字符。

示例区域文件:

$ORIGIN testdomain.com
$TTL 60
www TXT "spf1 +a +mx ip4:1.1.1.1 ip4:2.2.2.2 ip4:3.3.3.3 ip4:4.4.4.4 ip4:5.5.5.5.5 ip4:6.6.6.6 ip4:7.7.7.7 ip4:8.8.8.8 ip4:9.9.9.9 ip4:10.10.10.10 ipv4:11.11.11.11 ip4:12.12.12.12 ip4:13.13.13.13 ip4:14.14.14.14 ip4:15.15.15.15.15 include:spf.abc.com include:_spf.xyz.com ~all"

示例错误消息:

[Invalid Resource Record: 'FATAL problem: 
CharacterStringTooLong (Value is too long) encountered with '"spf1 +a 
+mx ip4:1.1.1.1 ip4:2.2.2.2 ip4:3.3.3.3 ip4:4.4.4.4 ip4:5.5.5.5.5 
ip4:6.6.6.6 ip4:7.7.7.7 ip4:8.8.8.8 ip4:9.9.9.9 ip4:10.10.10.10 
ipv4:11.11.11.11 ip4:12.12.12.12 ip4:13.13.13.13 ip4:14.14.14.14 
ip4:15.15.15.15.15 include:spf.abc.com include:_spf.xyz.com ~all"'']

**解决方案:**将字符数超过 255 个的 TXT 记录字符串拆分为同一记录中的多个文本字符串。务必在每个值周围使用双引号 ("example value")。

$ORIGIN testdomain.com
$TTL 60
www TXT "spf1 +a +mx ip4:1.1.1.1 ip4:2.2.2.2 ip4:3.3.3.3 ip4:4.4.4.4 ip4:5.5.5.5.5 ip4:6.6.6.6 ip4:7.7.7.7 ip4:8.8.8.8 ip4:9.9.9.9 ip4:10.10.10.10 ipv4:11.11.11.11""ip4:12.12.12.12 ip4:13.13.13.13 ip4:14.14.14.14 ip4:15.15.15.15.15 include:spf.abc.com include:_spf.xyz.com ~all"

**注意:**TXT 记录中值的最大长度为 4000 个字符。

“DNS 名称为 example.com 的 CNAME 类型的 RRSet 并非恰好包含一个资源记录”

**原因:**为同一个域名创建了多条 CNAME 记录。

**注意:**使用此方法导入到托管区域的记录使用简单路由策略创建。因此,无法在单个 DNS 记录中指定多个 CNAME 记录。

示例区域文件:

$ORIGIN testdomain.com
$TTL 60
www CNAME abc.com
www CNAME xyz.com

示例错误消息:

Error occurred [RRSet of type CNAME with DNS name www.testdomain.com. is not permitted as it 
conflicts with other records with the same DNS name in zone 
testdomain.com., RRSet of type CNAME with DNS name www.testdomain.com. 
does not contain exactly one resource record.]

**解决方案:**根据您的使用案例使用加权、延迟、故障转移或地理位置路由策略来单独创建记录,而不是使用 Import(导入)选项。


AWS 官方
AWS 官方已更新 2 年前