DNS 解析实例

网络服务提供了几种配置实例名称解析(DNS)的方法。大多数部署应该实施方案 1 或 2a。方案 2b 需要安全考虑,以防止将内部 DNS 信息泄露给实例。

注意

所有这些设置都需要配置的 DNS 解析器能够从相关虚拟网络访问。因此,除非解析器位于虚拟网络内部,否则意味着需要将路由器附加到该网络,并配置外部网关。

方案 1:每个虚拟网络使用唯一的 DNS 解析器

在这种情况下,DHCP 代理通过 DHCP 在每个虚拟网络上向实例提供一个或多个唯一的 DNS 解析器。您可以在创建或更新子网时配置 DNS 解析器。要配置多个 DNS 解析器,请多次重复该选项。

  • 在创建子网时配置 DNS 解析器。

    $ openstack subnet create --dns-nameserver DNS_RESOLVER
    

    DNS_RESOLVER 替换为可从虚拟网络访问的 DNS 解析器的 IP 地址。如果您想指定多个 IP 地址,请重复该选项。例如

    $ openstack subnet create --dns-nameserver 203.0.113.8 --dns-nameserver 198.51.100.53
    

    注意

    此命令需要超出本文档范围的额外选项。

  • 将 DNS 解析器添加到现有子网。

    $ openstack subnet set --dns-nameserver DNS_RESOLVER SUBNET_ID_OR_NAME
    

    DNS_RESOLVER 替换为可从虚拟网络访问的 DNS 解析器的 IP 地址,并将 SUBNET_ID_OR_NAME 替换为子网的 UUID 或名称。例如,使用 selfservice 子网

    $ openstack subnet set --dns-nameserver 203.0.113.9 selfservice
    
  • 从子网中删除所有 DNS 解析器。

    $ openstack subnet set --no-dns-nameservers SUBNET_ID_OR_NAME
    

    SUBNET_ID_OR_NAME 替换为子网的 UUID 或名称。例如,使用 selfservice 子网

    $ openstack subnet set --no-dns-nameservers selfservice
    

    注意

    您可以将此选项与上一个选项结合使用,以用新的地址替换所有现有的 DNS 解析器地址。

您还可以将 DNS 解析器地址设置为 0.0.0.0 用于 IPv4 子网,或 :: 用于 IPv6 子网,这些是特殊值,指示 DHCP 代理不应在子网上通告任何 DNS 解析器。

注意

当以这种方式为子网显式指定 DNS 解析器时,该设置将优先于方案 2 中提供的选项。

方案 2:DHCP 代理转发来自实例的 DNS 查询

在这种情况下,DHCP 代理通过 DHCP 在该子网上将所有 DHCP 代理的 IP 地址列表作为 DNS 解析器提供给实例。

然后,DHCP 代理运行一个伪装转发 DNS 解析器,并提供两种可能的选项来确定将 DNS 查询发送到哪里。

注意

DHCP 代理将直接回答在虚拟网络内运行的实例的名称和地址查询,而不是转发它们。

方案 2a:查询转发到显式配置的 DNS 解析器集

dhcp_agent.ini 文件中,配置一个或多个 DNS 解析器。要配置多个 DNS 解析器,请在值之间使用逗号。

[DEFAULT]
dnsmasq_dns_servers = DNS_RESOLVER

DNS_RESOLVER 替换为可从所有虚拟网络访问的 DNS 解析器 IP 地址列表。例如

[DEFAULT]
dnsmasq_dns_servers = 203.0.113.8, 198.51.100.53

注意

您必须为所有符合条件的 DHCP 代理配置此选项,并重新启动它们以激活这些值。

方案 2b:查询转发到主机上配置的 DNS 解析器

在这种情况下,DHCP 代理将来自实例的查询转发到运行 DHCP 代理的主机上的 resolv.conf 文件中配置的 DNS 解析器。这要求这些解析器可从所有虚拟网络访问。

dhcp_agent.ini 文件中,启用使用主机上配置的 DNS 解析器。

[DEFAULT]
dnsmasq_local_resolv = True

注意

您必须为所有符合条件的 DHCP 代理配置此选项,并重新启动它们以激活此设置。