如何让 NetworkManager 在 /etc/resolv.conf 顶部添加 DNS 服务器?

如何让 NetworkManager 在 /etc/resolv.conf 顶部添加 DNS 服务器?

现在,我的 /etc/resolv.conf 看起来像这样:

# Generated by NetworkManager
nameserver 10.165.246.33
nameserver 192.135.82.60
nameserver 10.165.74.2

前两个名称服务器是通过 DHCP 自动配置的;最后一项是我在 NetworkManager 中手动添加的。它也是最重要的一个,因为它解析我们的内部域名(例如build-server-17.our-company-domain.com)。

问题是,NetworkManager 将其添加到底部/etc/resolv.conf,因此当访问 Intranet URL 时,我的浏览器会尝试使用前两台服务器来解析它,这需要很长时间。

如何让 NetworkManager 添加手动配置的 DNS 服务器自动配置的?

答案1

我不小心创建了一个重复的问题这里。答案就在那里,但本质上,您需要创建:

/etc/dhcp/dhclient.conf

如果它尚不存在,请添加:

prepend domain-name-servers [ip address of server];

不要忘记最后的分号!

之后,只需重新启动即可自动将“/etc/resolv.conf”中的“nameserver [服务器的 IP 地址]”行移动到顶部!

答案2

我不知道要具体解决哪个系统,但如果您正在使用,请尝试以 root 身份(或)resolvconf执行以下操作:su -sudo -i

echo 'nameserver 10.165.74.2' >> /etc/resolvconf/resolv.conf.d/head
resolvconf -u

该文件中有一条警告,指出手动更改将被覆盖;但是,在上下文中,该消息适用于/etc/resolv.conf,而不是/etc/resolvconf/resolv.conf.d/head

这应该将所需的名称服务器放在列表中的第一位。当然,如果这适用于您的操作系统,则可以从 NetworkManager 中删除 10.165.74.2。

本地解析器dnsmasq也是一个很好的前进路径。使用dnsmasq,人们可以对 DNS 和 DHCP 进行更多控制。例如,在这种情况下,dnsmasq可以使用其选项根据指定的域名查询特定的名称服务器server。请参阅dnsmasq.conf下面可能与您的目标相关的片段。

# Add other name servers here, with domain specs if they are for
# non-public domains.
server=/our-company-domain.com/10.165.74.2

更新

感谢您提到操作系统。在CentOS 7上,有很多方法。在 GUI 中,单击应用程序 > 系统工具 > 设置 > 网络。选择要配置的连接。

CentOS 7 NetworkManager - 配置连接

关闭自动 DNS 并提供名称服务器。应用配置。

CentOS 7 NetworkManager - 应用静态 DNS 设置

下次 NetworkManager 启动该连接时,它会写入自定义值。 (测试时,我关闭网络然后再次打开,因为我有两个网络连接。)

根据文档,

  1. NetworkManager 提供了一个简单的基于 Curses 的文本用户界面 (TUI) nmtui。
  2. 提供了一个命令行工具 nmcli,允许用户和脚本与 NetworkManager 交互。请注意,nmcli 可用于无 GUI 系统(例如服务器)来控制 NetworkManager 的各个方面。它与 GUI 工具处于同等地位。

特别是,nmcli 文档看起来很好。

答案3

还有一种方法,不需要关闭NetworkManager.service。只需设置 ifcfg-idevice:

PEERDNS=no
DNS1=10.165.74.2
DNS2=OTHERDNS
DOMAIN=DEMO.COM

您不需要设置 /etc/NetworkManager/NetworkManager.conf 设置,例如:

[main]
dns=none

相关内容