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

快速入门:使用 Azure PowerShell 创建 Azure 专用 DNS 区域

本文将逐步引导你完成使用 PowerShell 创建第一个专用 DNS 区域和记录的步骤。

注意

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

DNS 区域用来托管某个特定域的 DNS 记录。 若要开始在 Azure DNS 中托管域,需要为该域名创建 DNS 区域。 随后会在此 DNS 区域内为每个 DNS 记录创建域。 若要向虚拟网络发布专用 DNS 区域,请指定一个列表,其中包含允许在区域中解析记录的虚拟网络。 这些虚拟网络称为链接的虚拟网络。 启用自动注册后,Azure DNS 还会在创建虚拟机、更改其 IP 地址或删除虚拟机时更新区域记录。

快速入门设置的汇总图。

先决条件

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

如果你愿意,可以使用 Azure CLI 完成本快速入门中的步骤。

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 显示 Azure Cloud Shell 的“试用”示例的屏幕截图。
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 用于启动 Azure Cloud Shell 的按钮。
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 显示 Azure 门户中的 Cloud Shell 按钮的屏幕截图

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“Enter”运行代码或命令。

创建资源组

首先,创建一个资源组,使之包含 DNS 区域:

New-AzResourceGroup -name MyAzureResourceGroup -location "eastus"

创建专用 DNS 区域

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

以下示例创建一个名为“myAzureVNet”的虚拟网络。 然后,它在 MyAzureResourceGroup 资源组中创建一个名为 private.contoso.com 的 DNS 区域,将该 DNS 区域链接到 MyAzureVnet 虚拟网络,并启用自动注册。

Install-Module -Name Az.PrivateDns -force

$backendSubnet = New-AzVirtualNetworkSubnetConfig -Name backendSubnet -AddressPrefix "10.2.0.0/24"
$vnet = New-AzVirtualNetwork `
  -ResourceGroupName MyAzureResourceGroup `
  -Location eastus `
  -Name myAzureVNet `
  -AddressPrefix 10.2.0.0/16 `
  -Subnet $backendSubnet

$zone = New-AzPrivateDnsZone -Name private.contoso.com -ResourceGroupName MyAzureResourceGroup

$link = New-AzPrivateDnsVirtualNetworkLink -ZoneName private.contoso.com `
  -ResourceGroupName MyAzureResourceGroup -Name "mylink" `
  -VirtualNetworkId $vnet.id -EnableRegistration

如果要创建仅用于名称解析的区域(不自动注册主机名),则可以省略 -EnableRegistration 参数。

列出 Azure DNS 专用区域

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

$zones = Get-AzPrivateDnsZone -ResourceGroupName MyAzureResourceGroup
$zones

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

$zones = Get-AzPrivateDnsZone
$zones

创建测试虚拟机

现在,创建两台虚拟机,以便可以测试专用 DNS 区域:

New-AzVm `
    -ResourceGroupName "myAzureResourceGroup" `
    -Name "myVM01" `
    -Location "East US" `
    -subnetname backendSubnet `
    -VirtualNetworkName "myAzureVnet" `
    -addressprefix 10.2.0.0/24 `
    -OpenPorts 3389

New-AzVm `
    -ResourceGroupName "myAzureResourceGroup" `
    -Name "myVM02" `
    -Location "East US" `
    -subnetname backendSubnet `
    -VirtualNetworkName "myAzureVnet" `
    -addressprefix 10.2.0.0/24 `
    -OpenPorts 3389

创建虚拟机需要几分钟才能完成。

创建额外的 DNS 记录

可以使用 New-AzPrivateDnsRecordSet cmdlet 创建记录集。 下面的示例在 DNS 区域 private.contoso.com 的资源组 MyAzureResourceGroup 中创建相对名称为 db 的一个记录。 记录集的完全限定名称为 db.private.contoso.com。 记录类型为“A”,IP 地址为“10.2.0.4”,TTL 为 3600 秒。

New-AzPrivateDnsRecordSet -Name db -RecordType A -ZoneName private.contoso.com `
   -ResourceGroupName MyAzureResourceGroup -Ttl 3600 `
   -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address "10.2.0.4")

查看 DNS 记录

若要列出区域中的 DNS 记录,请运行:

Get-AzPrivateDnsRecordSet -ZoneName private.contoso.com -ResourceGroupName MyAzureResourceGroup

测试专用区域

现在,可以测试 private.contoso.com 专用区域的名称解析。

将 VM 配置为允许入站 ICMP

可以使用 ping 命令来测试名称解析。 因此,在两台虚拟机上都将防火墙配置为允许入站 ICMP 数据包。

  1. 使用创建 VM 时使用的用户名和密码连接到 myVM01。

  2. 使用管理员权限打开 Windows PowerShell 窗口。

  3. 运行以下命令:

    New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4
    

针对 myVM02 重复上述操作。

按名称对 VM 执行 ping 命令

  1. 从 myVM02 Windows PowerShell 命令提示符下,使用自动注册的主机名对 myVM01 执行 ping 命令:

    ping myVM01.private.contoso.com
    

    应会看到类似于如下所示的输出:

    PS C:\> ping myvm01.private.contoso.com
    
    Pinging myvm01.private.contoso.com [10.2.0.4] with 32 bytes of data:
    Reply from 10.2.0.4: bytes=32 time<1ms TTL=128
    Reply from 10.2.0.4: bytes=32 time=1ms TTL=128
    Reply from 10.2.0.4: bytes=32 time<1ms TTL=128
    Reply from 10.2.0.4: bytes=32 time<1ms TTL=128
    
    Ping statistics for 10.2.0.4:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 1ms, Average = 0ms
    PS C:\>
    
  2. 现在,对之前创建的 db 名称执行 ping 命令:

    ping db.private.contoso.com
    

    应会看到类似于如下所示的输出:

    PS C:\> ping db.private.contoso.com
    
    Pinging db.private.contoso.com [10.2.0.4] with 32 bytes of data:
    Reply from 10.2.0.4: bytes=32 time<1ms TTL=128
    Reply from 10.2.0.4: bytes=32 time<1ms TTL=128
    Reply from 10.2.0.4: bytes=32 time<1ms TTL=128
    Reply from 10.2.0.4: bytes=32 time<1ms TTL=128
    
    Ping statistics for 10.2.0.4:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milliseconds:
        Minimum = 0ms, Maximum = 0ms, Average = 0ms
    PS C:\>
    

清理资源

不再需要时,可以通过删除 MyAzureResourceGroup 资源组来删除在本文中创建的资源。

Remove-AzResourceGroup -Name MyAzureResourceGroup

后续步骤