第 22 章 配置 DNS 服务器顺序

大多数应用程序使用 glibc 库的 getaddrinfo() 函数来解决 DNS 请求。默认情况下,glibc 将所有 DNS 请求发送到 /etc/resolv.conf 文件中指定的第一个 DNS 服务器。如果这个服务器没有回复,RHEL 会使用这个文件中的下一个服务器。使用 NetworkManager 可让您影响 etc/resolv.conf 中的 DNS 服务器顺序。

22.1. NetworkManager 如何在 /etc/resolv.conf 中对 DNS 服务器进行排序

NetworkManager 根据以下规则对 /etc/resolv.conf 文件中的 DNS 服务器进行排序:

  • 如果只有一个连接配置集,NetworkManager 将使用那个连接中指定的 IPv4 和 IPv6 DNS 服务器顺序。
  • 如果激活多个连接配置集,NetworkManager 会根据 DNS 优先级值对 DNS 服务器进行排序。如果您设置了 DNS 优先级,NetworkManager 的行为取决于 dns 参数中设置的值。您可以在 /etc/NetworkManager/NetworkManager.conf 文件的 [main] 部分中设置此参数:

    • dns=default 或者如果 dns 参数没有设置:

      NetworkManager 根据每个连接中的 ipv4.dns-priorityipv6.dns-priority 参数对不同的连接的 DNS 服务器进行排序。

      如果没有设置值,或者您将 ipv4.dns-priorityipv6.dns-priority 设为 0 ,则 NetworkManager 将使用全局默认值。请参阅 DNS 优先级参数的默认值

    • dns=dnsmasqdns=systemd-resolved

      当您使用这些设置中的一个时,NetworkManager 将 dnsmasq127.0.0.1127.0.0.53 设为 /etc/resolv.conf 文件中的 nameserver 条目。

      dnsmasqsystemd-resolved 服务将对 NetworkManager 连接中设置的搜索域的查询转发到该连接中指定的 DNS 服务器,并将对其他域的查询转发到带有默认路由的连接。当多个连接有相同的搜索域集时,dnsmasqsystemd-resolved 将这个域的查询转发到在具有最低优先级值的连接中设置的 DNS 服务器。

DNS 优先级参数的默认值

NetworkManager 对连接使用以下默认值:

  • 50 用于 VPN 连接
  • 100 用于其他连接

有效的 DNS 优先级值:

您可以将全局默认值和特定于连接的 ipv4.dns-priorityipv6.dns-priority 参数设为 -21474836472147483647 之间的值。

  • 低的值具有更高的优先级。
  • 负值具有一个特殊的效果,它会排除其他带有更大值的配置。例如,如果至少有一个连接具有负优先级值,NetworkManager 只使用在连接配置集中指定的具有最低优先级的 DNS 服务器。
  • 如果多个连接具有相同的 DNS 优先级,NetworkManager 会按照以下顺序排列 DNS 的优先顺序:

    1. VPN 连接
    2. 带有活跃的默认路由的连接。活跃的默认路由是具有最低指标的默认路由。

其他资源