DNS server at home
◾ Damien ROTH
At the beginning of the year, I finally received my first Raspberry Pi ! I have got a lot of ideas which can use it like a magic mirror. But for this first one, I will simply use it a my home server with a PiDrive storage extension.
Once I got Raspbian installed, I started to look into setting up the DNS server, the end goal is to have domain names for almost all devices on my internal network (e.g. instead of 192.168.1.14, I can use mydevice.home.lan).
DNS software
After some googling, I have found dnsmasq which is a lightweight alternative to bind. Here is a list of the functionalities is decided to use:
- DNS for static IPs - Define domain names for devices with static IPs on your network
- DNS forwarding and cache - Continue to use a default DNS server (in my case my ISP’s DNS server) and caching it’s response to increase performances
I could also use the DHCP feature of dnsmasq but I am satisfied by the one of my ISP router so I will continue to use it.
Picking an internal domain
The recommendation is to use a domain which I already own. But at the time I am writing this post I don’t own one.
I have searched for a TLD not used by the ICANN (here is the list) and decided to use the .lan
TLD.
The full domain of my home will now be home.lan
.
Installation and configuration
Since Raspbian is a debian based OS, the installation is simple :
sudo apt-get install dnsmasq
For my setup, the configuration happens in the following files:
- /etc/dnsmasq.conf - dnsmasq specific configuration
- /etc/hosts - Hostnames for the static IPs
/etc/dnsmasq.conf
This configures how the DNS server should behave. I will only display the changes I have done in this file.
Speeding up DNS requests
# won't forward unqualified names (e.g. myserver)
domain-needed
# won't forward some non-routed addresses
bogus-priv
# won't forward requests for your intranet subdomain
local=/lan.mydomain.com/
Specify root domain of my intranet
# append the domain (below) to all hosts in the hosts file
expand-hosts
# appended to DHCP hosts and, if above option specified, to hosts from static IPs
domain=lan.mydomain.com
/etc/hosts
This file will contains the mapping between the static IPs and the domain name. I have extended the original file with the following lines :
192.168.0.1 router
192.168.0.100 printer
192.168.0.150 pi
Note: since I enabled the expand-hosts
options I do not need to write the full domain name in the hosts
file (e.g. router
will become router.home.lan
).