Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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 tought 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?

share|improve this question
1  
If you're using Ubuntu Server 12.04 LTS, just do yourself a big favor and edit /etc/resolvconf/resolv.conf.d/head directly just as you want your legacy resolv.conf to look. I had nothing but resolver issues until I brute force'd it. –  user139478 Mar 11 '13 at 18:08
    
askubuntu.com/questions/157154/… maybe a related question. –  Ehtesh Choudhury Apr 26 '13 at 16:29

4 Answers 4

up vote 27 down vote accepted

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.

share|improve this answer
    
This doesn't really answer the question. You're assuming NM+dnsmasq either works perfectly or doesn't work at all and needs to be removed. If everything mostly works but the OP just wants to include some extra DNS servers (e.g. google dns), then neither option is preferred, because disabling dnsmasq prevents it from detecting the local default nameserver. –  Cerin Apr 28 at 15:55

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
share|improve this answer
    
If it's your case, this is the solution: "If you are using ifup to configure the interface statically ...." –  angelcervera Oct 14 '13 at 8:59
    
Did you even test this? ifdown: interface eth0 not configured –  Cerin Apr 28 at 15:58
1  
if you're connected trough ssh you can't use ifdown / ifup. instead use sudo /etc/init.d/networking restart –  TD_Nijboer May 28 at 13:47

In Ubuntu 12.04 the handling of resolv.conf changed.

If you want to add your own nameserver address(es) then edit the file /etc/resolvconf/resolv.conf.d/head

sudo nano /etc/resolvconf/resolv.conf.d/head

and add your nameserver there (eg: Google open dns)

nameserver 8.8.8.8

save the file and then run

sudo resolvconf -u

No reboot or anything else. Maybe you will need to restart network-manager

sudo service network-manager restart

Done.

You can test it with the command

nslookup www.google.com

The result must be similar to

Server: 8.8.8.8
Address: 8.8.8.8#53
share|improve this answer
3  
Adding a "nameserver" line to /etc/resolvconf/resolv.conf.d/head may work as a quick hack but it is not the correct solution to any problem. Doing that makes the resolver use that nameserver address under all circumstances, whereas the nameservers to use depend upon the circumstances. For example, if you are connected to a LAN (perhaps via VPN) then you usually want to use the LAN nameservers in order to be able to resolve private names on the LAN. And in the present case the system appears to be running a local caching nameserver, but adding "nameserver 8.8.8.8" just bypasses it. –  jdthood Oct 29 '12 at 7:48
    
@jdthood - You pointed out a problem. Care to provide a solution? –  TJ Biddle Sep 16 '13 at 0:07
    
@TJ I already posted an answer to the main question ("How do I edit my resolv.conf file?") if that's what you mean. –  jdthood Sep 16 '13 at 11:02
1  
Please don't recommend this. At the very top of the file, "DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN". –  Cerin Apr 28 at 16:00

To add more entries to /etc/resolv.conf, create a /etc/resolvconf/resolv.conf.d/tail file and add them there.

But if /etc/resolv.conf contains 127.0.0.1, then adding entries to /etc/resolvconf/resolv.conf.d/tail will not change anything. You have to set your DNS server addresses statically in NetworkManager which will send them to dnsmasq which listens on 127.0.0.1.

The DNS configuration for a static interface should go as “dns-nameservers”, “dns-search” and “dns-domain” entries added to the appropriate iface stanza in /etc/network/interfaces

Read this for more information.

`Moreover:

You can install a gui tool named gnome-network-admin that will set your DNS. Try it :

sudo apt-get install gnome-network-admin
share|improve this answer
2  
(1) No, do not add "nameserver" options to /etc/resolvconf/resolv.conf.d/tail. That is ineffective (because other "nameserver" options take precedence) and suboptimal (because it's static configuration whereas the configuration should reflect the network circumstances). (2) No, do not use gnome-network-admin. It does not work properly with resolvconf. See bug #60518 (bugs.launchpad.net/ubuntu/+source/gnome-system-tools/+bug/60518). –  jdthood Oct 29 '12 at 8:24

protected by Community Mar 11 '13 at 20:33

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.