最近,我不得不向我的一个虚拟机添加另一个网卡,并注意到一些问题。事实证明,NIC2 覆盖了 NIC1 上的 dhcp 服务器获取的 DNS 设置。显然我可以使其静态,但我真的很想避免这种情况。有什么办法可以让一个网卡优先于另一个网卡吗? Debian 如何决定从哪个 dhcp 服务器获取其 dns 设置?
提前致谢
答案1
如果您的 DHCP 客户端配置为直接覆盖该/etc/resolv.conf
文件,则写入的最后一组 DNS 地址将获胜,并且当任何接口出现故障时,生效的设置在配置该特定接口之前如果接口关闭顺序与接口启动顺序不完全相反,可能会导致意外结果。
(我猜 DHCP 最初是为只有一个 NIC 来配置的“简单”客户端而设计的,没有人考虑如何处理同一主机上的多个 DHCP 配置接口。传统上,当您有一台多宿主主机时 =在不同网络中具有多个 NIC 的主机,这通常足以为其分配静态 IP 地址。)
如果您使用该resolvconf
软件包集中管理您的 DNS 设置,它将记住哪个接口提供了哪些 DNS 设置,将它们全部合并,并且当接口被禁用时,它将重新进行合并,而不包含被禁用者提供的设置接口,在大多数情况下这可能是正确的做法。
但如果您使用systemd-resolved
,您resolv.conf
只会说nameserver 127.0.0.53
,并且可以使用该命令查看和管理真正的 DNS 服务器设置resolvectl
。systemd-resolved
将了解全局和每个链接的 DNS 设置,并且比传统的 DNS 设置更通用。
如果您使用网络配置管理系统,例如NetworkManager
,它将在所有这些之上添加另一层。
如果您使用基于 classic 的resolv.conf
DNS 配置(无论有或没有软件包resolvconf
),请记住 DNS 解析器库假定列出的所有名称服务器/etc/resolv.conf
都是可互换的,并且都具有通过它们可用的相同信息。因此,如果解析器从第一个配置的 DNS 服务器获得“此名称不存在”响应,则它将不会向其他配置的服务器询问第二意见。在 DNS 中,“不存在这样的名称/信息”是对查询的有效可能响应,而不是错误条件。
如果您需要一种配置,将对属于特定域的名称的查询定向到一组 DNS 服务器,并将其他查询定向到另一组服务器,那么您应该意识到,这不是resolv.conf
基于经典的 DNS 配置可以做到的事情。systemd-resolved
可以使用其“路由域”配置来完成此操作,或者如果您想要经典resolv.conf
,那么您需要dnsmasq
或其他可以使用适当的转发规则进行配置的本地 DNS 代理。