如何通过 resolv.conf 添加 DNS 服务器?

Pno*_*tNP 228 resolv.conf

/etc/resolv.conf没用在Ubuntu的LTS 12.04(精确穿山甲)?

我看到 DNS 服务器信息现在存储在NetworkManager 中。该nmcli命令行工具可以列出你。

如果我想再添加一台DNS服务器,是否会/etc/resolv.conf使用resolvconf包帮助添加它?

stg*_*ber 144

如果/etc/resolv.conf包含,nameserver 127.0.0.1则添加条目/etc/resolvconf/resolv.conf.d/tail将不会真正做任何有用的事情。

如果您使用的是 NetworkManager,那么您应该通过网络指示器静态添加名称服务器地址:编辑连接... | 编辑... | IPv4 设置 | 额外的 DNS 服务器

如果您真的想向 中添加更多条目/etc/resolv.conf,请创建一个/etc/resolvconf/resolv.conf.d/tail并将它们添加到那里。

与每个 Ubuntu 版本一样,建议阅读 Ubuntu 发行说明,可在此处获得:

桌面和通用基础结构部分包含指向

  • @stgraber 你对 Ubuntu Server 有什么推荐?我从你的博客和评论中注意到 Network-Manger 似乎是管理这个的最好方法,但是在我的系统上安装 network-manager 会安装一大堆我不需要的东西(即 GUI 东西)。 (3认同)
  • @AveryChan,使用@randallcook 建议的“第三种方法”——只需将 `dns-nameservers` 添加到 `/etc/network/interfaces` 中的 eth0 部分。 (3认同)

Ran*_*ook 142

我在这里找到了另一种方法该方法涉及将如下所示的行添加到/etc/dhcp/dhclient.conf

prepend domain-name-servers x.x.x.x, y.y.y.y;
Run Code Online (Sandbox Code Playgroud)

同样,我在这里找到了第三种方法它涉及向以下内容添加行/etc/network/interfaces

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

更新:这是第三种方法的官方文档

  • 我投了赞成票,因为“第三种方法”是迄今为止最简单的方法。 (18认同)
  • 注意:编辑 dhclient.conf 仅在使用 dhclient 时才有效(并且它被 ifup 和 NetworkManager 使用!)编辑 /etc/network/interfaces 仅在使用 ifup 时有效。使用 NetworkManager 连接编辑器配置 NetworkManager 连接仅在使用 NetworkManager 时才有效。 (9认同)
  • @billy 我根本无法让第三种方法起作用..只有这里列出的第一种方法,编辑 dclient.conf,对我有用。 (2认同)
  • 如果我没有记错的话,第三种方法会在 DHCP 返回的名称服务器之后添加另一个名称服务器。如果您希望它先出现,那么其他选项之一更合适。我使用了`/etc/resolvconf/resolv.conf.d/head`(在克服了那里误导性的“请勿编辑”注释之后:)) (2认同)

Aze*_*ale 102

听起来您在谈论 resolvconf 包。

安装resolvconf包。

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head
Run Code Online (Sandbox Code Playgroud)

文件的顶部是一个可怕的警告。文件 /etc/resolv.conf 是从该文件的内容自动生成的;警告在那里,所以当 /etc/resolv.conf 生成时它会被放在 /etc/resolv.conf 中。在文件末尾添加

nameserver <ip_of_nameserver>
Run Code Online (Sandbox Code Playgroud)

Ctrl x并回答是以保存文件。最后,重新生成 /etc/resolv.conf 以便立即应用更改:

sudo resolvconf -u
Run Code Online (Sandbox Code Playgroud)

然后检查 /etc/resolv.conf 的内容以查看您添加的行现在在那里。此外,下次您的机器启动或您的网络服务重新启动时,它仍然会在那里,以先到者为准。


小智 33

下面我将向您展示自从我运行 Ubuntu Server 版本并使用 ifup 而不是 NetworkManager 以来我发现的最佳方法。

实际上对我来说,他们通过将其全部放入 /etc/network/interfaces 文件使这变得更容易:)。您将写入 resolv.conf 的相同配置现在可以与您的网络适配器配置位于同一文件中,如下例所示:

# The loopback network interface
auto lo
iface lo inet loopback

# The Primary Network Interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameserver 75.75.75.75 
        dns-nameserver 75.75.76.76
        dns-search local
        wildcard mask 0.0.0.255
        cidr prefix size /24
        cidr notation 192.168.1.0/24
        first host 192.168.1.255
        last host 192.168.1.254
        mac address J7:836:737:727:gsgd837:g645
Run Code Online (Sandbox Code Playgroud)

我希望这对我有帮助并使它更容易,现在我们可以创建静态 IP 地址并在一个文件中添加名称服务器和 dns 域:)


小智 21

我的正在运行 Ubuntu Server 12.04。我进行了以下更改并重新启动了服务器(通常这可以通过关闭网络接口来完成,即ifdown eth0ifup eth0)。

在文件中,/etc/resolvconf/resolv.conf.d/base我添加了以下条目:

nameserver 8.8.8.8
nameserver 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

希望以上内容有帮助!


Jas*_*ase 12

您可以按照 Frank 的回答中所述使用 NetworkManager,但是如果您更愿意手动编辑/etc/resolv.conf,您可以通过删除它(它实际上是一个符号链接)然后创建一个包含您想要的内容的新纯文件来实现。该resolvconf实用程序只写入文件/run/resolvconf/resolv.conf


bel*_*qua 9

注意:这个答案是针对问题的一个相当不同的预合并版本,只关注预先挂起所需的名称服务器。

这在 12.04 之前有效:

编辑/etc/dhcp3/dhclient.conf并添加:
prepend domain-name-servers 127.0.0.1;

(事实上​​,这一行已经存在;您需要做的就是取消注释。)


小智 8

resolvconf没用。我在 Linux 服务器上,我的IP 地址是静态的,我的DNS服务器是静态的。我不需要resolvconfNetworkManager

在服务器上工作时,保持简单是我的政策。复杂性越低,出现问题时管理/修复就越容易。

所以我做了aptitude purge resolvconf并手动确保/etc/resolv.conf不是符号链接,只是创建了一个静态文件。以防万一程序试图更改文件,作为预防措施,我做了 chattr +i(不可变的)/etc/resolv.conf

  • 由于 resolvconf 是基本系统的一部分,因此删除它会在将来升级时遇到麻烦。 (4认同)
  • 我同意评论和答案:考虑一下这导致了多少问题,解决这个“问题”花费了多少支持时间,以及有多少 IT 人员花时间寻找答案。**简单**是最好的 - 我不需要我的服务器将 DNS 更改为我不想要的东西。 (4认同)

Ann*_*sum 7

以上大部分假设您有一个原始系统,但实际情况往往是您安装了不同的 dhcp 客户端,在某些以前版本的 Ubuntu 中禁用了网络管理器等。了解以下内容可能是值得的。我一直在使用 dnsmasq,但卸载了它。目前我的系统有以下内容/etc/resolv.conf(这是/run/resolvconf/resolv.conf我系统上的符号链接):

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

不要紧,我运行的频率sudo resolvconf -u或者sudo dpkg-reconfigure resolvconf,它没有更新的域名服务器来我在网络管理器中设置的那些。存在来自 NetworkManager 的 resolvconf 信息:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

但是,事实证明,如果此目录中有多个文件,则可能根本不会使用此文件。罪魁祸首是卸载 dnsmasq 时未删除的文件:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

只需删除此文件(然后运行sudo resolvconf -u)即可解决我的 dns 问题:

cat /etc/resolv.conf                        
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.4.4
nameserver 8.8.8.8 
Run Code Online (Sandbox Code Playgroud)

我希望这也有助于其他人进行调试(所有这些不同网络工具之间的复杂交互)。如果您使用,请resolvconf确保运行ls /run/resolvconf/interfaces以查看那里有什么。