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

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

我正在 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

注意:ifcfg-ens160 文件中的 PEERDNS=“yes”。
PEERDNS=,其中是以下选项之一: yes — 如果设置了 DNS 指令,则修改 /etc/resolv.conf。如果使用 DHCP,则默认为 yes。
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在服务重新启动后进行编辑。
但我想了解这种行为,以及如何避免文件被重置为默认失败消息。

答案1

您可能将经典/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

示例(静态):

BOOTPROTO=none
DNS1=192.168.1.1

如果您确实想/etc/resolv.conf直接设置并且希望确保 NetworkManager 不会覆盖它,您可以在/etc/NetworkManager/NetworkManager.conf.

[main]
dns=none

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

我不知道您使用三个以上名称服务器的原因。但如果有的话,你肯定需要配置一个本地转发DNS服务器,比如不受约束的或者域名解析/etc/resolv.conf指向127.0.0.1.为了获得动态配置的最佳体验,在这种情况下您应该使用 NetworkManager。

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

[main]
dns=dnsmasq

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

[main]
dns=unbound

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

答案2

使用 dhclient.conf 指定名称服务器。它使您可以对名称服务器条目的顺序进行细粒度控制,并且符合配置网络的“红帽方式”。

dhclient.conf 默认不存在,但您可以创建它:

interface "eth0" {
    prepend domain-name-servers 8.8.8.8;
    append domain-name-servers 8.8.4.4;
}

生成的resolv.conf:

# Generated by NetworkManager
search example.com
nameserver 8.8.8.8
nameserver 10.0.2.3
nameserver 8.8.4.4

用 Vagrant 测试:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.provision "shell", inline: <<VAGRANTEOF
  cat <<EOF > /etc/dhcp/dhclient-eth0.conf
interface "eth0" {
    prepend domain-name-servers 8.8.8.8;
    append domain-name-servers 8.8.4.4;
}
EOF
  sudo service network restart
VAGRANTEOF
end

进一步阅读:

  • dhclient.conf 联机帮助页
  • /usr/share/doc/dhclient-4.2.5/dhclient.conf.example

答案3

我建议使用 NetworkManager GUI 工具,使用永久值配置 resolv.conf - 该值将在网络重新启动后保留:

$ nmtui

或者:

$ nm-connection-editor

添加您的 DNS 服务器、搜索域等: 在此输入图像描述

现在验证网络重新启动后这些值是否仍然定义:

$ sudo systemctl restart network
$ cat /etc/resolv.conf

相关内容