How to Setup Local DNS Using /etc/hosts File in Linux
DNS (Domain Name System or Service) is a hierarchical decentralized naming system/service that translates domain names into IP addresses on the Internet or a private network and a server that provides such a service is called a DNS server.
This article explains, how to setup a local DNS using the hosts file (/etc/hosts) in Linux systems for local domain resolution or testing the website before taking live.
For example, you may want to test a website locally with a custom domain name before going live publicly by modifying the /etc/hosts file on your local system to point the domain name to the IP address of the local DNS server you configured.
The /etc/hosts is an operating system file that translate hostnames or domain names to IP addresses. This is useful for testing websites changes or the SSL setup before taking a website publicly live.
Attention: This method will only work if the hosts have a static IP address. Therefore ensure that you have set static IP addresses for your Linux hosts or nodes running other operating systems.
For the purpose of this article, we will be using the following domain, hostnames and IP addresses (use values that apply to your local setting).
Domain: tecmint.lan Host 1: ubuntu.tecmint.lan 192.168.56.1 Host 2: centos.tecmint.lan 192.168.56.10
Understanding Name Service Switch in Linux
Before moving any further, you should understand a few things about another important file that is /etc/nsswitch.conf. It provides Name Service Switch functionality which controls the order in which services are queried for name service lookups.
The configuration is based on order; if files is before dns it means the system will query the /etc/hosts file before checking DNS for name service requests. But if DNS is before files then the domain lookup process will consult DNS first before any other appropriate services or files.
In this scenario, we want to query the “files” service. To check the order, type.
$ cat /etc/nsswitch.conf OR $ grep hosts /etc/nsswitch.conf
Configure DNS Locally Using /etc/hosts File in Linux
Now open the /etc/hosts file using your editor of choice as follows
$ sudo vi /etc/hosts
Then add the lines below to the end of the file as shown in the screen shot below.
192.168.56.1 ubuntu.tecmint.lan 192.168.56.10 centos.tecmint.lan
Next, test if everything is working well as expected, using the ping command from Host 1, you can ping Host 2 using it domain name like so.
$ ping -c 4 centos.tecmint.lan OR $ ping -c 4 centos
On the Host 2, we have setup Apache HTTP server. So we can also test if the name translation service is working as follows by going to URL http://centos.tecmint.lan.
Important: To use the domain names on any host on the network, you must configure the above settings in its /etc/hosts file.
What does this mean, in the above example, we only configured the hosts file of Host 1 and we can only use the domain names on it. To use the same names on Host 2, we have to add the addresses and names to its hosts file as well.
Lastly, you should use host command or nslookup command to test if the name translation service is actually working, these commands only query DNS and overlook any configurations in /etc/hosts and /etc/nsswitch.conf files.
You may also like to read these following related articles.
- Install and Configure Caching-Only DNS Server in RHEL/CentOS 7
- Setup a Basic Recursive Caching DNS Server and Configure Zones for Domain
- 8 Linux Nslookup Commands to Troubleshoot DNS (Domain Name Server)
- Useful ‘host’ Command Examples for Querying DNS Lookups
That’s it! Do share any additional thoughts or questions about this topic with us, via the comment section below.