如何使用 PowerShell 管理 DNS 区域

本文介绍如何使用 Azure PowerShell 管理 DNS 区域。 也可使用跨平台的 Azure CLI 或 Azure 门户管理 DNS 区域。

本指南专门介绍公共 DNS 区域。 有关使用 Azure PowerShell 管理 Azure DNS 中专用区域的详细信息,请参阅通过 Azure PowerShell 开始使用 Azure DNS 专用区域

DNS 区域用来托管某个特定域的 DNS 记录。 若要开始在 Azure DNS 中托管域,需要为该域名创建 DNS 区域。 随后会在此 DNS 区域内为每个 DNS 记录创建域。

例如,域“contoso.com”可能包含几条 DNS 记录,如“mail.contoso.com”(用于邮件服务器)和“www.contoso.com”(用于网站)。

在 Azure DNS 中创建 DNS 区域时:

  • 在资源组中,区域名称必须是唯一的,不能存在该域。 否则,操作会失败。
  • 可在不同资源组或不同 Azure 订阅中重复使用同一区域名称。
  • 当多个区域共享相同的名称时,将为每个实例分配不同的名称服务器地址。 使用域名注册机构仅可配置一组地址。

注意

不必拥有域名即可在 Azure DNS 中以该域名创建 DNS 区域。 但是,需要拥有域才能通过域名注册机构将 Azure DNS 名称服务器配置为域名的正确名称服务器。

有关详细信息,请参阅 向 Azure DNS 委派域

设置适用于 Azure DNS 的 Azure PowerShell

在开始之前

重要

使用 PowerShell 的 Azure 功能必须已安装 AzureRM 模块。 该模块是旧模块,仅适用于 Windows PowerShell 5.1,它不再接收新功能。 针对相同版本的 PowerShell 进行安装时,AzAzureRM 模块不兼容。 如果需要两个版本,请执行以下操作:

  1. 在 PowerShell 5.1 会话中卸载 Az 模块
  2. 在 PowerShell 5.1 会话中安装 AzureRM 模块
  3. 下载并安装 PowerShell Core 6.x 或更高版本
  4. 在 PowerShell Core 会话中安装 Az 模块

在开始配置之前,请确保具备以下各项。

登录到 Azure 帐户

打开 PowerShell 控制台并连接到帐户。 有关详细信息,请参阅使用 Azure PowerShell 登录

Connect-AzAccount -Environment AzureChinaCloud

选择订阅

检查该帐户的订阅。

Get-AzSubscription

选择要使用的 Azure 订阅。

Select-AzSubscription -SubscriptionName "your_subscription_name"

创建资源组

Azure Resource Manager 要求所有资源组指定一个位置。 此位置将用作该资源组中的资源的默认位置。 但是,由于所有 DNS 资源都是全局性而非区域性的,因此资源组位置的选择不会影响 Azure DNS。

如果使用现有资源组,可跳过此步骤。

New-AzResourceGroup -Name MyDNSResourceGroup -location "China East"

创建 DNS 区域

通过使用 New-AzDnsZone cmdlet 创建 DNS 区域。

以下示例在名为 MyDNSResourceGroup 的资源组中创建名为 contoso.com 的 DNS 区域:

New-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

以下示例演示如何使用两个 Azure 资源管理器标记project = demoenv = test)创建 DNS 区域:

New-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup -Tag @{ project="demo"; env="test" }

获取 DNS 区域

若要检索 DNS 区域,请使用 Get-AzDnsZone cmdlet。 此操作将返回与 Azure DNS 中现有区域相对应的 DNS 区域对象。 此对象包含有关区域的数据(例如记录集数),但不包含记录集本身(请参见 Get-AzDnsRecordSet)。

Get-AzDnsZone -Name contoso.com –ResourceGroupName MyDNSResourceGroup

Name                  : contoso.com
ResourceGroupName     : myresourcegroup
Etag                  : 00000003-0000-0000-8ec2-f4879750d201
Tags                  : {project, env}
NameServers           : {ns1-01.azure-dns.cn., ns2-01.azure-dns.cn., ns3-01.azure-dns.cn.,
                        ns4-01.azure-dns.cn.}
NumberOfRecordSets    : 2
MaxNumberOfRecordSets : 5000

列出 DNS 区域

通过省略 Get-AzDnsZone 中的区域名称,可以枚举资源组中的所有区域。 此操作将返回区域对象的数组。

$zoneList = Get-AzDnsZone -ResourceGroupName MyDNSResourceGroup
$zoneList

通过省略 Get-AzDnsZone 的区域名和资源组名,可枚举 Azure 订阅中的所有区域。

$zoneList = Get-AzDnsZone
$zoneList

更新 DNS 区域

可以使用 Set-AzDnsZone 对 DNS 区域资源进行更改。 此 cmdlet 不会更新此区域中的任何 DNS 记录集(请参阅如何管理 DNS 记录)。 该操作仅可用于更新区域资源本身的属性。 可写区域属性目前仅限于区域资源的 Azure 资源管理器标记

使用以下两种方式中的一种更新 DNS 区域:

指定使用区域名称和资源组的区域

此方法使用指定值替换现有区域标记。

Set-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup -Tag @{ project="demo"; env="test" }

指定使用 $zone 对象的区域

此方法检索现有区域对象、修改标记,并提交更改。 如此一来,可保留现有标记。

# Get the zone object
$zone = Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

# Remove an existing tag
$zone.Tags.Remove("project")

# Add a new tag
$zone.Tags.Add("status","approved")

# Commit changes
Set-AzDnsZone -Zone $zone

Set-AzDnsZone 与 $zone 对象配合使用时,Etag 检查将用于确保不会覆盖并发更改。 可以使用可选的 -Overwrite 开关取消这些检查。

删除 DNS 区域

可以使用 Remove-AzDnsZone cmdlet 删除 DNS 区域。

注意

删除 DNS 区域也会删除该区域中的所有 DNS 记录。 无法撤消此操作。 如果 DNS 区域在使用中,则使用该区域的服务在区域删除后将无效。

若要防止意外删除区域,请参阅如何保护 DNS 区域和记录

使用以下两种方式中的一种删除 DNS 区域:

指定使用区域名称和资源组的区域

Remove-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

指定使用 $zone 对象的区域

可使用 Get-AzDnsZone 返回的 $zone 对象指定要删除的区域。

$zone = Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup
Remove-AzDnsZone -Zone $zone

区域对象也可以通过管道输送,而不是作为参数传递:

Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup | Remove-AzDnsZone

Set-AzDnsZone 一样,如果指定使用 $zone 对象的区域,Etag 检查就能够确保不会删除并发更改。 使用 -Overwrite 开关取消这些检查。

确认提示

New-AzDnsZoneSet-AzDnsZoneRemove-AzDnsZone cmdlet 都支持确认提示。

如果 $ConfirmPreference PowerShell 首选项变量的值为 Medium 或更低,则 New-AzDnsZoneSet-AzDnsZone 都会提示用户进行确认。 由于删除 DNS 区域可能会导致出现不需要的条件,如果 $ConfirmPreference PowerShell 变量拥有除 None 之外的其他值,则 Remove-AzDnsZone cmdlet 会提示用户进行确认。

由于 $ConfirmPreference 的默认值为 High,则默认情况下仅 Remove-AzDnsZone 会提示用户进行确认。

可以使用 -Confirm 参数重写当前的 $ConfirmPreference 设置。 如果指定 -Confirm-Confirm:$True,cmdlet 会在运行之前提示用户进行确认。 如果指定 -Confirm:$False,cmdlet 不会提示用户进行确认。

有关 -Confirm$ConfirmPreference 的详细信息,请参阅 About Preference Variables(关于首选项变量)。

后续步骤

了解如何在 DNS 区域中管理记录集和记录
了解如何将域委派给 Azure DNS
查看 Azure DNS PowerShell 参考文档