我应该编辑我的 resolv.conf 文件来修复错误的 DNS 问题吗?

Aha*_*ius 35 dns resolv.conf

我的问题是我的 Ubuntu 机器使用了错误的 DNS 服务器。出于某种原因,机器查询localhostDNS 信息。

我在网络设置 GUI 中添加了 DNS 服务器,但/etc/resolv.conf仍包含127.0.0.1DNS 服务器地址。现在,我以为我可以自己编辑文件,但它明确表示我不应该手动编辑文件。

现在,由于网络设置 GUI 没有生成具有正确设置的文件,我如何自己生成新resolv.conf文件?

jdt*_*ood 40

到目前为止发布的所有答案都没有解决的是,假设本地名称服务器正在运行,提问者无法理解nameserver 127.0.0.1进入/etc/resolv.conf是正确的。在 Ubuntu 12.04 Desktop 中,默认情况下有一个本地名称服务器在运行,即dnsmasq由 NetworkManager 控制的进程,它监听127.0.0.1. 在 Ubuntu 12.10 中,监听地址已更改为127.0.1.1.

因此,解决方案是不对resolv.conf. 这是正确的,假设提问者想要使用本地名称服务器。

如果名称服务不工作,则本地名称服务器没有得到正确的转发地址,或者存在其他一些网络问题。

提问者尝试使用“网络设置 GUI”来“生成具有正确设置的文件”,但未能奏效。我不知道这到底是什么意思,但这是输入名称服务器地址的正确方法,以便它们resolv.conf在正确的时间结束。我假设提问者正在使用NetworkManager而不是ifup配置接口。

大多数情况下,接口是使用 DHCP 协议配置的。在这种情况下,无需在本地系统上配置任何内容。DHCP 服务器知道它的客户端应该使用哪个名称服务器地址,并将此信息发送到 DHCP 客户端,后者将其发送到 NetworkManager,后者将其发送到 resolvconf,后者将信息放入resolv.conf. 因此,在这种情况下,可能需要配置 DHCP 服务器。

如果本地机器上的网络接口是静态配置的,则必须在 NetworkManager 中输入正确的名称服务器地址,例如,网络指示器 | 编辑连接... | 无线 | 我的连接| 编辑... | IPv4 设置 | 额外的 DNS 服务器。

本地名称服务器可能无法正常工作。在这种情况下,提问者应该编辑/etc/NetworkManager/NetworkManager.conf

sudo gedit /etc/NetworkManager/NetworkManager.conf
Run Code Online (Sandbox Code Playgroud)

并注释掉该行

dns=dnsmasq
Run Code Online (Sandbox Code Playgroud)

在“[主要]”部分。要注释掉该行,请将 a#放在该行的开头,然后保存文件。然后重新启动网络管理器。

sudo restart network-manager
Run Code Online (Sandbox Code Playgroud)

在此之后,将输入非本地名称服务器地址resolv.conf而不是 127.* 地址。

如果提问者使用ifup而不是 NetworkManager 来配置网络接口,那么jmartin2279 的答案是正确的:您必须按照 jmartin2279 描述的方式将名称服务器地址添加到 /etc/network/interfaces。

相反的是一些其他的答案提醒,一般来说,你应该增加nameserverdomainsearch选项文件/etc/resolvconf/resolv.conf.d/。请参阅我对这些答案的评论。


小智 17

如果您使用 ifup 静态配置接口,则可以将其添加到 /etc/network/interfaces 文件中。

打开终端并输入:

sudo gedit /etc/network/interface*
Run Code Online (Sandbox Code Playgroud)

你应该看到类似的东西:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)

编辑为:

auto eth0
iface eth1 inet static
address 192.168.1.10 
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

使用您自己的网络信息。这将允许您设置 dns。您可以在此处使用多个 dns 服务器:

dns-nameservers 8.8.8.8 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

执行此操作后,运行

ifdown eth0
ifup eth0
Run Code Online (Sandbox Code Playgroud)

  • 如果您通过 ssh 连接,则不能使用 ifdown / ifup。而是使用`sudo /etc/init.d/networking restart` (3认同)

Nic*_*Tux 11

在 Ubuntu 12.04 中,resolv.conf 的处理发生了变化。

如果你想添加自己的域名服务器地址(ES),然后编辑该文件/etc/resolvconf/resolv.conf.d/

sudo nano /etc/resolvconf/resolv.conf.d/head
Run Code Online (Sandbox Code Playgroud)

并在那里添加您的名称服务器(例如:Google open dns)

nameserver 8.8.8.8

保存文件然后运行

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

没有重新启动或其他任何事情。也许您需要重新启动网络管理器

sudo service network-manager restart
Run Code Online (Sandbox Code Playgroud)

完毕。

你可以用命令测试它

nslookup www.google.com

结果必须类似于

Server: 8.8.8.8
Address: 8.8.8.8#53
Run Code Online (Sandbox Code Playgroud)

  • 在 /etc/resolvconf/resolv.conf.d/head 中添加“名称服务器”行可能是一种快速破解,但它不是解决任何问题的正确方法。这样做会使解析器在所有情况下都使用该名称服务器地址,而要使用的名称服务器取决于具体情况。例如,如果您连接到 LAN(可能通过 VPN),那么您通常希望使用 LAN 名称服务器,以便能够解析 LAN 上的私有名称。在目前的情况下,系统似乎正在运行本地缓存名称服务器,但添加“名称服务器 8.8.8.8”只是绕过它。 (4认同)