第 23 章 配置 DNS 服务器顺序
大多数应用程序使用 glibc
库的 getaddrinfo()
函数来解决 DNS 请求。默认情况下,glibc
将所有 DNS 请求发送到 /etc/resolv.conf
文件中指定的第一个 DNS 服务器。如果这个服务器没有回复,RHEL 会使用这个文件中的下一个服务器。使用 NetworkManager 可让您影响 etc/resolv.conf
中的 DNS 服务器顺序。
23.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-priority
和ipv6.dns-priority
参数对不同的连接的 DNS 服务器进行排序。如果没有设置值,或者您将
ipv4.dns-priority
和ipv6.dns-priority
设为0
,则 NetworkManager 将使用全局默认值。请参阅 DNS 优先级参数的默认值。dns=dnsmasq
或dns=systemd-resolved
:当您使用这些设置中的一个时,NetworkManager 将
dnsmasq
的127.0.0.1
或127.0.0.53
设为/etc/resolv.conf
文件中的nameserver
条目。dnsmasq
和systemd-resolved
服务将对 NetworkManager 连接中设置的搜索域的查询转发到该连接中指定的 DNS 服务器,并将对其他域的查询转发到带有默认路由的连接。当多个连接有相同的搜索域集时,dnsmasq
和systemd-resolved
将这个域的查询转发到在具有最低优先级值的连接中设置的 DNS 服务器。
DNS 优先级参数的默认值
NetworkManager 对连接使用以下默认值:
-
50
用于 VPN 连接 -
100
用于其他连接
有效的 DNS 优先级值:
您可以将全局默认值和特定于连接的 ipv4.dns-priority
和 ipv6.dns-priority
参数设为 -2147483647
和 2147483647
之间的值。
- 低的值具有更高的优先级。
- 负值具有一个特殊的效果,它会排除其他带有更大值的配置。例如,如果至少有一个连接具有负优先级值,NetworkManager 只使用在连接配置集中指定的具有最低优先级的 DNS 服务器。
如果多个连接具有相同的 DNS 优先级,NetworkManager 会按照以下顺序排列 DNS 的优先顺序:
- VPN 连接
- 带有活跃的默认路由的连接。活跃的默认路由是具有最低指标的默认路由。
其他资源
-
您系统上的
nm-settings (5)
手册页 - 在不同域中使用不同的 DNS 服务器