The /etc/resolv.conf is the main configuration file for the DNS name resolver library. The resolver is a set of functions in the C library that provide access to the Internet Domain Name System (DNS). The functions are configured to check entries in the /etc/hosts file, or several DNS name servers, or to use the host’s database of Network Information Service (NIS).
On modern Linux systems that use systemd (system and service manager), the DNS or name resolution services are provided to local applications via the systemd-resolved service. By default, this service has four different modes for handling the Domain name resolution and uses the systemd DNS stub file (/run/systemd/resolve/stub-resolv.conf) in the default mode of operation.
The DNS stub file contains the local stub 127.0.0.53 as the only DNS server, and it is redirected to the /etc/resolv.conf file which was used to add the name servers used by the system.
If you run the following ls command on the /etc/resolv.conf, you will see that this file is a symlink to the /run/systemd/resolve/stub-resolv.conf file.
$ ls -l /etc/resolv.conf lrwxrwxrwx 1 root root 39 Feb 15 2019 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
Unfortunately, because the /etc/resolv.conf is indirectly managed by the systemd-resolved service, and in some cases by the network service (by using initscripts or NetworkManager), any changes made manually by a user can not be saved permanently or only last for a while.
In this article, we will show how to install and use the resolvconf program to set permanent DNS name servers in /etc/resolv.conf file under Debian and Ubuntu Linux distributions.
Why Would You Want to Edit /etc/resolv.conf File?
The main reason could be because the system’s DNS settings are misconfigured or you prefer to use specific name servers or your own. The following cat command shows the default name server in the /etc/resolv.conf file on my Ubuntu system.
$ cat /etc/resolv.conf

In this case, when local applications such as the APT package manager try to access FQDNs (Fully Qualified Domain Names) on the local network, the result is a “Temporary failure in name resolution” error as shown in the next screenshot.

The same happens when you run a ping command.
$ ping google.com

So when a user tries to manually set the name servers, the changes do not last for long or are revoked after a reboot. To resolve this, you can install and use the reolvconf utility to make the changes permanent.
To install the resolvconf package as shown in the next section, you need to first manually set the following name servers in the /etc/resolv.conf file, so that you access the FQDMs of Ubuntu repository servers on the internet.
nameserver 8.8.4.4 nameserver 8.8.8.8
Read Also: How to Setup Local DNS Using /etc/hosts File in Linux
Installing resolvconf in Ubuntu and Debian
First, update the system software packages and then install resolvconf from the official repositories by running the following commands.
$ sudo apt update $ sudo apt install resolvconf
Once the resolvconf installation is complete, the systemd will trigger the resolvconf.service to be automatically started and enabled. To check if it is up and running issues the following command.
$ sudo systemctl status resolvconf.service
If the service is not started and enabled automatically for any reason, you can start and enable it as follows.
$ sudo systemctl start resolvconf.service $ sudo systemctl enable resolvconf.service $ sudo systemctl status resolvconf.service

Set Permanent DNS Nameservers in Ubuntu and Debian
Next, open the /etc/resolvconf/resolv.conf.d/head configuration file.
$ sudo nano /etc/resolvconf/resolv.conf.d/head
and add the following lines in it:
nameserver 8.8.8.8 nameserver 8.8.4.4

Save the changes and restart the resolvconf.service and systemd-resolved or reboot the system.
$ sudo systemctl restart resolvconf.service $ sudo systemctl restart systemd-resolved.service
Now when you check the /etc/resolv.conf file, the name server entries should be stored there permanently. Henceforth, you will not face any issues concerning name resolution on your system.

I hope this quick article helped you in setting the permanent DNS nameservers in your Ubuntu and Debian systems. If you have any queries or suggestions, do share them with us in the comments section below.
Simply restarting resolvconf.service and systemd-resolved.service does not help in solving the problem until you restart the OS itself. Some other service needs to be restarted.
Thanks for the tutorial! I needed to run those two final commands to resolve it. Maybe it can be useful also to you, Dmitry:
@Aaron,
Thank you very much.
Very useful by me and my new owncloud server running bullseye.
I didn’t know how to solve this tough subject: forcing DNS while I activated WOL on my lan interface (not supported in network manager)
And it works fine right now
A lot of thanx again
Phil
This is the best tutorial I have come across after a lot of searching! It worked perfectly in one go!
@Daniel
We are glad that this tutorial worked for you. Many thanks for the useful feedback.
Hi, thanks for the detailed tutorial.
Unfortunately, I run into a problem that I don’t have permission to write to the files.
I run the commands as sudo but it makes no difference. I have tried to take ownership but nothing I do seems to work. Sudo
chmod + rwx resolv.conf
or sudo Chown doesn’t change anything.I hope I can find a solution because this nameserver issue I really annoying.
This solved the problem. Thanks
Hi,
on Debian 11 I followed straight ahead of your suggestions and steps about resolvconf (I did NOT add some own stuff). Systemctl (re)start resolvconf does NOT yield errors, everything seems to be fine.
I ended up with an EMPTY (no nameserver entries in it) /etc/resolvconf (which is linked to /root/run/resolvconf/resolv.conf. As a consequence “ping google.com” returns “ping: google.com: Name or service not known“.
The entries in /etc/resolvconf/resolv.conf.d/head still exists, but it seems that the resolvconf service does not see them.
Any ideas, please?
@DieterH,
Simply restart the systemd-resolved service will fix the problem…
I couldn’t save the Text File with this command:
it shows an error message..
thank you in any case…
Which error precisely? Can’t help without this info!
@Jeff: this is probably because /etc/resolvconf/resolv.conf.d/ does no exists.
This is what happened to me (ubuntu 21.10)
Make sure you leave out the
'$'
in the command when you execute it,should be:
Is it possible to automate these entries into /etc/resolvconf/resolv.conf.d/head using Python or Ansible?
I’d like to try and create a button that automates and edits the conf file with 3 lines of code, but all I can find is how to do it manually and because it’s not a file that should be accessible by 3rd party software that easily, I haven’t gotten much luck finding this :/