nameserver 127.0.1.1 in resolv.conf won't go away!

NetworkManager is the program which (via the resolvconf utility) inserts address 127.0.1.1 into resolv.conf. NM inserts that address if an only if it is configured to start an instance of the dnsmasq program to serve as a local forwarding nameserver. That dnsmasq instance listens for queries at address 127.0.1.1.

If you do not want to use a local forwarding nameserver then configure NetworkManager not to start a dnsmasq instance and not to insert that address. In /etc/NetworkManager/NetworkManager.conf comment out the line dns=dnsmasq

sudo nano /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

and restart the NetworkManager service.

sudo service network-manager restart

In this mode, NetworkManager updates /etc/resolv.conf (still via resolvconf) to include the nameserver addresses NetworkManager has for active connections.

If you want to disable the resolvconf mechanism for updating resolv.conf and just use a static resolv.conf file, do the following.

sudo rm -f /etc/resolv.conf  # Delete the symbolic link
sudo nano /etc/resolv.conf   # Create static file

# Content of static resolv.conf
nameserver 8.8.4.4
nameserver 8.8.8.8

It is possible that resolvconf is misconfigured. This is especially likely if you have been playing around with its configuration files without really understanding how resolvconf and NetworkManager work.

For background information, please read the resolvconf documentation and Stéphane Graber's blog post.

https://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/

First you should know that both Ubuntu Desktop and Ubuntu Server by default have resolvconf installed and activated. Resolvconf provides a framework for dynamically updating the /etc/resolv.conf file in an orderly and reversible way.

Second you should know that Ubuntu Desktop by default has NetworkManager installed and activated. By default NetworkManager starts an instance of dnsmasq to serve as a local forwarding nameserver. This NetworkManager-controlled dnsmasq instance listens for queries at 127.0.1.1. When NetworkManager starts the dnsmasq instance it tells resolvconf to insert the address 127.0.1.1 into resolv.conf. As mentioned in another answer, if you configure NetworkManager not to start a local forwarding nameserver instance then it will not start a local forwarding nameserver and will not tell resolvconf to insert the address 127.0.1.1 into resolv.conf.

This default configuration works properly, so unless your situation is special you should restore the default configuration.

To restore the default configuration, see to it that

  • /etc/resolvconf/resolv.conf.d/head contains only the resolvconf header text consisting of two lines starting with a # character
  • /etc/resolvconf/resolv.conf.d/base is an empty file
  • /etc/resolvconf/resolv.conf.d/tail is an empty file
  • /etc/resolv.conf is a symbolic link with content ../run/resolvconf/resolv.conf

To achieve this, execute the following commands.

sudo su
dpkg-reconfigure resolvconf   # And answer `Yes` to agree to dynamic updates
cd /etc/resolvconf/resolv.conf.d
echo '# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN' > head
rm -f base tail original
:> base
:> tail

The original configuration of NetworkManager is to have

[main]
...
dns=dnsmasq
...

in /etc/NetworkManager/NetworkManager.conf. It is a reasonable choice to disable the NetworkManager-controlled local forwarding nameserver by commenting out the dns=dnsmasq line.

[main]
...
#dns=dnsmasq
...

After doing all this it is advisable to restart the machine in order to clear out stale nameserver information records.

sudo reboot