dnsmasq is a very powerful tool that can provide basic dns services/caching, act as dhcp server and also as tftp server.
To install dnsmasq, run
apt install dnsmasq
When you start dnsmasq, if it complain about port 53 alreay in use
dnsmasq: failed to create listening socket for port 53: Address already in use
This is because some other service is running on port 53. To find what service is listening on port 53, run
root@first-vm:~# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 4934/sshd: /usr/sbi tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 93/systemd-resolved tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 26081/mysqld tcp6 0 0 :::2222 :::* LISTEN 4934/sshd: /usr/sbi tcp6 0 0 :::80 :::* LISTEN 10467/apache2 tcp6 0 0 :::3128 :::* LISTEN 17606/(squid-1) root@first-vm:~#
In this case, it is systemd-resolved. To stop it, run
systemctl disable systemd-resolved systemctl stop systemd-resolved
Now you can start dnsmasq with
systemctl start dnsmasq
After starting dnsmasq, if you try resolve a domain, it will fail
root@first-vm:~# nslookup yahoo.com localhost ;; connection timed out; no servers could be reached root@first-vm:~#
This is because default configuration don’t have anything enabled. To enable DNS caching/resolver, you need to edit file
vi /etc/dnsmasq.conf
Add line
server=8.8.8.8 server=1.1.1.1
Restart dnsmasq
systemctl restart dnsmasq
Now you will be able to resolve domain name using localhost as the dns server.
root@first-vm:~# nslookup serverok.in localhost Server: localhost Address: ::1#53 Non-authoritative answer: Name: serverok.in Address: 172.67.133.148 Name: serverok.in Address: 104.21.14.2 Name: serverok.in Address: 2606:4700:3030::ac43:8594 Name: serverok.in Address: 2606:4700:3035::6815:e02 root@first-vm:~#
If you need dnsmasq listen to only local ip, add following in /etc/dnsmasq.conf and restart dnsmasq.
listen-address=127.0.0.1
If you need to override MX record for a domain, you can add following to dnsmasq.conf
mx-host=example.com,mail.example.com,5
To set txt record for a domain
txt-record=example.com,"v=spf1 a -all"
See dnsmasq