Make Permanent DNS Changes on resolv.conf in Linux

|
Last Updated:
|
|

Follow through this guide to learn how to make DNS permanent changes on resolv.conf in Linux.

According to man resolv.conf, resolv.conf is a resolver configuration file. The resolver is a set of routines in the C library that provide access to the Internet Domain Name System (DNS). The resolver configuration file contains information that is read by the resolver routines the first time they are invoked by a process. The file is designed to be human readable and contains a list of keywords with values that provide various types of resolver information. The configuration file is considered a trusted source of DNS information (e.g., DNSSEC AD-bit information will be returned unmodified from this source).

If this file does not exist, only the name server on the local machine will be queried, and the search list contains the local domain name determined from the hostname.

Use resolv.conf to Make Permanent DNS Changes in Linux

Any changes made manually to the /etc/resolv.conf configuration file are bound to be overwritten upon changes in the network or system reboot.

According to the comments made in the file, the file is dynamic. “DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN“.

So take for example, if you want to add a DNS server on your Linux box, you would usually update this file by specifying the IP address of a name server that the resolver should query. See the command below, which updates the resolv.conf file with the public primary DNS server for Google DNS, by running a command like;

echo "nameserver 8.8.8.8" > /etc/resolv.conf

If you make any changes, like a system reboot, or run the dhclient command the line added above, will disappear.

So how do you make permanent DNS changes using resolv.conf file?

Well, there are a number of ways:

  1. Use Resolvconf framework
  2. Set the name server IP address on your Interface settings
  3. Update the DNS server settings on dhclient.conf

Use Resolvconf framework

Resolvconf is a framework for keeping up to date the system’s information about name servers. It sets itself up as the intermediary between programs that supply this information (such as ifup and ifdown, DHCP clients, the PPP daemon and local name servers) and programs that use this information such as DNS caches and resolver libraries).

On Ubuntu/Debian distros, you can install resolvconf framework by running the command below;

sudo apt install resolvconf

Once the framework is installed, it is started and enabled to run on system boot.

Next, edit the configuration file, /etc/resolvconf/resolv.conf.d/base, and enter your DNS settings. See example setting below;

sudo vim /etc/resolvconf/resolv.conf.d/base
domain kifarunix.com
nameserver 8.8.8.8
nameserver 8.8.4.4

Save and exit the configuration file.

Next, update /etc/resolv.conf file to make permanent DNS changes;

sudo resolvconf -u

Update the DNS server settings on dhclient.conf

If you are using DHCPd for automatic IP address assignment, edit the /etc/dhcp/dhclient.conf file and add the line; supersede domain-name-servers IP1, IP2;. Replace IP1 and IP2 with your respective name server IP addresses;

vim /etc/dhcp/dhclient.conf
supersede domain-name-servers 8.8.8.8, 8.8.4.4;

Save the file and exit.

Now, if you run dhclient, your /etc/resolv.conf will be updated with the name servers defined in the dhclient.conf.

You can use the prepend option instead of supersede to add additional IP addresses to the default one provided by the ISP.

Consult;

man dhclient.conf

Set the name server IP address on your Interface settings

Edit your network interface configuration file and add the address of the name server.

In Ubuntu 18.04/20.04 you would update the Netplan configuration file like;

sudo vim /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
          wlp0s20f3:
                  dhcp4: no
                  addresses: [192.168.100.80/24]
                  gateway4: 192.168.100.1
                  nameservers:
                          addresses: [8.8.8.8]

We set the DNS to google public DNS server address, 8.8.8.8. It can be different for your case.

Apply the changes;

sudo netplan apply

On Debian and <= Ubuntu 16.04;

vim /etc/network/interfaces
auto wlp0s20f3
iface wlp0s20f3 inet static
    address 192.168.100.80
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8

Restart networking to apply the changes;

systemctl restart networking

On CentOS and similar derivatives, edit the interface in question as follows. Replace INTERFACE with your interface name.

nmcli con mod INTERFACE ipv4.dns 8.8.8.8

Also, disable network interface management by the NetworkManager daemon.

echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-INTERFACE

Apply the changes;

nmcli con down INTERFACE
nmcli con up INTERFACE

You should now have static DNS set.

And that concludes our guide on how to make DNS permanent changes on resolv.conf in Linux.

Further Reading

man resolv.conf
man resolvconf

Other Tutorials

Check directory usage with du Command in Linux

How to use htop Command in Linux

Example Usage of ps Command in Linux

Example Usage of ls Command in Linux

SUPPORT US VIA A VIRTUAL CUP OF COFFEE

We're passionate about sharing our knowledge and experiences with you through our blog. If you appreciate our efforts, consider buying us a virtual coffee. Your support keeps us motivated and enables us to continually improve, ensuring that we can provide you with the best content possible. Thank you for being a coffee-fueled champion of our work!

Photo of author
koromicha
I am the Co-founder of Kifarunix.com, Linux and the whole FOSS enthusiast, Linux System Admin and a Blue Teamer who loves to share technological tips and hacks with others as a way of sharing knowledge as: "In vain have you acquired knowledge if you have not imparted it to others".

1 thought on “Make Permanent DNS Changes on resolv.conf in Linux”

Leave a Comment