Red Hat Training

A Red Hat training course is available for RHEL 8

第 28 章 配置 DNS 服务器顺序

大多数应用程序使用 getaddrinfo() 库的 glibc 功能来解决 DNS 请求。默认情况下,glibc 将所有 DNS 请求发送到 /etc/resolv.conf 文件中指定的第一个 DNS 服务器。如果这个服务器没有回复,Red Hat Enterprise Linux 会使用这个文件中的下一个服务器。

这部分论述了如何自定义 DNS 服务器顺序。

28.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 在 /etc/resolv.conf 文件中将 127.0.0.1 设置为 dnsmasq ,或将 127.0.0.53 设置为 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. 带有活跃的默认路由的连接。活跃的默认路由是最低指标的默认路由。

其它资源

  • 有关 /etc/resolv.conf 文件中 NetworkManager 排序 DNS 服务器条目的详情,请查看 nm-settings(5) 手册页中的 ipv4ipv6 部分中的 dns-priority 参数描述。
  • 有关使用 systemd-resolved 为不同域使用不同 DNS 服务器的详情,请参考 第 36 章 在不同域中使用不同的 DNS 服务器

28.2. 设置 NetworkManager 范围默认 DNS 服务器优先级值

NetworkManager 为连接使用以下 DNS 优先级默认值:

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

这部分论述了如何使用 IPv4 和 IPv6 连接的自定义默认值覆盖这些系统范围的默认值。

流程

  1. 编辑 /etc/NetworkManager/NetworkManager.conf 文件:

    1. 添加 [connection] 部分(如果不存在):

      [connection]
    2. [connection] 部分添加自定义默认值。例如:要将 IPv4 和 IPv6 的新默认值设置为 200,请添加:

      ipv4.dns-priority=200
      ipv6.dns-priority=200

      您可以将参数设置为 -21474836472147483647 间的值。请注意,将参数设置为 0 可启用内置的默认值(50 用于 VPN 连接,其它连接为 100 )。

  2. 重新载入 NetworkManager 服务:

    # systemctl reload NetworkManager

其它资源

  • 有关为所有网络管理器连接设置默认值的详情,请参考 NetworkManager.conf(5) man page 中的 Connection Section

28.3. 设置网络管理器连接的 DNS 优先级

这部分论述了如何在 NetworkManager 创建或更新 /etc/resolv.conf 文件时定义 DNS 服务器的顺序。

请注意,只有在您配置了多个与不同 DNS 服务器的连接时,设置 DNS 优先级才有意义。如果您只有一个与多个 DNS 服务器的连接,请在连接配置集中按首选顺序手动设置 DNS 服务器。

先决条件

  • 系统配置了多个网络管理器连接。
  • 系统在 /etc/NetworkManager/NetworkManager.conf 文件中没有设置 dns 参数,或者将参数设置为 default

流程

  1. 另外,还可显示可用的连接:

    # nmcli connection show
    NAME           UUID                                  TYPE      DEVICE
    Example_con_1  d17ee488-4665-4de2-b28a-48befab0cd43  ethernet  enp1s0
    Example_con_2  916e4f67-7145-3ffa-9f7b-e7cada8f6bf7  ethernet  enp7s0
    ...
  2. 设置 ipv4.dns-priorityipv6.dns-priority 参数。例如,为 Example_con_1 连接将两个参数设置为 10

    # nmcli connection modify Example_con_1 ipv4.dns-priority 10 ipv6.dns-priority 10
  3. 另外,还可为其他连接重复前面的步骤。
  4. 重新激活您更新的连接:

    # nmcli connection up Example_con_1

验证步骤

  • 显示 /etc/resolv.conf 文件的内容以验证 DNS 服务器顺序是否正确:

    # cat /etc/resolv.conf