使用 Azure CLI 匯入並匯出 DNS 區域檔案

在本文中,你將學習如何使用 Azure CLI 在 Azure DNS 中匯入和匯出 DNS 區域檔案。 你也可以用 Azure 入口網站匯入和匯出區域檔案。

DNS 區域遷移簡介

DNS 區域檔案是包含區域內每個網域名稱系統(DNS)紀錄資訊的文字檔。 它遵循標準格式,適合在 DNS 系統間傳輸 DNS 紀錄。 若要將 DNS 區域匯入 Azure DNS,使用區域檔案是最便捷的方式。 你也可以從 Azure DNS 匯出區域檔案,方便其他 DNS 系統使用。

Azure DNS 支援透過 Azure CLI 和 Azure 入口網站匯入和匯出區域檔案。

Azure CLI 是一個跨平台的命令列工具,用於管理 Azure 服務。 它可從 Azure 下載頁面下載 Windows、Mac 和 Linux。

取得你現有的 DNS 區域檔案

在你匯入 DNS 區域檔案到 Azure DNS 之前,你需要取得該區域檔案的副本。 此檔案的來源取決於 DNS 區域的託管地點。

  • 如果你的 DNS 區域是由合作夥伴服務主機,該服務應該有辦法讓你下載 DNS 區域檔案。 合作夥伴服務包括網域註冊商、專用 DNS 主機服務提供者,或替代的雲端服務提供者。
  • 如果你的 DNS 區域是托管在 Windows DNS,區域檔案的預設資料夾是 %systemroot%\system32\dns。 每個區域檔案的完整路徑也會顯示在 DNS 控制台的 General 標籤中。
  • 如果你的 DNS 區域是用 BIND 來架設,每個區域的區域檔案位置會在 BIND 設定檔 named.conf 中指定。

Important

如果你匯入的區域檔案包含指向其他私有區域名稱的 CNAME 條目,除非同時匯入另一個區域,或修改 CNAME 條目,否則 Azure DNS 解析 CNAME 會失敗。

將 DNS zone 檔案匯入 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 紀錄。 當你匯入區域檔案時,除了參數外,所有 SOA 參數都會從區域檔案host中取得。 此參數使用 Azure DNS 提供的值,因為它需要參考 Azure DNS 提供的主名稱伺服器。
  • 區域頂點設定的名稱伺服器紀錄也會在區域建立時由 Azure DNS 自動建立。 此紀錄集僅匯入 TTL。 這些紀錄包含 Azure DNS 提供的名稱伺服器名稱。 記錄資料不會被匯入區域檔案中的值覆蓋。
  • Azure DNS 支援包含多個字串的 TXT 記錄,每個字串長度最多 255 個字元,每個 TXT 記錄集總共可達 4,096 個字元。 區域檔案中的多字串 TXT 記錄可能不會用相同的字串結構匯入,匯入完成後請確認你的 TXT 紀錄。 欲了解更多資訊,請參閱 TXT紀錄。

CLI 格式與值

Azure CLI 指令匯入 DNS 區域的格式為:

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

Values:

  • <resource group>是 Azure DNS 中該區域的資源群組名稱。
  • <zone name> 是該區域的名稱。
  • <zone file name> 是要匯入區域檔案的路徑/名稱。

如果資源群組中還沒有這個名稱的區域,系統會幫你建立一個。 對於現有區域,匯入的紀錄集會與現有的紀錄集合併。

匯入區域檔案

要匯入區域檔案以 contoso.com。

  1. 如果您還沒有資源群組,請加以建立。

    az group create --resource-group myresourcegroup -l westeurope
    
  2. 要將 contoso.com 從檔案 contoso.com.txt 匯入資源群組 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.com."
          },
          {
            "additionalProperties": {},
            "nsdname": "ns2-03.azure-dns.net."
          },
          {
            "additionalProperties": {},
            "nsdname": "ns3-03.azure-dns.org."
          },
          {
            "additionalProperties": {},
            "nsdname": "ns4-03.azure-dns.info."
          }
        ],
        "resourceGroup": "myresourcegroup",
        "ttl": 86400,
        "type": "Microsoft.Network/dnszones/NS"
      }
    ]
    

    使用 Windows 指令提示字元查詢「nslookupwww」紀錄。

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

更新 DNS 委派

確認區域已正確匯入後,接著你需要更新 DNS 委派,指向 Azure DNS 名稱伺服器。 欲了解更多資訊,請參閱 更新 DNS 委派。

從 Azure DNS 匯出 DNS zone file

要匯出 DNS 區域,請使用以下 Azure CLI 指令:

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

Values:

  • <resource group>是 Azure DNS 中該區域的資源群組名稱。
  • <zone name> 是該區域的名稱。
  • <zone file name> 是要匯出的區域檔案的路徑/名稱。

和區域匯入一樣,你首先需要登入、選擇訂閱,並設定 Azure CLI 以使用 Resource Manager 模式。

匯出區域檔案

若要將資源群組中的現有 Azure DNS 區域 contoso.com 匯出到 myresourcegroup 中的檔案 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

下一步