在 Azure 虚拟网络中设置 DNS

7 domain-name-system azure virtual-network

我有一些云服务和一个在 Azure 中运行 Redis 的 VM。据我所知,我需要创建一个虚拟网络,以便云服务可以与 VM 上的 Redis 通信。那很简单。现在我想做的是设置 DNS,这样我就不必到处指定 IP 地址。

我发现的所有文章都涉及集成现场 DNS 服务器,但我没有。无论如何要使用godaddy或dnsimple吗?在当前虚拟机上安装一个简单的 DNS 服务怎么样?

我想我的问题可以概括为我需要做什么才能使我的云服务可以通过 DNS 名称与我的 VN 通信?

Reu*_*ond 6

我遇到了同样的问题,我相信我已经提出了一个合理的解决方案,它不涉及任何额外的机器并且工作量很小。

简而言之,您将后端和前端放在相同的虚拟网络和子网中,以便为它们提供相同的 DNS 服务器。然后在前端服务上配置 DNS 后缀搜索列表,以便它们在执行名称解析时使用后端的 DNS 后缀。

脚步:

  1. 登录到您的后端 VM 之一并执行ipconfig.
  2. 从输出中,得到值 Connection-specific DNS Suffix

    ipconfig 的输出

  3. 将 的值设置为$dnsSuffix以下脚本中步骤 2 中的值。

    $dnsSuffix = 'xxxxxx.yyyyy.uswest.internal.cloudapp.net';
    
    $nics = Get-WmiObject `
      -Class win32_networkadapterconfiguration `
      -Filter 'IPEnabled = true';
    $nics | % {
      $nicSuffixes = $_.DNSDomainSuffixSearchOrder;
      if ($nicSuffixes -notcontains $dnsSuffix) {
        $_.DNSDomainSuffixSearchOrder = $dnsSuffix + $_.DNSDomainSuffixSearchOrder;
      }
    };
    
    Invoke-WmiMethod `
        -Class win32_networkadapterconfiguration `
        -Name setDNSSuffixSearchOrder `
        -ArgumentList @(@($dnsSuffix)),$null;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将该脚本命名为 Set-DnsSuffixSearchList.ps1 并将其包含在您的项目中,将文件的属性设置为“始终复制”,如下所示:

    设置 DnsSuffixSearchList.ps1 属性

  5. 创建一个名为的文件startup.cmd,其中包含以下内容并设置“始终复制”属性:

    powershell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
    
    # Set the DNS SearchList so that backend hosts are resolvable using their shortened names.
    powershell .\Set-DnsSuffixSearchList.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
    
    Run Code Online (Sandbox Code Playgroud)
  6. 通过ServiceDefinition.csdefWebRole节点下编辑和添加以下 XML,将启动任务添加到 Azure 云服务项目:

    <Startup>
      <Task
        commandLine="startup.cmd"
        executionContext="elevated"
        taskType="background">
      </Task>
    </Startup>
    
    Run Code Online (Sandbox Code Playgroud)
  7. 大功告成,假设您已经指定您的站点和后端应该在同一个子网中。如果没有,请将其添加到节点ServiceConfiguration.Cloud.cscfg内的文件中ServiceConfiguration

      <NetworkConfiguration>
        <VirtualNetworkSite name="yourVirtualNetwork" />
        <AddressAssignments>
          <InstanceAddress roleName="yourCloudServiceName">
            <Subnets>
              <Subnet name="yourSubnetName" />
            </Subnets>
          </InstanceAddress>
        </AddressAssignments>
      </NetworkConfiguration>
    
    Run Code Online (Sandbox Code Playgroud)

希望能帮助其他遇到同样问题的人!


小智 5

Azure 中有一些 VN 的“隐藏”功能可以帮助您。首先,是的,你是对的。如果您创建虚拟网络,除非您提供自己的 DNS 服务器并将其设置为允许动态更新,否则名称解析将不起作用。您不能使用公共 DNS 服务为 Windows Azure 虚拟网络提供 DNS 名称解析。

所以这是你的解决方案。您必须启动“清理”,因为一旦 VNet 在其中运行虚拟机,您就无法更改 DNS 服务器 IP 地址。

  • 照常创建 VNet(及其子网)
  • 提供 DNS 服务器地址。将此地址设置为 xxx.xxx.xxx.4(4 将始终是给定子网中分配的第一个 IP 地址!)!
  • 在那个干净的 VNet 上,使用 Windows Server 创建一个新的 VM。该 VM 将获得 xxx.xxx.xxx.4 IP 地址
  • 在这台机器上安装和配置 DNS 服务器角色
  • 请勿设置本机的静态 IP 地址!
  • 像往常一样创建其余的 VM

需要注意的事项:

  • 切勿将静态 IP 地址分配给 Windows Azure 中的任何 VM。他们必须有 DHCP 分配的 IP 地址
  • 小心首先创建 DNS 机器,以便它获得 .4 IP 地址
  • 只要您不删除它,您的 DNS 虚拟机就会保留其 IP 地址 (.4)。

这种架构已被证明是有效的,并且可以在 Windows Azure IaaS(又名虚拟机)中使用