How to Install Your DNS Server Using Dnsmasq for Test Environment of Carbonio Community Edition | Carbonio CE

A DNS server becomes very handy on several occasions where you need to define your DNS, disable the automatic DHCP server, and use a static IP. This guide can also be beneficial when you want to deploy and test a Carbonio server in a demo environment.

In this article, you’ll find how to properly install and configure a DNS server using dnsmasq on Ubuntu.

Purpose

Let’s have a very brief introduction to DNS servers and see their purpose.

A Dynamic Host Configuration Protocol (DHCP) server dynamically assigns IP addresses to different devices on a network. It handles default gateways and other network parameters for client devices to communicate properly.

DNS forwarding refers to forwarding DNS requests to a designated DNS server for resolution.

DNS forwarders allow you to forward requests from a local DNS server to a DNS server outside the corporate network, while a DNS caching server answers the recursive requests of clients. This process resolves the DNS queries much faster, improving DNS lookup speeds for previously visited websites.

A DNS server has other purposes besides translating names to IP addresses. For instance, in a mail server, mail transfer agents use a DNS system to locate the most suitable server to deliver e-mail; An MX record provides a mapping between a domain and a mail exchanger. This also provides an additional layer of fault tolerance and load distribution in the server.

What Is dnsmasq?

DNS masquerade or dnsmasq is a lightweight and easy-to-configure DNS forwarder. It is specifically designed to provide a small-scale network with DNS (and optionally DHCP and TFTP) services. It serves the names of local machines that are not included in the global DNS.

How to Install dnsmasq

If you don’t have already installed dnsmasq on your Ubuntu machine, you can easily install it using its default repository as follows:

sudo apt install dnsmasq

Note: On Ubuntu 20.04, you may need to disable the default systemd-resolved service, otherwise after installing dnsmasq, you may experience a conflict with port 53 UDP. To resolve the conflict, execute systemctl disable systemd-resolved && systemctl stop systemd-resolved. If you had already installed dnsmasq, a reboot is required using systemctl restart dnsmasq.

Once it’s installed, you can check the status by:

systemctl status dnsmasq

You must see the service running. If not, you can enable it using:

sudo systemctl start dnsmasq

sudo systemctl enable dnsmasq

The result should be similar to this:

[zextras@localhost ~]$ systemctl status dnsmasq
• dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor pre>
   Active: active (running) since Thu 2022-01-20 15:17:03 CET; lmin 15s ago
 Main PID: 968 (dnsmasq)
    Tasks: 1 (limit: 4810)
   Memory: 672.0K
   CGroup: /system.slice/dnsmasq.service
           └─968 /usr/sbin/dnsmasq -k

Jan 20 15:17:03 localhost.localdomain systemd[1]: Started DNS caching server..
Jan 20 15:17:03 localhost.localdomain dnsmasq[968]: started, version 2.79 cache>
Jan 20 15:17:03 localhost.localdomain dnsmasq[968]: compile time options: IPv6 >
Jan 20 15:17:03 localhost.localdomain dnsmasq[968]: reading /etc/resolv.conf
Jan 20 15:17:03 localhost.localdomain dnsmasq[968]: ignoring nameserver 127.0.0>
Jan 20 15:17:03 localhost.localdomain dnsmasq[968]: read /etc/hosts - 6 address> 
lines 1-15/15 (END)

Configure dnsmasq server

You can configure your dnsmasq server using the /etc/dnsmasq.conf file. Since DNS is enabled by default, we suggest creating a backup of the file before modifying it. To do so, simply run:

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

Now you can modify the /etc/dnsmasq.conf file using your preferred text editor such as nano:

nano /etc/dnsmasq.conf

Insert the following configuration, bearing in mind that these are some example main settings, and you can add some others or change parameters based on your needs:

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

At the end of the configuration, save and exit.

Now you can use the test command to see possible errors as follows:

sudo dnsmasq --test

Let’s dissect each part to understand the settings better:

  • listen-address – Sets the IP address where dnsmasq will be listening. Here we want our server to listen for DHCP and DNS requests on the LAN therefore we set the listen-address to its LAN IP addresses including the localhost 127.0.0.1. Note that the server IP must be static. To see how to configure a static IP, please refer to How to Set Up a Static IP Address on Ubuntu Server.
  • interface – Restricts the interface to which the dnsmasq listens. You can add more lines for more interfaces.
  • domain – Sets the domain. This means DHCP clients will have the fully qualified domain names (FQDN) as the domain you set. It also sets the domain DHCP option for all clients.
  • address – Forces your local domain to an IP address or addresses.
  • nameservers – Forwards DNS requests to whatever upstream DNS servers you specify. For instance, we used public DNS services provided by Google.

Modifying resolv.conf file

Here we’re going to force all queries to be sent to the dnsmasq. To do so, we set the localhost address as the only nameserver by modifying the resolv.conf file as follows:

nano /etc/resolv.conf

Then modify it as follows:

# Set localhost as nameserevr
nameserver 127.0.0.1

Save and exit.

Change the file’s attributes using the chattr command to make our file immutable. This prevents the local network manager from overwriting our changes.

sudo chattr +i /etc/resolv.conf

To confirm if the attribute is set using lsattr command:

sudo lsattr /etc/resolv.conf

You should see the attribute i in the output as follows

sudo lsattr /etc/resolv.conf
----i--------------- /etc/resolv.conf

Defining DNS Hosts and Names

The dnsmasq reads the DNS hosts and names from the hosts file. Therefore we need to modify the /etc/hosts file.

Open the file using:

nano /etc/hosts

Modify it as below:

127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
::1          localhost localhost.localdomain localhost6 localhost6.1ocaldomain6
127.0.0.1        dnsmasq
192.168.56.100   dnsmasq
192.168.56.1     gateway
192.168.56.110   webservertest

Other addresses such as MAAS, Nagios, etc. can be defined in separate lines.

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

Let’s Test Our Local DNS

To test if everything is working fine we can use bind-utils:

You can install it by:

sudo apt install bind-utils

Then query your DNS nameserver:

dig domain.abc

or

nslookup domain.abc

It returns any A record found within the queried hostname’s zone.

Then test the FQDN by:

dig webservertest.domain.abc

or

nslookup webservertest.domain.abc

Now your DNS is set up and ready to continue with Carbonio CE installation to create your test environment. To install Carbonio CE on your server, you can follow this community article:

Real-time Backup and Restore for Zimbra – System Administrators' Most Requested Features | Zimbra
Zextras Suite 3.9.0 | Blog