How to edit /etc/resolv.conf on Ubuntu 12.04
I have two network interfaces configured via DHCP. As a result, /etc/resolv.conf
is populated with information coming from the DHCP server.
How can I edit this file?
I know that if I add prepend domain-name-servers 127.0.0.1
to /etc/dhcp/dhclient.conf
I can obtain nameserver 127.0.0.1
as the first (and only) line of /etc/resolv.conf
.
What if I want 127.0.0.1 and only one of the two nameserver addresses provided via DHCP?
Solution 1:
In Ubuntu 12.04 and later, /etc/resolv.conf
is dynamically generated by the resolvconf utility. (Actually, resolvconf generates /run/resolvconf/resolv.conf
and /etc/resolv.conf
is a symbolic link to that. That's the default configuration; it is also possible to run with a static file at /etc/resolv.conf
but that is non-standard.) Nameserver information (nameserver addresses and search domain names) gets registered with resolvconf by interface configurers (ifup
, NetworkManager
, dhclient
, etc.). On the basis of what has been registered, resolvconf generates an up-to-date resolv.conf
file.
Therefore, you can't edit the resolv.conf
file directly. If you want to control what ends up in resolv.conf
you will have to configure the resolvconf utility. Please see the resolvconf documentation for more information.
The answer to the specific question "What if I want 127.0.0.1 and only one of the two nameserver addresses provided via DHCP?" is:
- First, do not add
prepend domain-name-servers 127.0.0.1
to/etc/dhcp/dhclient.conf
. The correct protocol is for local nameservers to register their local listen address(es) with resolvconf when they are ready to provide local name service; when they do this there is no need for DHCP clients to do so too. Dnsmasq does the right thing by default. In the case of BIND 9, you have to setRESOLVCONF=yes
in/etc/default/bind9
to cause it to register the address127.0.0.1
with resolvconf. - Second, resolvconf by default truncates the list of nameservers after any loopback address such as
127.0.0.1
. To disable this behavior, create a file/etc/default/resolvconf
containing the lineTRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no
. -
Third, resolvconf by default truncates the list of nameservers after three items. There is no point in including more addresses because the glibc resolver ignores any addresses after the first three. To cause resolvconf to truncate the list after two addresses you have to edit the script
/etc/resolvconf/update.d/libc
to replace this line[ "$N" = 3 ] && return 0
by the following one.
[ "$N" = 2 ] && return 0
Solution 2:
It worked for my grandfather, it worked for my father and it works for me.
rm /etc/resolv.conf
vi /etc/resolv.conf
search yourdomain.com
nameserver 8.8.8.8
nameserver 8.8.4.4
EDIT:
rm
removes the standard symbolic link.
vi
creates an actual file in its place.
Solution 3:
When I installed 12.04 this text helped me a lot: http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/