un serveur dns authoritaire (dns SOA) va être utilisé pour déclarer que le serveur fait autorité sur certains noms de domaines. ce qui permettra de définir facilement plein de sous-domaines sans avoir à changer les parametres chez le registrar. j'ai choisi d'utiliser [[https://www.nlnetlabs.nl/projects/nsd/about/|nsd]], mais j'aurais pu utiliser [[https://www.knot-dns.cz/|knot]] il est préférable d'installer le serveur de nom de domaine dans une machine virtuelle plutôt que dans l'hyperviseur de façon à faciliter les sauvegardes.
# 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"
on ajoute un fichier de zone, dans mon cas j'ai une zone pour ''err404.numericore.com'' et les sous-domaines comme ''visio.err404.numericore.com'' et une autre zone pour ''ikce.numericore.com''
===== zones.conf =====
/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
===== err404.numericore.com.zone =====
/!\ Attention, il y a un piège qui m'a bloqué assez longtemps:
dans la ligne ''@ IN SOA ns. err404.numericore.com. ( '' le champs ''err404.numericore.com.'' est en réalité une adresse email
d'autre part il faut faire bien attention à ne pas oublier le point final après les noms de domaines
j'utilise les ip publiques:
* en ipv4 je vais utiliser l'ip publique de la box et faire une redirection du port 53 vers la machine qui héberge mon service dns
* en ipv6 je vais directement indiquer l'ipv6 publique de la machine qui héberge mon service dns
la ligne contenant Sérial est simplement un numéro de série qui doit être strictement croissant à chaque mise à jour du fichier, donc souvent on va utiliser une date du jour et incrémenter
/etc/nsd/nsd.conf.d/err404.numericore.com.zone:
$ORIGIN err404.numericore.com.
$TTL 7200
@ IN SOA ns. err404.numericore.com. (
2021042514 ; Serial
7200 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum
; NAMESERVERS
@ IN NS ns.
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.'' va être utilisé comme variable pour le reste du fichier
''@'' va être remplacé par la variable ''$ORIGIN''
donc on va définir des ip pour ''err404.numericore.com'' et ''visio.err404.numericore.com''
====== la box ======
et enfin sur la box il faut rediriger les ports 53 vers l'ip de la machine qui héberge le serveur dns --autoritaire-- qui fait autorité