使用 Azure CLI 管理 Azure DNS 中的 DNS 记录和记录集

本文介绍如何使用跨平台 Azure CLI 管理 DNS 区域的 DNS 记录。 Azure CLI 适用于 Windows、Mac 和 Linux。 也可以使用 Azure PowerShellAzure 门户管理 DNS 记录。

本文中的示例假设你已安装 Azure CLI、已登录,并且已创建一个 DNS 区域

简介

在 Azure DNS 中创建 DNS 记录之前,首先需了解 Azure DNS 如何将 DNS 记录组织到 DNS 记录集中。

记录名称

在 Azure DNS 中,记录使用相对名称指定。 完全限定的 域名 (FQDN) 包括区域名称,而相对 域名则不包括。 例如,contoso.com 区域中的相对记录名称 www 会提供完全限定的记录名称 www.contoso.com

顶点 记录是位于 DNS 区域的根(或顶点 )中的 DNS 记录。 例如,在 DNS 区域 contoso.com 中,顶点记录还具有完全限定的名称 contoso.com(有时称为裸域)。 按照惯例,相对名称 @ 用于表示顶点记录。

记录类型

每个 DNS 记录都有一个名称和类型。 这些记录根据其所包含的数据分为各种类型。 最常见的类型为“A”记录,这种记录将名称映射到 IPv4 地址。 另一种常见类型是“MX”记录,这种记录将名称映射到邮件服务器。

Azure DNS 支持所有常见 DNS 记录类型:A、AAAA、CAA、CNAME、MX、NS、PTR、SOA、SRV 和 TXT。 请注意,SPF 记录使用 TXT 记录表示

记录集

有时,需要创建具有给定名称和类型的多个 DNS 记录。 例如,假设在两个不同的 IP 地址上托管“www.contoso.com”网站。 该网站需要两个不同的 A 记录,每个 IP 地址一个。 这就是记录集的示例:

www.contoso.com.        3600    IN    A    134.170.185.46
www.contoso.com.        3600    IN    A    134.170.188.221

Azure DNS 使用记录集 管理所有 DNS 记录。 记录集(也称为资源 记录集)是某个区域中具有相同名称、相同类型的 DNS 记录的集合。 大多数记录集包含单个记录。 但是,上面所示的示例一个记录集包含多个记录,这并不少见。

例如,假设已在区域“contoso.com”中创建 A 记录“www”,指向 IP 地址“134.170.185.46”(上述第一条记录)。 要创建第二条记录,应将此记录添加到现有记录集而非创建其他记录集。

SOA 和 CNAME 记录类型例外。 对于这些类型,DNS 标准不允许多个记录具有相同的名称,因此这些记录集仅可包含单个记录。

有关 Azure DNS 中的 DNS 记录的详细信息,请参阅 DNS 区域和记录

创建 DNS 记录

若要创建 DNS 记录,请使用 az network dns record-set <record-type> add-record 命令(其中 <record-type> 是记录的类型,即 a、srv、txt 等)如需相关帮助,请查看 az network dns record-set --help

创建记录时,需要指定以下信息:

  • 资源组名称
  • 区域名称
  • 记录集名称
  • 记录类型

给定的记录集名称必须是相对名称,这意味着它必须排除区域名称。 如果记录集不存在,此命令将为你创建该记录集。 但如果记录集已存在,则此命令将添加指定的记录。

如果创建了新记录集,将使用默认生存时间 (TTL) 3600。 有关如何使用不同 TTL 的说明,请参阅创建 DNS 记录集

以下示例在区域 contoso.com 中的资源组 MyResourceGroup 内创建名为 www 的 A 记录。 该 A 记录的 IP 地址为 1.2.3.4

az network dns record-set a add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name www --ipv4-address 1.2.3.4

若要在区域(在本例中为“contoso.com”)顶点中创建记录集,请使用记录名称 \“\@\”(包括引号):

az network dns record-set a add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "@" --ipv4-address 1.2.3.4

创建 DNS 记录集

在上面的示例中,已将 DNS 记录添加到现有记录集,或者隐式创建了记录集。 也可以显式创建记录集,并在其中添加记录。 Azure DNS 支持“空”记录集,此类记录集可充当占位符,用于在创建 DNS 记录之前保留某个 DNS 名称。 空记录集在 Azure DNS 控制平面可见,但不会显示在 Azure DNS 名称服务器上。

记录集是使用 az network dns record-set <record-type> create 命令创建的。 有关帮助,请参阅 az network dns record-set <record-type> create --help

显式创建记录集可以指定生存时间 (TTL) 等记录集属性以及元数据。 可以使用记录集元数据,以键-值对的形式将特定于应用程序的数据与每个记录集相关联。

以下示例使用 --ttl 参数(简短格式为 -l)创建 TTL 为 60 秒的类型为“A”的空记录集:

az network dns record-set a create --resource-group myresourcegroup --zone-name contoso.com --name www --ttl 60

以下示例使用 --metadata 参数创建包含两个元数据项(“dept=finance”和“environment=production”)的记录集:

az network dns record-set a create --resource-group myresourcegroup --zone-name contoso.com --name www --metadata "dept=finance" "environment=production"

创建空记录集后,可根据创建 DNS 记录中所述,使用 azure network dns record-set <record-type> add-record 添加记录。

创建其他类型的记录

详细了解如何创建“A”记录以后,还可通过以下示例了解如何创建 Azure DNS 支持的其他记录类型的记录。

用于指定记录数据的参数根据记录类型的不同而异。 例如,对于“A”类型的记录,应使用参数 --ipv4-address <IPv4 address> 指定 IPv4 地址。 可以使用 az network dns record-set <record-type> add-record --help 列出每个记录类型的参数。

在每种情况下,我们都演示了如何创建单个记录。 记录将添加到现有记录集或隐式创建的记录集。 有关创建记录集和显式定义记录集参数的详细信息,请参阅创建 DNS 记录集

没有创建 SOA 记录集的示例,因为 SOA 是随每个 DNS 区域一起创建和删除的。 无法单独创建或删除 SOA 记录。 但是,可以修改 SOA,如后面的示例所示。

创建 AAAA 记录

az network dns record-set aaaa add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-aaaa --ipv6-address 2607:f8b0:4009:1803::1005

创建 CAA 记录

az network dns record-set caa add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-caa --flags 0 --tag "issue" --value "ca1.contoso.com"

创建 CNAME 记录

注意

DNS 标准不允许在区域的顶点创建 CNAME 记录 (--Name "@"),也不允许记录集包含多个记录。

有关详细信息,请参阅 CNAME 记录

az network dns record-set cname set-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-cname --cname www.contoso.com

创建 MX 记录

在此示例中,使用记录集名称“@”在区域顶端(在本例中为“contoso.com”)创建 MX 记录。

az network dns record-set mx add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "@" --exchange mail.contoso.com --preference 5

创建 NS 记录

az network dns record-set ns add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-ns --nsdname ns1.contoso.com

创建 PTR 记录

在此示例中,“my-arpa-zone.com”表示代表用户 IP 范围的 ARPA 区域。 此区域中的每个 PTR 记录集对应于此 IP 范围内的一个 IP 地址。 记录名称“10”是此 IP 范围内由此记录表示的 IP 地址的最后一个八位字节。

az network dns record-set ptr add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name my-arpa.zone.com --ptrdname myservice.contoso.com

创建 SRV 记录

创建 SRV 记录集时,请在记录集名称中指定“_service”和“_protocol”。 在区域顶点创建 SRV 记录集时,无需在记录集名称中包含“@”。

az network dns record-set srv add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name _sip._tls --priority 10 --weight 5 --port 8080 --target sip.contoso.com

创建 TXT 记录

以下示例说明如何创建 TXT 记录。 如需详细了解 TXT 记录中支持的最大字符串长度,请参阅 TXT 记录

az network dns record-set txt add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-txt --value "This is a TXT record"

获取记录集

若要检索现有的记录集,请使用 az network dns record-set <record-type> show。 有关帮助,请参阅 az network dns record-set <record-type> show --help

创建记录或记录集时,给定的记录集名称必须是相对名称。 此名称不包括区域名称。 此外,需要指定记录类型、包含该记录集的区域,以及包含该区域的资源组。

以下示例从资源组 MyResourceGroup 中的区域 contoso.com 检索 A 类型的 www 记录。

az network dns record-set a show --resource-group myresourcegroup --zone-name contoso.com --name www

列出记录集

可以通过使用 az network dns record-set list 命令列出 DNS 区域中的所有记录。 有关帮助,请参阅 az network dns record-set list --help

此示例将返回资源组 MyResourceGroup 中区域 contoso.com 内的所有记录集 :

az network dns record-set list --resource-group myresourcegroup --zone-name contoso.com

此示例返回与给定的记录类型(在此例中为“A”记录)匹配的所有记录集:

az network dns record-set a list --resource-group myresourcegroup --zone-name contoso.com 

将记录添加到现有记录集

可以使用 az network dns record-set <record-type> add-record 在新记录集中创建记录,或者将记录添加到现有记录集。

有关详细信息,请参阅创建 DNS 记录和前面的创建其他类型的记录

从现有记录集中删除记录。

若从现有记录集中删除 DNS 记录,请使用 az network dns record-set <record-type> remove-record。 有关帮助,请参阅 az network dns record-set <record-type> remove-record -h

此命令从记录集中删除 DNS 记录。 如果删除了记录集中的最后一条记录,也会同时删除记录集本身。 若要保留空记录集,请使用 --keep-empty-record-set 选项。

使用 az network dns record-set <record-type> add-record 命令时,需要指定要删除的记录以及要从中删除的区域。 创建 DNS 记录和前面的创建其他类型的记录中介绍了这些参数。

以下示例从资源组 MyResourceGroup 中的区域 contoso.com 内的名为 www 的记录集中,删除值为“1.2.3.4”的 A 记录。

az network dns record-set a remove-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "www" --ipv4-address 1.2.3.4

修改现有记录集

每个记录集包含生存时间 (TTL)元数据和 DNS 记录。 以下部分介绍如何修改其中的每个属性。

修改 A、AAAA、CAA、MX、NS、PTR、SRV 或 TXT 记录

若要修改现有的 A、AAAA、CAA、MX、NS、PTR、SRV 或 TXT 类型的记录,应先添加一条新记录,再删除现有记录。 有关如何删除和添加记录的详细说明,请参阅本文中前面的部分。

以下示例演示如何将一条“A”记录中的 IP 地址 1.2.3.4 修改为 IP 地址 5.6.7.8:

az network dns record-set a add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name www --ipv4-address 5.6.7.8
az network dns record-set a remove-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name www --ipv4-address 1.2.3.4

不能在区域顶点(--Name "@",包括引号)从自动创建的 SOA 记录集添加、删除或修改记录。 对于此记录集,允许的更改仅限修改记录集 TTL 和元数据。

修改 CNAME 记录

与大多数其他记录类型不同,一个 CNAME 记录集只能包含一条记录。 这就是为什么无法像其他记录类型一样,通过添加新记录并删除现有记录来替换当前值的原因。

相反,若要修改 CNAME 记录,请使用 az network dns record-set cname set-record。 有关帮助,请参阅 az network dns record-set cname set-record --help

该示例将修改资源组 MyResourceGroup 中的区域 contoso.com 内的 CNAME 记录集 www,使其指向“www.fabrikam.net”而不是现有值:

az network dns record-set cname set-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-cname --cname www.fabrikam.net

修改 SOA 记录

与大多数其他记录类型不同,一个 SOA 记录集只能包含一条记录。 这就是为什么无法像其他记录类型一样,通过添加新记录并删除现有记录来替换当前值的原因。

相反,若要修改 SOA 记录,请使用 az network dns record-set soa update。 有关帮助,请参阅 az network dns record-set soa update --help

以下示例演示如何设置区域 contoso.com 的 SOA 记录的“email”属性:

az network dns record-set soa update --resource-group myresourcegroup --zone-name contoso.com --email admin.contoso.com

修改区域顶点处的 NS 记录

在每个 DNS 区域自动创建区域顶点处的 NS 记录集。 其中包含分配给该区域的 Azure DNS 名称服务器名称。

可向此 NS 记录集添加更多名称服务器,以支持具有多个 DNS 提供商的共同托管域。 还可修改此记录集的 TTL 和元数据。 但是,无法删除或修改预填充的 Azure DNS 名称服务器。

此限制仅适用于区域顶点处的 NS 记录集。 区域中的其他 NS 记录集(用于委派子区域)不受约束,可进行修改。

以下示例展示如何向区域顶点处的 NS 记录集添加其他名称服务器:

az network dns record-set ns add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "@" --nsdname ns1.myotherdnsprovider.com 

修改现有记录集的 TTL

若要修改现有记录集的 TTL,请使用 azure network dns record-set <record-type> update。 有关帮助,请参阅 azure network dns record-set <record-type> update --help

以下示例演示如何修改记录集的 TTL(在本例中,将修改为 60 秒):

az network dns record-set a update --resource-group myresourcegroup --zone-name contoso.com --name www --set ttl=60

修改现有记录集的元数据

可以使用记录集元数据,以键-值对的形式将特定于应用程序的数据与每个记录集相关联。 若要修改现有记录集的元数据,请使用 az network dns record-set <record-type> update。 有关帮助,请参阅 az network dns record-set <record-type> update --help

以下示例说明如何使用“dept=finance”和“environment=production”这两个元数据条目修改记录集。 任何现有元数据都会被给定的值替换。

az network dns record-set a update --resource-group myresourcegroup --zone-name contoso.com --name www --set metadata.dept=finance metadata.environment=production

删除记录集

可以使用 az network dns record-set <record-type> delete 命令删除记录集。 有关帮助,请参阅 azure network dns record-set <record-type> delete --help。 删除记录集也会删除记录集内的所有记录。

注意

无法删除区域顶点的 SOA 和 NS 记录集 (--name "@")。 这些记录集是在创建区域时自动创建的,会在删除区域时自动删除。

以下示例从资源组 MyResourceGroup 中的区域 contoso.com 内删除 A 类型的、名为 www 的记录集:

az network dns record-set a delete --resource-group myresourcegroup --zone-name contoso.com --name www

系统会提示用户确认删除操作。 若要禁止显示此提示,请使用 --yes 开关。

后续步骤

详细了解 Azure DNS 中的区域和记录
了解如何在使用 Azure DNS 时保护区域和记录