an authoritative dns server (SOA dns) will be used to declare that the server is authoritative for certain domain names.
which will make it easy to define lots of sub-domains without having to change the registrar settings.
I chose to use nsd, but I could have used knot
it's preferable to install the domain name server in a virtual machine rather than in the hypervisor to make backups easier.
install the nsd package available in Debian
aptitude install nsd
we'll have to edit a few files, then edit an additional file for each dns zone
/etc/nsd/nsd.conf:
# NSD configuration file for Debian.
#
# See the nsd.conf(5) man page.
#
# See /usr/share/doc/nsd/examples/nsd.conf for a commented
# reference config file.
server:
# log only to syslog.
log-only-syslog: yes
ip-address: 2a02:8428:753:5002:97dc:9048:0:53
ip-address: 192.168.1.7
# use this number of cpu cores
server-count: 1
# We recommend leaving this empty, otherwise use "/var/db/nsd/nsd.db"
database: ""
# the default file used for the nsd-control addzone and delzone commands
# zonelistfile: "/var/db/nsd/zone.list"
# The unprivileged user that will run NSD, can also be set to "" if
# user privilige protection is not needed
username: nsd
# Default file where all the log messages go
#logfile: "/var/log/nsd.log"
# Use this pid file instead of the platform specific default
pidfile: "/var/run/nsd.pid"
# don't answer VERSION.BIND and VERSION.SERVER CHAOS class queries
hide-version: yes
hide-identity: yes
# Enable if privilege "jail" is needed for unprivileged user. Note
# that other file paths may break when using chroot
# chroot: "/etc/nsd/"
# The default zone transfer file
# xfrdfile: "/var/db/nsd/xfrd.state"
# The default working directory before accessing zone files
# zonesdir: "/etc/nsd"
# The following line includes additional configuration files from the
# /etc/nsd/nsd.conf.d directory.
include: "/etc/nsd/nsd.conf.d/*.conf"
we add a zone file, in my case I have a zone for err404.numericore.com and sub-domains like visio.err404.numericore.com and another zone for ikce.numericore.com
/etc/nsd/nsd.conf.d/zones.conf:
zone:
name: ikce.numericore.com
zonefile: /etc/nsd/nsd.conf.d/ikce.numericore.com.zone
zone:
name: err404.numericore.com
zonefile: /etc/nsd/nsd.conf.d/err404.numericore.com.zone
Beware, there's a trap that has stuck me for quite a long time:
in the line @ IN SOA ns.err404.numericore.com. err404.numericore.com. (the field err404.numericore.com. is actually an email address
on the other hand, be careful not to forget the period after domain names
I use public ip:
the line containing Serial is simply a serial number that must be strictly increasing each time the file is updated, so we'll often use a current date and increment
/etc/nsd/nsd.conf.d/err404.numericore.com.zone:
$ORIGIN err404.numericore.com.
$TTL 7200
@ IN SOA ns.err404.numericore.com. err404.numericore.com. (
2021042514 ; Serial
7200 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum
; NAMESERVERS
@ IN NS ns.err404.numericore.com.
ns IN A 77.129.238.159
ns IN AAAA 2a02:8428:753:5002:97dc:9048:0:53
; A RECORDS
@ A 77.129.238.159
@ AAAA 2a02:8428:753:5002:fcb3:ff:fe8a:3b80
visio A 77.129.238.159
visio AAAA 2a02:8428:753:5002:fcb3:ff:fe8a:3b80
$ORIGIN err404.numericore.com. will be used as variable for the rest of the file
@ will be replaced by the variable $ORIGIN
so we will define ip for err404.numericore.com and visio.err404.numericore.com.
and finally, on the box, redirect ports 53 to the ip of the machine hosting the authoritative dns server –authoritative–.