Configure DNS to ensure smooth internet functionality by translating human-readable domain names (like www.example.com
) into IP addresses that computers can understand. DNS is a critical component of networking and is essential for accessing websites and online services. Configuring DNS on Linux allows you to manage how domain names are resolved on your system, whether you’re setting up a DNS server or configuring your system to use specific DNS resolvers.

In this guide, we will walk you through how to configure DNS on a Linux server, including setting up a local DNS server and configuring DNS settings for clients.
Prerequisites
Before configuring DNS on your Linux system, ensure the following:
- Linux Distribution: DNS can be configured on most Linux distributions, such as Ubuntu, CentOS, Debian, and RHEL.
- Root Access: You will need root or sudo access to install and configure DNS settings on your system.
- Basic Knowledge of DNS: It’s helpful to have a basic understanding of how DNS works, including terms like resolver, zone, and record types (A, CNAME, MX, etc.).
Configure DNS on Linux
Configure DNS on Linux to manage domain name resolution and ensure smooth network communication. Proper DNS setup translates domain names into IP addresses, allowing your server to connect to websites, services, and other systems efficiently.
Step 1: Configure DNS Resolver
If you’re configuring DNS for a client machine or a server that uses an external DNS resolver, you’ll need to edit the DNS settings in the system configuration files.
Configure DNS on Ubuntu/Debian
- Edit the
resolv.conf
file
The resolv.conf
file contains the DNS servers that the system will use to resolve domain names. To configure DNS on a system running Ubuntu or Debian, edit this file:
sudo nano /etc/resolv.conf
- Add DNS Server Entries
Add your desired DNS servers (you can use Google’s public DNS or Cloudflare’s DNS, for example):
nameserver 8.8.8.8 # Google's public DNS
nameserver 8.8.4.4 # Google's public DNS (secondary)
Alternatively, use Cloudflare’s public DNS:
nameserver 1.1.1.1 # Cloudflare's public DNS
nameserver 1.0.0.1 # Cloudflare's secondary DNS
- Save and Exit
Save the file and exit the editor (CTRL + O
to save and CTRL + X
to exit for nano
).
- Restart Network Service
Restart the network service to apply the changes:
sudo systemctl restart networking
This will make the changes effective.
Configure DNS on CentOS/RHEL
- Edit the
resolv.conf
file
For CentOS or RHEL, the process is similar. Edit the resolv.conf
file:
sudo nano /etc/resolv.conf
- Add DNS Server Entries
Add the nameserver lines for your desired DNS servers:
nameserver 8.8.8.8 # Google's public DNS
nameserver 8.8.4.4 # Google's secondary DNS
- Save and Exit
Save and close the file (CTRL + O
, CTRL + X
for nano
).
- Restart Network Service
Restart the network service to apply the changes:
sudo systemctl restart network
Step 2: Set Up a Local DNS Server
If you want to set up a local DNS server to handle domain name resolution on your network, you can use BIND9 (Berkeley Internet Name Domain), which is one of the most widely used DNS servers on Linux systems.
Install BIND9
- Install BIND9 on Ubuntu/Debian
To install BIND9 on an Ubuntu or Debian-based system, use the following commands:
sudo apt update
sudo apt install bind9 bind9utils bind9-doc dnsutils
- Install BIND9 on CentOS/RHEL
On CentOS or RHEL, install BIND9 with the following:
sudo yum install bind bind-utils
- Enable and Start BIND9 Service
After installation, enable and start the BIND9 service:
sudo systemctl enable bind9 sudo systemctl start bind9
For CentOS/RHEL:
sudo systemctl enable named sudo systemctl start named
Configure BIND9 for Local DNS Resolution
- Edit the BIND9 Configuration File
The main configuration file for BIND9 is located at /etc/bind/named.conf
. Open it for editing:
sudo nano /etc/bind/named.conf.options
- Configure Forwarders (Optional)
Add external DNS servers to be used as forwarders. This allows your local DNS server to forward queries it can’t resolve to an upstream DNS server, such as Google’s public DNS:
forwarders { 8.8.8.8; # Google's DNS 8.8.4.4; # Google's secondary DNS };
This ensures that any queries your local DNS server cannot resolve will be forwarded to the specified DNS servers.
- Allow Queries from Local Network
In the named.conf.local
file (or within the named.conf.options
file), add a allow-query
directive to allow queries from your local network:
allow-query { 192.168.1.0/24; }; # Allow from local network (adjust IP range)
This restricts DNS queries to devices within your local network. Replace 192.168.1.0/24
with the appropriate IP range for your network.
- Configure Local Zone File
If you want your DNS server to handle local domain names, you need to configure zone files. For example, to handle localdomain.local
as a local domain, create the zone file:
sudo nano /etc/bind/db.localdomain.local
Example zone file:
$TTL 86400
@ IN SOA ns1.localdomain.local. admin.localdomain.local. (
2023071101 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.localdomain.local.
ns1 IN A 192.168.1.10
IN A 192.168.1.11
- Restart BIND9 Service
After making changes to the configuration, restart the BIND9 service to apply them:
sudo systemctl restart bind9 # For Ubuntu/Debian sudo systemctl restart named # For CentOS/RHEL
Step 3: Test DNS Resolution
Once the DNS server is configured, you can test if it’s working correctly.
- Test DNS Resolution with
dig
Use the dig
command to test DNS resolution: bashCopydig @localhost example.com
If you’ve set up a local domain, try:
dig @localhost localdomain.local
- Test Forwarding DNS
You can also check if DNS queries are being forwarded to the correct DNS servers by using dig
:
dig @your_local_dns_server google.com
Step 4: Set Up DNS Caching
DNS caching improves the speed of DNS lookups by storing resolved domain names for a certain period of time.
- Install
dnsmasq
for DNS Caching
On Ubuntu/Debian:
sudo apt install dnsmasq
On CentOS/RHEL:
sudo yum install dnsmasq
- Configure
dnsmasq
Edit the dnsmasq
configuration file:
sudo nano /etc/dnsmasq.conf
Set it up to use your local DNS server or upstream DNS servers:
server=127.0.0.1 # Use local DNS server
- Start and Enable
dnsmasq
Enable and start the dnsmasq
service:
sudo systemctl start dnsmasq sudo systemctl enable dnsmasq
Conclusion
In this article, we’ve covered how to configure DNS on Linux, including configuring the DNS resolver for a client machine, setting up a local DNS server using BIND9, and optionally implementing DNS caching with dnsmasq
. DNS is a crucial part of networking, and having proper DNS configuration ensures faster domain resolution and enhances the security and reliability of your network.
By following this guide, you can efficiently set up DNS resolution on your Linux system, whether you’re managing a small network, hosting your local domains, or configuring a full DNS server.