systemctl 重启 network.service 后,名称服务器被删除

csn*_*sny 9 dns centos networkmanager resolvconf network-interface

我正在使用 centos 7,并且在将网络接口从 dhcp 设置为静态 ip 配置时出现问题。

我编辑/etc/resolv.conf并运行systemctl restart network.service
我所做的更改消失了,并创建了一个通用文件:

cat /etc/resolv.conf
# Generated by NetworkManager


# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
Run Code Online (Sandbox Code Playgroud)

注意:ifcfg-ens160 文件中的 PEERDNS="yes"。
PEERDNS=,其中是以下之一: yes — 如果设置了 DNS 指令,则修改 /etc/resolv.conf。如果使用 DHCP,则是默认值。
no — 不修改 /etc/resolv.conf。

取自此处:https : //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-networkscripts-interfaces.html

我想这与它有关,但是在设置为 dhcp 时它运行良好,所以我希望如果它/etc/resolv.conf自动配置它会成功。

解决方法是/etc/resolv.conf在服务重新启动后进行编辑。
但是我想了解这种行为,以及如何避免将文件重置为此默认失败消息。

Pav*_*rda 11

您可能将经典/etc/init.d/network(翻译为network.service)与NetworkManager.service. 虽然预计它们会部分共存,但最好只选择其中一个并停止禁用另一个。

无论哪种方式,最好不要/etc/resolv.conf直接编写,而是正确配置/etc/sysconfig/network和/或/etc/sysconfig/network-scripts/ifup-*文件。

您应该启用dhcp或在/etc/sysconfig.

示例(DHCP):

BOOTPROTO=dhcp
Run Code Online (Sandbox Code Playgroud)

示例(静态):

BOOTPROTO=none
DNS1=192.168.1.1
Run Code Online (Sandbox Code Playgroud)

如果你真的想/etc/resolv.conf直接设置并且你想确保 NetworkManager 不会覆盖它,你可以在/etc/NetworkManager/NetworkManager.conf.

[main]
dns=none
Run Code Online (Sandbox Code Playgroud)

关于您关于名称服务器数量的其他问题,在/etc/resolv.conf. 您不应该对 libc 解析器的行为抱有太多期望,它只是按顺序尝试名称服务器,如果列表中的名称服务器已失效,您将遇到很长时间的延迟。

我不知道您使用三个以上名称服务器的原因。但是,如果有一个,你肯定需要配置像本地转发DNS服务器绑定的dnsmasq和点/etc/resolv.conf127.0.0.1。在这种情况下,为了获得动态配置的最佳体验,您应该使用 NetworkManager。

带有 dnsmasq 的 NetworkManager 长期以来一直受到支持,并且是 Ubuntu 和其他可能的发行版上的默认设置。

[main]
dns=dnsmasq
Run Code Online (Sandbox Code Playgroud)

未绑定的 NetworkManager 在最新的 NetworkManager 版本中处于 alpha 质量,目前还需要dnssec-trigger,因为主要用例是在本地主机上提供 DNSSEC 验证。

[main]
dns=unbound
Run Code Online (Sandbox Code Playgroud)

dnsmasq 和 unbound 插件/etc/resolv.confnameserver 127.0.0.1为您配置,每个插件都配置各自的本地 DNS 服务器。