使用 Azure CLI 导入和导出 DNS 区域文件

在本文中,你将学习如何使用 Azure CLI 在 Azure DNS 中导入和导出 DNS 区域文件。 你也可以通过 Azure 门户导入和导出区域文件

DNS区域迁移介绍

DNS 区域文件是一个包含区域内所有域名系统(DNS)记录信息的文本文件。 它遵循标准格式,适合在 DNS 系统之间传输 DNS 记录。 使用区域文件是将 DNS 区域导入 Azure DNS 的一种快捷简便的方法。 你也可以导出Azure DNS的区域文件,用于其他DNS系统。

Azure DNS 支持通过 Azure CLI 和 Microsoft Azure 门户导入和导出区域文件。

Azure CLI 是一个跨平台命令行工具,用于管理 Azure 服务。 它支持Windows、Mac和Linux,从Azure下载页面下载。

获取你现有的DNS区域文件

在你将 DNS 区域文件导入 Azure DNS 之前,你需要先获取该区域文件的副本。 该文件的来源取决于DNS区域的托管地点。

  • 如果你的DNS区是由合作伙伴服务托管的,服务应该有办法让你下载DNS区文件。 合作伙伴服务包括域名注册商、专用 DNS 托管提供商或替代云服务提供商。
  • 如果你的DNS区域托管在Windows DNS,区域文件的默认文件夹是 %systemroot%\system32\dns。 每个区域文件的完整路径也会显示在DNS控制台的 通用 标签页上。
  • 如果你的DNS区域是用BIND托管的,每个区域的区域文件位置会在 BIND配置文件name.conf中指定。

Important

如果你导入的区域文件包含指向另一个私有区域名称的CNAME条目,除非另一个区域也被导入,或者修改了CNAME条目,否则Azure DNS对CNAME的解析将失败。

将DNS区域文件导入Azure DNS

导入一个区域文件会在Azure DNS中创建一个新的区域,如果该区域还不存在的话。 如果该区域存在,则区域文件中的记录集将与现有记录集合并。

合并行为

  • 默认情况下,新的记录集将与现有记录集合并。 合并记录集中的相同记录不会被重复。
  • 当记录集合并时,会使用已有记录集的存活时间(TTL)。
  • 授权起始(SOA)参数(host 除外)始终取自导入的区域文件。 位于区域顶点的名称服务器记录集也始终使用从导入的区域文件中获取的 TTL。
  • 导入的 CNAME 记录将替换同名的现有 CNAME 记录。
  • 当CNAME记录与另一条同名但类型不同的记录发生冲突时,将使用现有记录。

关于进口的额外信息

以下说明提供了关于分区进口流程的更多技术细节。

  • $TTL 指令是可选的,并且是支持的。 当没有 $TTL 指令时,没有显式TTL的记录会被导入,默认TTL为3600秒。 当同一记录集中的两条记录指定不同的TTL时,使用较低的值。
  • $ORIGIN 指令是可选的,并且是支持的。 当设置为 no $ORIGIN 时,默认值为命令行指定的区域名称,包括结尾点(.)。
  • $INCLUDE$GENERATE 指令不受支持。
  • 支持的记录类型包括:A、AAAA、CAA、CNAME、MX、NS、SOA、SRV和TXT格式。
  • 创建区域时,Azure DNS会自动创建SOA记录。 导入区域文件时, 除了 参数外 host ,所有SOA参数都取自区域文件。 该参数使用Azure DNS提供的值,因为它需要指向Azure DNS提供的主名称服务器。
  • 区域顶点的名称服务器记录设置也会在创建区域时由 Azure DNS 自动创建。 仅导入该记录集的TTL。 这些记录包含了由 Azure DNS 提供的名称服务器名称。 记录数据不会被导入的区域文件中的值覆盖。
  • Azure DNS 支持包含多个字符串的 TXT 记录,每个字符串长度最多为 255 字符,每个 TXT 记录集总共可达 4,096 个字符。 区域文件中的多字符串TXT记录可能不会采用相同的字符串结构,所以导入完成后请核实你的TXT记录。 更多信息请参见 TXT记录

CLI 格式与值

导入 DNS 区域的 Azure CLI 命令格式为:

az network dns zone import -g <resource group> -n <zone name> -f <zone file name>

值:

  • <resource group>是Azure DNS中该区域的资源组名称。
  • <zone name> 这是该区域的名称。
  • <zone file name> 是要导入区域文件的路径/名称。

如果资源组中还没有这个名称的区域,会为你创建一个。 对于现有区域,导入的记录集将与现有记录集合并。

导入区域文件

要导入该区域 contoso.com 的区域文件。

  1. 如果还没有资源组,请创建一个。

    az group create --resource-group myresourcegroup -l chinaeast2
    
  2. 要将 contoso.com.txt 文件中的区域 contoso.com 导入资源组 myresourcegroup 中的新 DNS 区域,请执行命令 az network dns zone import

    该命令加载区域文件并解析它。 该命令在 Azure DNS 服务上执行一系列操作,创建该区域及该区域内的所有记录集。 命令会在控制台窗口报告进度以及任何错误或警告。 由于记录集是串行创建的,导入一个大型区域文件可能需要几分钟。

    az network dns zone import -g myresourcegroup -n contoso.com -f contoso.com.txt
    

核实区域

导入文件后,你可以使用以下任一方法来验证DNS区域:

  • 要列出记录,请使用以下 Azure CLI 命令:

    az network dns record-set list -g myresourcegroup -z contoso.com
    
  • 你也可以通过使用 Azure CLI 命令az network dns record-set ns list列出记录。

  • 使用 nslookup 验证这些记录的名称解析。 如果该区域还没有被委派,你需要明确指定正确的 Azure DNS 名称服务器。 以下示例展示了如何检索分配给该区域的名称服务器名称。

    az network dns record-set ns list -g myresourcegroup -z contoso.com  --output json 
    
    [
      {
       .......
       "name": "@",
        "nsRecords": [
          {
            "additionalProperties": {},
            "nsdname": "ns1-03.azure-dns.cn."
          },
          {
            "additionalProperties": {},
            "nsdname": "ns2-03.azure-dns.cn."
          },
          {
            "additionalProperties": {},
            "nsdname": "ns3-03.azure-dns.cn."
          },
          {
            "additionalProperties": {},
            "nsdname": "ns4-03.azure-dns.cn."
          }
        ],
        "resourceGroup": "myresourcegroup",
        "ttl": 86400,
        "type": "Microsoft.Network/dnszones/NS"
      }
    ]
    

    使用 Windows 命令提示符,通过使用 nslookup 命令查询“www”记录。

    nslookup www.contoso.com ns1-03.azure-dns.cn
    
        Server: ns1-01.azure-dns.cn
        Address:  40.90.4.1
    
        Name:www.contoso.com
        Addresses:  134.170.185.46
        134.170.188.221
    

更新 DNS 委派

在验证该 DNS 区域已正确导入后,还需要将 DNS 委派更新为指向 Azure DNS 名称服务器。 有关详细信息,请参阅 更新 DNS 委派

从 Azure DNS 导出 DNS 区域文件

要导出DNS区域,请使用以下Azure CLI命令:

az network dns zone export -g <resource group> -n <zone name> -f <zone file name>

值:

  • <resource group>是Azure DNS中该区域的资源组名称。
  • <zone name> 这是该区域的名称。
  • <zone file name> 是将要导出的区域文件的路径/名称。

和区域导入一样,你首先需要登录,选择订阅,并配置 Azure CLI 以使用 资源管理器 模式。

导出区域文件

要将资源组 myresourcegroup 中的现有 Azure DNS 区域 contoso.com 导出到当前文件夹中的文件 contoso.com.txt ,运行 azure network dns zone export。 该命令调用 Azure DNS 服务,枚举区域内的记录集,并将结果导出为兼容 BIND 的区域文件。

az network dns zone export -g myresourcegroup -n contoso.com -f contoso.com.txt

后续步骤