Skip to main content

Local domain name resolution using /etc/hosts

The /etc/hosts file is a powerful mechanism for managing the information about hosts in the local network in the absence of a local DNS server.

Setup

We have 4 VMs in the local /24 network. The following are the details:
vm-1-ubuntu-16-04 - 10.0.1.11
vm-2-ubuntu-16-04 - 10.0.1.12
vm-1-ubuntu-18-04 - 10.0.1.21
vm-2-ubuntu-18-04 - 10.0.1.22

The VMs are reachable via their IP address but not by their hostnames.


This is problematic because we have to remember their IP addresses everytime we want to access these hosts. It is would be much simpler to remember and access the servers by their hostnames. For that we need some sort of mapping between the IP addresses and their corresponding host names. There are 3 common ways of achieving this mapping.
  1. Setup a DNS server which handles resolution for your local network.
  2. Use an existing DNS server of the local Internet Service Provider (ISP) or any other higher level ISP. Note that a public static IP address is required for this setup.
  3. Handle the name resolution on every host on the local network via the /etc/hosts file.
The first option is the best and least expensive. However, it is not always feasible to setup a local DNS server. First of all, it needs to be setup and maintained. Secondly, it may be a huge overhead for a local network containing a very small number of hosts as is our case.

Since we have only 4 hosts in the network, we'll go for the third option. Let's add entries for all the hosts in the /etc/hosts file on every server.


Test ping and try connecting via the hostname now.



And there you have it! Connected via the hostname.

Use cases

  1. To identify hosts on a local network by their hostnames.
  2. For testing a production setup
    At my work, we run our company website on a public domain name. When there is a new feature development, we need to test it first in a staging environment before adding it to production. We load the updated code on a test server and update our local /etc/hosts file to point the company website URL to the IP address of the test server which is reachable from the local machine. This way the local browser resolves the website domain to the IP specified in the /etc/hosts file and we can easily test the new features.

Modifying the /etc/hosts file is one of the simplest ways of overriding or substituting the DNS name resolution for local network.

Have you used any innovative ways of resolving local domain names? Let me know in the comments.

Comments

Popular posts from this blog

Programmer's Guide: The "set" command in bash

The "set" command in shell allows you to set various shell options and positional parameters. The purpose of this post is to highlight how much this command has been helpful to me in my bash programming. I would not go into much depth about all the possible flag, because you can find many posts and documentation on the internet, like this post by GNU, which cover all the possible options that the "set" command provides. I will mainly focus on two options, The " set -x " option:  This option allows us to print commands and their arguments, after they are expanded (interpolated) but before they are executed. Let us execute a simple hello world programme in bash.   When the programme is executed, we see the entire printf statement being printed before the actual "Hello World!" message is printed. This way, we can check the command that is being executed along with its output. Setting the flag also expands any variables or ar...

Network scanning with nmap

nmap or network mapper is a great open-source tool for network scanning and port discovery. The detailed description of nmap is available on its official website . An interesting fact about nmap and its wide ranging applications from the website :p "...It was even featured in twelve movies , including The Matrix Reloaded , Die Hard 4 , Girl With the Dragon Tattoo , and The Bourne Ultimatum ." Hoping that this has generated enough curiosity in you, lets focus on the very basic use of nmap in network subnet scanning. Network scanning is useful to detect hosts in the network that are reachable from the server on which nmap is run. It is also useful in security auditing of the servers exposed to internet. We have a setup of 4 VMs on a local network with each having an IP address. The local network subnet is defined as 10.0.1.1/24 and the IPs in the below images verify this fact. The goal is to verify that nmap is able to detect all the hosts in the local subnet 10...

True or False with Bash

One of the first rules that is taught in any programming course is that 0 means False and anything that is non-zero is considered True. But when you come to system programming in Unix environment, you need to completely forget this basic programming rule. In unix shells, this rule is flipped and 0 means true / success while anything non-zero means false / failure. Every executed command in unix shells returns an exit status according to this convention. Let's see some examples in bash We will use the echo $? to get the exit status for the previously executed command. (The detailed explanation of this command is out of the scope of this article) The first example is as always to print "Hello World!" There are two ways of printing "Hello World!" as shown above. In both the cases, the exit status is 0 as the printing is successful. Let's check the true and false variables. As you can see, false returns 1. Another example using conditionals. ...