我正在 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。
我想这与它有关,但是当设置为 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.conf
为nameserver 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