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