For additional guidance, check out our community articles detailing the process of migrating from your current platform to Carbonio CE.
For enterprise-level requirements and advanced features, consider checking out Zextras Carbonio – the all-in-one private digital workplace designed for digital sovereignty trusted by the public sector, telcos, and regulated industries.
This article will show you how to install and configure a DNS server using dnsmasq on CentOS 7 / RHEL 7 / CentOS 8 / RHEL 8. This will be a step-by-step walkthrough, very useful in situations like Zimbra installation where you want to use a static IP and define your own DNS and disable the automatic DHCP server.
Brief Introduction
A DHCP (Dynamic Host Configuration Protocol) server dynamically assigns IP addresses and other network configuration parameters to each device on a network.
A DNS forwarder on a LAN forwards DNS queries for non-local domain names to upstream DNS servers (outside that network), while a DNS caching server answers recursive requests from clients so that the DNS query can be resolved faster, thus improving DNS lookup speeds to previously visited sites.
What is DNSMASQ
dnsmasq (DNS masquerade) is a lightweight, easy to configure DNS forwarder, designed to provide DNS (and optionally DHCP and TFTP) services to a small-scale network. It can serve the names of local machines which are not in the global DNS.
1. Install dnsmasq in your CentOS / RHEL Linux
If you don’t have already installed dnsmasq in your CentOS/RHEL Linux, you can easily install it, since it is available in the default repository, with the following command:
sudo yum install dnsmasq
Once you have installed it, you can check the status:
systemctl status dnsmasq
If you find that it is not running, we must start and enable it with the following commands:
sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq
The result should be similar to this:
2. Configure dnsmasq Server
The dnsmasq server can be configured via the /etc/dnsmasq.conf file. Since DNS is enabled by default, we suggest creating a backup of the .conf file before making any changes:
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
Now open the /etc/dnsmasq.conf file using your preferred text editor (we use “nano” )
nano /etc/dnsmasq.conf
and enter the following suggested configuration, bearing in mind that these are some example main settings and you can add some others or change parameters according to your needings:
listen-address=::1,127.0.0.1,192.168.56.100
interface=eth0
domain=domain.abc
address=/domain.abc/127.0.0.1
address=/domain.abc/192.168.56.100
#Google's nameservers
server=8.8.8.8
server=4.4.4.4
Let’s understand better the settings we entered:
listen-address
This option is used to set the IP address where dnsmasq will listen on. In this guide we want our CentOS/RHEL server to listen for DHCP and DNS requests on the LAN, so we are going to set the listen-address to its LAN IP addresses (including the localhost 127.0.0.1).
NOTE: The Server IP must be static. To see how to configure a static IP please refer to the following guide: “Setting up a Static IP Address on CentOS / RHEL”
interface
The interface option is used to restrict the interface dnsmasq listens on. Note that you can add more lines if you mean to have more than one interface.
domain
This option is used to set the domain. This means DHCP clients will have FQDN (fully qualified domain names) while the set domain is the same and also sets the domain DHCP option for all clients.
address
Using the address option, you can force your local domain to an IP address(es)
nameservers
In the example, we used Google’s ones, but you can eventually choose to use a different one, “127.0.0.53”, which is the address of the local caching stub resolver. It forwards DNS requests to whatever upstream DNS servers you specify.
At the end of the configuration, press Ctrl + x to exit, save the configuration and check the syntax for any errors using the following command:
sudo dnsmasq --test
3. Setting Up dnsmasq with resolv.conf File
This short step shows you how to set the localhost address as the only nameserver in resolv.conf file. This is intended to make all queries to be sent to dnsmasq.
Open resolv.conf file:
nano /etc/resolv.conf
Then modify it as follows:
Save and exit.
To prevent the overwriting of our changes by the local daemon (NetworkManager) we are going to set the immutable attribute to our file using the chattr command this way:
sudo chattr +i /etc/resolv.conf
We can also make a quick check if everything is right with lsattr command:
4. Defining DNS Hosts and Names and Testing Local DNS
All the DNS hosts and names are read by dnsmasq from the hosts file, so we need to modify the /etc/hosts file as follows:
nano /etc/hosts
Eventually, you can add some other defined addresses such as MAAS, Nagios, …
Now restart dnsmasq to apply the above changes:
sudo systemctl restart dnsmasq
Note: If you have the firewall service running, then you need to open DNS and DHCP services in its configuration:
sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --add-service=dhcp --permanent
sudo firewall-cmd --reload
To test if everything is working fine we can use bind-utils:
If you don’t have them installed on your system, just run the command:
sudo yum install bind-utils
dig domain.abc
or
nslookup domain.abc
and also test the FQDN:
dig webservertest.domain.abc
or
nslookup webservertest.domain.abc