SDN 的内部 DNS 服务 (iDNS)

适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016,Azure Stack HCI 版本 21H2 和 20H2

如果你为云服务提供商 (CSP) 或计划在 Windows Server 中部署软件定义网络 (SDN) 的企业工作,则可以使用与 SDN 集成的内部 DNS (iDNS) 为托管租户工作负载提供 DNS 服务。

托管的虚拟机 (VM) 和应用程序需要 DNS 在它们自己的网络内进行通信,并与 Internet 上的外部资源通信。 使用 iDNS,可以为租户提供 DNS 名称解析服务,用于其隔离的本地名称空间和 Internet 资源。

由于除了通过 iDNS 代理,不能从租户虚拟网络访问 iDNS 服务,因此服务器不容易受到租户网络上的恶意活动的攻击。

关键功能

以下是 iDNS 的关键功能。

  • 为租户工作负载提供共享 DNS 名称解析服务
  • 适用于租户名称空间内的名称解析和 DNS 注册的权威 DNS 服务
  • 递归 DNS 服务,用于解析租户 VM 中的 Internet 名称。
  • 如果需要,可以配置构造和租户名称的同时托管
  • 经济高效的 DNS 解决方案 - 租户无需部署自己的 DNS 基础结构
  • 使用 Active Directory 集成实现高可用性,这是必需的。

除了这些功能之外,如果你针对将 AD 集成 DNS 服务器对 Internet 保持开放有顾虑,则可以在外围网络中的另一个递归解析程序后面部署 iDNS 服务器。

由于 iDNS 是用于所有 DNS 查询的集中式服务器,因此 CSP 或企业还可以在中心位置实现租户 DNS 防火墙、应用筛选器、检测恶意活动以及审核事务

iDNS 基础结构

iDNS 基础结构包括 iDNS 服务器和 iDNS 代理。

iDNS 服务器

iDNS 包括一组托管特定于租户的数据(例如 VM DNS 资源记录)的 DNS 服务器。

iDNS 服务器是其内部 DNS 区域的权威服务器,并且还在租户 VM 尝试连接到外部资源时,充当公共名称的解析器。

虚拟网络上所有 VM 主机名都作为 DNS 资源记录存储在同一区域下。 例如,如果为名为 contoso.local 的区域部署 iDNS,则该网络上 VM 的 DNS 资源记录将存储在 contoso.local 区域中。

租户 VM 的完全限定域名 (FQDN) 由计算机名以及虚拟网络的 DNS 后缀字符串(采用 GUID 格式)组成。 例如,如果有一个名为 TENANT1 的租户 VM 位于虚拟网络 contoso.local,则 VM 的 FQDN 为 TENANT1.vn-guid.contoso.local,其中 vn-guid 是虚拟网络的 DNS 后缀字符串

注意

如果你是结构管理员,则可以将 CSP 或企业 DNS 基础结构用作 iDNS 服务器,而不是专门部署新的 DNS 服务器作为 iDNS服务器。 无论是为 iDNS 部署新服务器还是使用现有基础结构,iDNS 都依赖于 Active Directory 来提供高可用性。 因此,iDNS 服务器必须与 Active Directory 集成。

iDNS 代理

iDNS 代理是在每台主机上运行的 Windows 服务,它将租户虚拟网络 DNS 流量转发到 iDNS 服务器。

下图演示了从租户虚拟网络通过 iDNS 代理到 iDNS 服务器和 Internet 的 DNS 流量路径。

iDNS Infrastructure

如何部署 iDNS

使用脚本在 Windows Server 2016 中部署 SDN 时,iDNS 会自动包含在部署中。

有关详细信息,请参阅以下主题。

了解 iDNS 部署步骤

可以使用本部分了解在使用脚本部署 SDN 时如何安装和配置 iDNS。

下面是部署 iDNS 所需步骤的总结。

注意

如果已使用脚本部署 SDN,则无需执行上述任何步骤。 提供的这些步骤仅用于参考和故障排除目的。

步骤 1:部署 DNS

可以使用以下示例 Windows PowerShell 命令部署 DNS 服务器。

Install-WindowsFeature DNS -IncludeManagementTools

步骤 2:在网络控制器中配置 iDNS 信息

此脚本段是管理员对网络控制器进行的 REST 调用,告知其 iDNS 区域配置 - 例如 iDNSServer 的 IP 地址和用于托管 iDNS 名称的区域。

Url: https://<url>/networking/v1/iDnsServer/configuration
Method: PUT
{
      "properties": {
        "connections": [
          {
            "managementAddresses": [
              "10.0.0.9"
            ],
            "credential": {
              "resourceRef": "/credentials/iDnsServer-Credentials"
            },
            "credentialType": "usernamePassword"
          }
        ],
        "zone": "contoso.local"
      }
    }

注意

摘自 SDNExpress.ps1 中的“配置 ConfigureIDns”章节。 有关详细信息,请参阅使用脚本部署软件定义的网络基础结构

步骤 3:配置 iDNS 代理服务

iDNS 代理服务在每个 Hyper-V 主机上运行,提供租户虚拟网络与 iDNS 服务器所在的物理网络之间的桥梁。 必须在每个 Hyper-V 主机上创建以下注册表项。

DNS 端口:修复了端口 53

  • Registry Key = HKLM\SYSTEM\CurrentControlSet\Services\NcHostAgent\Parameters\Plugins\Vnet\InfraServices\DnsProxyService"
  • ValueName = "Port"
  • ValueData = 53
  • ValueType = "Dword"

DNS 代理端口:修复了端口 53

  • Registry Key = HKLM\SYSTEM\CurrentControlSet\Services\NcHostAgent\Parameters\Plugins\Vnet\InfraServices\DnsProxyService"
  • ValueName = "ProxyPort"
  • ValueData = 53
  • ValueType = "Dword"

DNS IP:修复了在网络接口上配置的 IP 地址,以防租户选择使用 iDNS 服务

  • Registry Key = HKLM\SYSTEM\CurrentControlSet\Services\NcHostAgent\Parameters\Plugins\Vnet\InfraServices\DnsProxyService"
  • ValueName = "IP"
  • ValueData = "169.254.169.254"
  • ValueType = "String"

Mac 地址:DNS 服务器的媒体访问控制地址

  • Registry Key = HKLM\SYSTEM\CurrentControlSet\Services\NcHostAgent\Parameters\Plugins\Vnet\InfraServices\DnsProxyService
  • ValueName = "MAC"
  • ValueData = "aa-bb-cc-aa-bb-cc"
  • ValueType = "String"

IDNS 服务器地址:以逗号分隔的 iDNS 服务器列表。

  • 注册表项:HKLM\SYSTEM\CurrentControlSet\Services\DNSProxy\Parameters
  • ValueName = "Forwarders"
  • ValueData = "10.0.0.9"
  • ValueType = "String"

注意

摘自 SDNExpress.ps1 中的“配置 ConfigureIDnsProxy”章节。 有关详细信息,请参阅使用脚本部署软件定义的网络基础结构

步骤 4:重启网络控制器主机代理服务

可以使用以下 Windows PowerShell 命令重启网络控制器主机代理服务。

Restart-Service nchostagent -Force

有关详细信息,请参阅重启服务

为 DNS 代理服务启用防火墙规则

可以使用以下 Windows PowerShell 命令创建防火墙规则,允许例外情况下代理与虚拟机和 iDNS 服务器通信。

Enable-NetFirewallRule -DisplayGroup 'DNS Proxy Firewall'

有关详细信息,请参阅 Enable-NetFirewallRule

验证 iDNS 服务

若要验证 iDNS 服务,必须部署示例租户工作负载。

有关详细信息,请参阅创建 VM 并连接到租户虚拟网络或 VLAN

如果希望租户 VM 使用 iDNS 服务,则必须将 VM 网络接口 DNS 服务器配置留空,并允许接口使用 DHCP。

启动具有此类网络接口的 VM 后,它会自动收到允许 VM 使用 iDNS 的配置,VM 会立即开始使用 iDNS 服务执行名称解析。

如果通过将网络接口 DNS 服务器和备用 DNS 服务器信息留空来配置租户 VM 以使用 iDNS 服务,则网络控制器会向 VM 提供 IP 地址,并在 iDNS 服务器中代表 VM 执行 DNS 名称注册。

网络控制器还会通知 iDNS 代理有关 VM 以及执行 VM 名称解析所需的详细信息。

当 VM 启动 DNS 查询时,代理充当从虚拟网络到 iDNS 服务的查询的转发器。

DNS 代理还确保租户 VM 查询是隔离的。 如果 iDNS 服务器是查询的权威服务器,则 iDNS 服务器使用权威响应进行响应。 如果 iDNS 服务器对查询不具有权威性,它将执行 DNS 递归来解析 Internet 名称。

注意

此信息包含在 SDNExpressTenant.ps1 中的“配置 AttachToVirtualNetwork”部分。 有关详细信息,请参阅使用脚本部署软件定义的网络基础结构