你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure PowerShell 创建 Azure DNS 专用解析程序

本文将逐步引导你完成使用 PowerShell 创建第一个专用 DNS 区域和记录的步骤。 如果你愿意,可以使用 Azure 门户完成本快速入门中的步骤。

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

Azure DNS 专用解析程序是一项新服务,借助这些服务,无需部署基于 VM 的 DNS 服务器即可从本地环境查询 Azure DNS 专用区域,反之亦然。 有关详细信息,包括权益、功能和区域可用性,请参阅什么是 Azure DNS 专用解析程序

下图总结了本文中使用的设置:

显示专用解析程序组件的概念图。

先决条件

如果还没有 Azure 订阅,可以在开始前创建一个免费帐户

本文假定你已安装 Az Azure PowerShell 模块

安装 Az.DnsResolver PowerShell 模块

注意

如果以前在个人预览期间安装了 Az.DnsResolver 模块进行评估,则可以注销并删除已创建的本地 PSRepository。 然后,使用本文中提供的步骤安装最新版本的 Az.DnsResolver 模块。

安装 Az.DnsResolver 模块。

Install-Module Az.DnsResolver

确认已安装了 Az.DnsResolver 模块。 此模块的当前版本为 0.2.1。

Get-InstalledModule -Name Az.DnsResolver

在 Azure PowerShell 中设置订阅上下文

将 PowerShell 连接到 Azure 云。

Connect-AzAccount -Environment AzureCloud

如果存在多个订阅,将使用第一个订阅 ID。 若要指定其他订阅 ID,请使用以下命令。

Select-AzSubscription -SubscriptionObject (Get-AzSubscription -SubscriptionId <your-sub-id>)

为你的帐户注册 Microsoft.Network 提供程序命名空间。

必须先注册 Microsoft.Network 命名空间,然后才能将 Microsoft.Network 服务用于 Azure 订阅:

使用以下命令注册 Microsoft.Network 命名空间。

Register-AzResourceProvider -ProviderNamespace Microsoft.Network

创建一个 DNS 解析程序实例

重要

验证或确认已成功创建资源的步骤不是可选的。 请勿跳过这些步骤。 这些步骤将填充可在后续过程中使用的变量。

创建一个资源组来托管资源。 资源组必须位于受支持的区域中。 在此示例中,该位置为 westcentralus。

New-AzResourceGroup -Name myresourcegroup -Location westcentralus

在创建的资源组中创建虚拟网络。

New-AzVirtualNetwork -Name myvnet -ResourceGroupName myresourcegroup -Location westcentralus -AddressPrefix "10.0.0.0/8"

在创建的虚拟网络中创建 DNS 解析程序。

New-AzDnsResolver -Name mydnsresolver -ResourceGroupName myresourcegroup -Location westcentralus -VirtualNetworkId "/subscriptions/<your subs id>/resourceGroups/myresourcegroup/providers/Microsoft.Network/virtualNetworks/myvnet"

验证 DNS 解析程序是否已成功创建以及状态是否为已连接(可选)。 在输出中,dnsResolverState已连接

$dnsResolver = Get-AzDnsResolver -Name mydnsresolver -ResourceGroupName myresourcegroup
$dnsResolver.ToJsonString()

创建 DNS 解析程序入站终结点

在虚拟网络中创建子网

从之前分配的 IP 地址空间在虚拟网络 (Microsoft.Network/virtualNetworks/subnets) 中创建一个子网。 子网的大小必须至少为 /28(16 个 IP 地址)。

$virtualNetwork = Get-AzVirtualNetwork -Name myvnet -ResourceGroupName myresourcegroup
Add-AzVirtualNetworkSubnetConfig -Name snet-inbound -VirtualNetwork $virtualNetwork -AddressPrefix "10.0.0.0/28"
$virtualNetwork | Set-AzVirtualNetwork

创建入站终结点

创建入站终结点,以使用专用虚拟网络地址空间中的某个 IP 地址从本地或其他专用位置实现名称解析。

提示

使用 PowerShell,可以将入站终结点 IP 地址指定为动态或静态地址。
如果将终结点 IP 地址指定为动态地址,则除非删除并重新预配终结点,否则该地址不会更改。 通常,在重新预配期间会再次分配相同的 IP 地址。
如果终结点 IP 地址是静态地址,则可以在重新预配终结点时指定并重复使用该地址。 所选的 IP 地址不能是子网中的保留 IP 地址

以下命令将预配动态 IP 地址:

$ipconfig = New-AzDnsResolverIPConfigurationObject -PrivateIPAllocationMethod Dynamic -SubnetId /subscriptions/<your sub id>/resourceGroups/myresourcegroup/providers/Microsoft.Network/virtualNetworks/myvnet/subnets/snet-inbound
New-AzDnsResolverInboundEndpoint -DnsResolverName mydnsresolver -Name myinboundendpoint -ResourceGroupName myresourcegroup -Location westcentralus -IpConfiguration $ipconfig

使用以下命令指定静态 IP 地址。 不要同时使用动态和静态命令集。

必须在之前创建的子网中指定 IP 地址。 所选的 IP 地址不能是子网中的保留 IP 地址

以下命令可预配静态 IP 地址:

$ipconfig = New-AzDnsResolverIPConfigurationObject -PrivateIPAddress 10.0.0.4 -PrivateIPAllocationMethod Static -SubnetId /subscriptions/<your sub id>/resourceGroups/myresourcegroup/providers/Microsoft.Network/virtualNetworks/myvnet/subnets/snet-inbound
New-AzDnsResolverInboundEndpoint -DnsResolverName mydnsresolver -Name myinboundendpoint -ResourceGroupName myresourcegroup -Location westcentralus -IpConfiguration $ipconfig

确认入站终结点

确认入站终结点已创建并已在分配的子网中分配有一个 IP 地址。

$inboundEndpoint = Get-AzDnsResolverInboundEndpoint -Name myinboundendpoint -DnsResolverName mydnsresolver -ResourceGroupName myresourcegroup
$inboundEndpoint.ToJsonString()

创建 DNS 解析程序出站终结点

在虚拟网络中创建子网

从之前分配的 IP 地址空间在虚拟网络 (Microsoft.Network/virtualNetworks/subnets) 中创建一个子网(不同于入站子网 snet-inbound)。 出站子网的大小也必须至少为 /28(16 个 IP 地址)。

$virtualNetwork = Get-AzVirtualNetwork -Name myvnet -ResourceGroupName myresourcegroup
Add-AzVirtualNetworkSubnetConfig -Name snet-outbound -VirtualNetwork $virtualNetwork -AddressPrefix "10.1.1.0/28"
$virtualNetwork | Set-AzVirtualNetwork

创建出站终结点

出站终结点可以实现从 Azure 到外部 DNS 服务器的条件转发名称解析。

New-AzDnsResolverOutboundEndpoint -DnsResolverName mydnsresolver -Name myoutboundendpoint -ResourceGroupName myresourcegroup -Location westcentralus -SubnetId /subscriptions/<your sub id>/resourceGroups/myresourcegroup/providers/Microsoft.Network/virtualNetworks/myvnet/subnets/snet-outbound

确认出站终结点

确认出站终结点已创建并已在分配的子网中分配有一个 IP 地址。

$outboundEndpoint = Get-AzDnsResolverOutboundEndpoint -Name myoutboundendpoint -DnsResolverName mydnsresolver -ResourceGroupName myresourcegroup
$outboundEndpoint.ToJsonString()

创建 DNS 解析程序转发规则集

为创建的出站终结点创建 DNS 转发规则集。

New-AzDnsForwardingRuleset -Name myruleset -ResourceGroupName myresourcegroup -DnsResolverOutboundEndpoint $outboundendpoint -Location westcentralus

确认 DNS 转发规则集

确认已创建转发规则集。

$dnsForwardingRuleset = Get-AzDnsForwardingRuleset -Name myruleset -ResourceGroupName myresourcegroup
$dnsForwardingRuleset.ToJsonString()

虚拟网络链接可以为使用 DNS 转发规则集链接到出站终结点的虚拟网络实现名称解析。

$vnet = Get-AzVirtualNetwork -Name myvnet -ResourceGroupName myresourcegroup 
$vnetlink = New-AzDnsForwardingRulesetVirtualNetworkLink -DnsForwardingRulesetName $dnsForwardingRuleset.Name -ResourceGroupName myresourcegroup -VirtualNetworkLinkName "vnetlink" -VirtualNetworkId $vnet.Id -SubscriptionId <your sub id>

确认虚拟网络链接已创建。

$virtualNetworkLink = Get-AzDnsForwardingRulesetVirtualNetworkLink -DnsForwardingRulesetName $dnsForwardingRuleset.Name -ResourceGroupName myresourcegroup 
$virtualNetworkLink.ToJsonString()

创建第二个虚拟网络以模拟本地或其他环境。

$vnet2 = New-AzVirtualNetwork -Name myvnet2 -ResourceGroupName myresourcegroup -Location westcentralus -AddressPrefix "12.0.0.0/8"
$vnetlink2 = New-AzDnsForwardingRulesetVirtualNetworkLink -DnsForwardingRulesetName $dnsForwardingRuleset.Name -ResourceGroupName myresourcegroup -VirtualNetworkLinkName "vnetlink2" -VirtualNetworkId $vnet2.Id -SubscriptionId <your sub id>

确认第二个虚拟网络

确认第二个虚拟网络已创建。

$virtualNetworkLink2 = Get-AzDnsForwardingRulesetVirtualNetworkLink -DnsForwardingRulesetName $dnsForwardingRuleset.Name -ResourceGroupName myresourcegroup 
$virtualNetworkLink2.ToJsonString()

创建转发规则

为规则集创建一个转发原则,可转发到一个或多个目标 DNS 服务器。 必须使用尾随点指定一个完全限定的域名 (FQDN)。 New-AzDnsResolverTargetDnsServerObject cmdlet 将默认端口设置为 53,但你也可以指定一个独一无二的端口。

$targetDNS1 = New-AzDnsResolverTargetDnsServerObject -IPAddress 192.168.1.2 -Port 53 
$targetDNS2 = New-AzDnsResolverTargetDnsServerObject -IPAddress 192.168.1.3 -Port 53
$targetDNS3 = New-AzDnsResolverTargetDnsServerObject -IPAddress 10.0.0.4 -Port 53
$targetDNS4 = New-AzDnsResolverTargetDnsServerObject -IPAddress 10.5.5.5 -Port 53
$forwardingrule = New-AzDnsForwardingRulesetForwardingRule -ResourceGroupName myresourcegroup -DnsForwardingRulesetName myruleset -Name "Internal" -DomainName "internal.contoso.com." -ForwardingRuleState "Enabled" -TargetDnsServer @($targetDNS1,$targetDNS2)
$forwardingrule = New-AzDnsForwardingRulesetForwardingRule -ResourceGroupName myresourcegroup -DnsForwardingRulesetName myruleset -Name "AzurePrivate" -DomainName "azure.contoso.com" -ForwardingRuleState "Enabled" -TargetDnsServer $targetDNS3
$forwardingrule = New-AzDnsForwardingRulesetForwardingRule -ResourceGroupName myresourcegroup -DnsForwardingRulesetName myruleset -Name "Wildcard" -DomainName "." -ForwardingRuleState "Enabled" -TargetDnsServer $targetDNS4

在此示例中:

  • 10.0.0.4 是解析程序的入站终结点。
  • 192.168.1.2 和 192.168.1.3 是本地 DNS 服务器。
  • 10.5.5.5 是保护性 DNS 服务。

重要

本快速入门中显示的规则是可用于特定场景的规则示例。 本文描述的任何转发规则都不是必需的。 请小心测试转发规则并确保这些规则不会导致 DNS 解析问题。

如果在规则集中包括通配符规则,请确保目标 DNS 服务可以解析公共 DNS 名称。 某些 Azure 服务依赖于公共名称解析。

测试专用解析程序

现在应该可以将 DNS 流量发送到 DNS 解析程序,并根据转发规则集解析记录,包括:

  • 链接到部署解析程序的虚拟网络的 Azure DNS 专用区域。
  • 公共 Internet DNS 命名空间中的 DNS 区域。
  • 本地托管的专用 DNS 区域。

删除 DNS 解析程序

若要删除 DNS 解析程序,必须先删除解析程序中创建的资源入站终结点。 删除入站终结点后,可以删除父 DNS 解析程序。

删除入站终结点

Remove-AzDnsResolverInboundEndpoint -Name myinboundendpoint -DnsResolverName mydnsresolver -ResourceGroupName myresourcegroup 
Remove-AzDnsForwardingRulesetVirtualNetworkLink -DnsForwardingRulesetName $dnsForwardingRuleset.Name -Name vnetlink -ResourceGroupName myresourcegroup

删除 DNS 转发规则集

Remove-AzDnsForwardingRuleset -Name $dnsForwardingRuleset.Name -ResourceGroupName myresourcegroup

删除出站终结点

Remove-AzDnsResolverOutboundEndpoint -DnsResolverName mydnsresolver -ResourceGroupName myresourcegroup -Name myoutboundendpoint

删除 DNS 解析程序

Remove-AzDnsResolver -Name mydnsresolver -ResourceGroupName myresourcegroup

后续步骤