Should I edit my resolv.conf file to fix wrong DNS problem?

I have the problem that my Ubuntu machine uses the wrong DNS server. For some reason the machine queries localhost for DNS information.

I have added the DNS server in the network settings GUI, but /etc/resolv.conf still contains 127.0.0.1 as the DNS server address. Now, I thought I could just edit the file by myself, but it explicitly says I should not edit the file by hand.

Now, since the network settings GUI didn't generate the file with the right settings, how do I generate a new resolv.conf file by myself?


Solution 1:

What none of the answers posted so far addresses is the appearance that the questioner fails to understand that having nameserver 127.0.0.1 in /etc/resolv.conf is correct, assuming that a local nameserver is running. And in Ubuntu 12.04 Desktop there is, by default, a local nameserver running, namely, a dnsmasq process controlled by NetworkManager which listens on 127.0.0.1. In Ubuntu 12.10 the listen address has been changed to 127.0.1.1.

So the solution is not to make any changes to resolv.conf. It is correct, assuming that the questioner wants to use the local nameserver.

If name service is not working then the local nameserver is not being given correct forwarding addresses, or there is some other networking problem.

The questioner tried using the "network settings GUI" to "generate the file with the right settings" and this failed to work. I don't know exactly what this means, but here is the right way to enter nameserver addresses so that they end up in resolv.conf at the right time. I assume that the questioner is using NetworkManager and not ifup to configure interfaces.

Most often interfaces are configured using the DHCP protocol. In that case nothing needs to be configured on the local system. The DHCP server knows what nameserver address its clients should use and sends this information to the DHCP client, which sends it to NetworkManager, which sends it to resolvconf, which puts the information into resolv.conf. So in this case it is the DHCP server that may need to be configured.

If the network interface on the local machine is statically configured then the correct nameserver addresses have to be entered into NetworkManager at, for example, network indicator | Edit Connections... | Wireless | myconnection | Edit... | IPv4 Settings | Additional DNS servers.

It is possible that the local nameserver is not working properly. In that case the questioner should edit /etc/NetworkManager/NetworkManager.conf

sudo gedit /etc/NetworkManager/NetworkManager.conf

and comment out the line

dns=dnsmasq

in the "[main]" section. To comment out the line, put a # at the beginning of the line, then save the file. Then restart network-manager.

sudo restart network-manager

After this, non-local nameserver addresses will be entered into resolv.conf instead of the 127.* address.

If the questioner is using ifup rather than NetworkManager to configure network interfaces then jmartin2279's answer is correct: you have to add the nameserver addresses to /etc/network/interfaces in the way jmartin2279 described.

Contrary to what some other answers advise, in general you should not add nameserver, domain or search options to files in /etc/resolvconf/resolv.conf.d/. See my comments on those answers.

Solution 2:

If you are using ifup to configure the interface statically then you can add it to the /etc/network/interfaces file.

Open a terminal and type:

sudo gedit /etc/network/interface*

You should see something like:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Edit to:

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

using your own network information. this will allow you to set the dns. you can use multiple dns servers here:

dns-nameservers 8.8.8.8 8.8.4.4

After doing this, run

ifdown eth0
ifup eth0