如何在/etc/resolv.conf中使名称服务器地址永久化?


14

我无法保留通过设置的名称服务器地址/etc/resolv.conf。每次设置该值时,网络管理器都会在重新启动时使用默认网关覆盖它。

如何正确设置?

除了更改路由器中的名称服务器外,我宁愿选择其他方法。


您需要使用进行更改NetworkManager(如第一行中所述)。每次引导时都会重新生成此文件NetworkManager。如何访问this取决于您的linux发行版(您没有提到)NetworkManager
瑞克(Rik)

Answers:


13

这取决于。请仔细阅读。

如果您没有安装软件包resolvconf,那么很简单:以您喜欢的方式更改它后,发出命令

 sudo chattr +i /etc/resolv.conf

该命令更改文件属性,使其生效immutable(+ i选项)。

但是,如果您安装了resolvconf软件包,则文件/etc/resolv.conf可能会转换为符号链接,

 # file /etc/resolv.conf
 /etc/resolv.conf: symbolic link to `../run/resolvconf/resolv.conf'

这是虚拟文件系统上的文件,是非永久版本的缩影。有趣的是,您可能不知道已经安装了resolvconf,因为预装了Debian-like OS的最新版本。您可以通过发出以下命令来确定发行版是否已为您安装了发行版:

 #whereis resolvconf
 resolvconf: /sbin/resolvconf /etc/resolvconf /lib/resolvconf /usr/share/man/man8/resolvconf.8.gz

甚至最重要的是,您可以/etc/resolv.conf通过上面的命令(文件/etc/resolv.conf)确定是否已将您转换为链接。如果答复是ASCII text,请使用chattr,否则...

如果您使用静态IP,最简单的方法是添加以下行(或类似的内容)

 dns-nameservers 8.8.4.4 8.8.8.8

到在/ etc / network / interfaces中定义静态接口属性的节。

如果您使用的是始终连接到不同网络的笔记本电脑,则可以遵循LawrenceC的出色建议。但是,如果您的系统上装有resolvconf,则提供一组固定的DNS的正确(最简单)方法是使用/etc/resolvconf/resolv.conf.d中的文件。特别是,使用了以下文件(请参阅Stephane Graber的页面):

base:当找不到其他数据时使用

head:用于resolv.conf的标头,可用于确保DNS服务器始终是列表中的第一个服务器

tail:任何在tail中的条目都将附加在结果resolv.conf的末尾。

因此,将您喜欢的名称服务器放在head中,如下所示

  nameserver 8.8.8.8

到此为止。


2
@dhiller Ultrasawblade将他的名字更改为LawrenceC,这是下面的一个。
MariusMatutiae16年

非常棒且有趣的帖子,我希望您为希望了解更多有关该主题的用户添加一些文档链接,Thx
Philippe Gachoud

/etc/resolvconf/在Ubuntu 18.04上默认不存在。
Dan Dascalescu

9

添加与/etc/dhcp/dhclient.conf使用根终端类似的行:

supersede domain-name-servers 74.122.198.48, 50.116.23.211;

这将导致dhclient发出DHCP请求并根据响应的内容进行更改的程序在进行更改之前,用上述内容替换从DHCP服务器获得的信息。

上面是两个OpenNIC DNS服务器。根据需要替换您要使用的任何服务器。

由于这种情况每当您从DHCP获取配置信息时都会发生,因此请使用dhclient -v eth0或任何接口刷新它并查看更改。


1
不仅可以覆盖DNS(通常是路由器),还可以添加一行prepend domain-name-servers 8.8.8.8。这将在可用时使用ISP的DNS。
Axel Latvala

3

如@Rik所述,重新启动时替换DNS的原因是由于设置了网络管理器/实用程序。在Linux Mint中,根据屏幕截图,我将IPv4方法设置为“仅自动(DHCP)”地址。然后,您可以在/etc/resolv.conf或“ DNS服务器”部分中输入正确的设置。我记得在Ubuntu 13.04中,我的名称服务器在很长一段时间内进行了几次更改,但是实际上我去了GUI并对其进行编辑后,所有这些似乎都从此稳定了下来。

在此处输入图片说明

在此处输入图片说明


3

有同样的问题,但我使用静态IP地址。解决方法是在/ etc / network / interfaces中添加dns

iface eth0 inet static
    address [your ip>
    netmask [your netmask]
    network [your network]
    broadcast [your broadcast]
    gateway [your gateway]
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers [dns server1] [dns server2]
    dns-search [your domain]

是的,可以解决此问题,因为NetworkManager会忽略中列出的接口/etc/network/interfaces。接得好!
Izzy

1

如果使用了wicd,请右键单击该图标,然后单击连接信息。窗口打开后,单击您要连接的属性。

检查使用静态DNS,并在显示DNS服务器1的行中键入Google DNS的IP 8.8.8.8,在显示DNS服务器2的行中键入8.8.4.4“ OK”。

如果您收到来自默认设置的错误,则可以联系您的ISP并向他们提及。当您与它们连接时,它们通常将DNS服务器分配给您的调制解调器。


0

chattr +i最多只能通过一种快速的方法来解决问题,并且应该尽可能避免(至少是长期的–如所说,这是一种短期的解决方法,直到有时间找到真正的解决方案为止) 。如前所述,这是NetworkManager的工作,它提供了我们可以用于的CLI:

#查找要调整的界面
nmcli设备
#输出看起来像:
#设备类型状态连接
#enp0s3以太网连接我的办公室
#lo loopback不受管-
#从那开始,我们需要连接。

#现在添加我们的“搜索域”:
nmcli连接修改my-office ipv4.dns-search example1.com
nmcli con mod我的办公室+ ipv4.dns-search example2.com

#和我们的名称服务器:
nmcli con修改我的办公室ipv4.dns 213.73.91.35
nmcli con修改我的办公室+ ipv4.dns 87.118.100.175
#注意第二行中的“ +”:再添加一个,
#而第一行覆盖现有条目。
#我们可以通过一个调用来做到这一点:
nmcli con修改我的办公室ipv4.dns“ 213.73.91.35 87.118.100.175”

#确定,现在让我们告诉它忽略来自DHCP服务器的更新:
nmcli con修改我的办公室ipv4.ignore-auto-dns是

#并将修改应用于我们的运行配置
nmcli联络我的办公室

如果您使用静态IP地址,也可以使用kanelbolle的答案中的解决方案。


0

令人惊讶的是令人沮丧的这个小问题可以得到,当 解决方案 给予 它Ubunutu 18.04不再起作用。

对我有用的nameserver/etc/resolv.conf在每次引导时都简单地覆盖其中的值。sudo编辑/etc/rc.local并添加以下行:

 sed -i "s/nameserver 127.0.0.53/nameserver 8.8.8.8/" /etc/resolv.confsudo /etc/rc.local
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.