使用 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 記錄。 例如,假設 'www.contoso.com' 網站裝載於兩個不同的 IP 位址。 網站需要兩筆不同的 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 記錄集

下列範例會在 MyResourceGroup 資源群組的 contoso.com 區域中建立稱為 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),建立類型「A」且 60 秒 TTL 的空白記錄集:

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 "@" 含引號),您無法於自動建立的 NS 記錄集內新增、移除或修改記錄。 針對此記錄集,修改記錄集 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。 刪除記錄集時,也會刪除記錄集內的所有記錄。

注意

您無法在區域頂點 (--name "@") 刪除 SOA 和 NS 記錄集。 這些項目在區域建立時即會自動建立,且當區域刪除時則會自動刪除。

下列範例會從 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 時,如何保護區域和記錄