How Do I Setup a DNS Server in Linux?


Angela Bailey

How Do I Setup a DNS Server in Linux?

Setting up a DNS server in Linux can seem like a daunting task, but with the right guidance and tools, it can be a relatively straightforward process. In this tutorial, we will walk you through the steps to configure your own DNS server on a Linux machine.


Before we dive into the setup process, let’s make sure you have everything you need:

  • A Linux machine with root access
  • A stable internet connection
  • An understanding of basic networking concepts

Step 1: Installing BIND

The first step is to install BIND (Berkeley Internet Name Domain), which is the most widely used DNS software on Linux. Open your terminal and run the following command to install BIND:

sudo apt-get update
sudo apt-get install bind9

This will download and install BIND along with its dependencies.

Step 2: Configuring BIND

Now that BIND is installed, we need to configure it to act as our DNS server. The configuration files for BIND are located in the /etc/bind directory. Open the named.conf.options file using your favorite text editor:

sudo nano /etc/bind/named.options

In this file, you can specify various options for your DNS server such as listening on specific IP addresses, enabling recursion, and setting up forwarders. Make sure to read through the comments in the file to understand each option properly. Once you have made your desired changes, save the file and exit the text editor.

Example Configuration:

Here’s an example configuration that allows BIND to listen on all interfaces and enables recursion:

options {
    directory "/var/cache/bind";
    recursion yes;
    allow-query { any; };
    forwarders {

Feel free to customize these settings based on your requirements.

Step 3: Creating DNS Zones

In order to serve DNS queries, we need to define the zones that our DNS server will be authoritative for. These zone files contain the mapping between domain names and IP addresses.

To create a new zone, navigate to the /etc/bind directory and create a new file with the name of your domain followed by .db:

cd /etc/bind
sudo nano

In this file, you will define the DNS records for your domain. The most common record types are A (address) records and NS (name server) records.

Here’s an example zone file for the domain

$TTL 86400
@   IN   SOA   ns1.example. admin. 

                 2022010101 ; Serial number
                 86400      ; Refresh
                 7200       ; Retry
                 3600000    ; Expire
                 86400      ; Minimum TTL
@   IN   NS    ns1. @   IN   A
ns1 IN   A     192.10

Save the file and exit the text editor.

Step 4: Restarting BIND

Now that we have configured our DNS server and created the necessary zone files, we need to restart BIND for the changes to take effect. Use the following command to restart the BIND service:

sudo systemctl restart bind9

If there are no errors in your configuration files, BIND should start without any issues.

Testing Your DNS Server

To verify that your DNS server is functioning correctly, you can use the nslookup command-line tool. Simply run the following command, replacing with your domain:


If everything is set up correctly, you should see the IP address associated with your domain name.


Congratulations! You have successfully set up a DNS server on your Linux machine.

By configuring BIND and creating DNS zones, you now have full control over your own DNS infrastructure. Feel free to explore more advanced configurations and features offered by BIND to further enhance your DNS server setup.

Remember to regularly update and maintain your DNS server to ensure optimal performance and security.

Discord Server - Web Server - Private Server - DNS Server - Object-Oriented Programming - Scripting - Data Types - Data Structures

Privacy Policy