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.
et dans mon cas j'ai choisi d'installer le serveur dns autoritaire dans la même machine qui fait [[notes:formation_webperso:rpsni|reverse proxy SNI]]
{{ :notes:formation_webperso:rpsni:ipv4_vs_ipv6_dns_SOA.svg |}} ====== nsd ====== on installe le paquet ''nsd'' disponible dans Debian ''aptitude install nsd'' on va avoir quelques fichiers à éditer, puis éditer un fichier supplémentaire par zone dns ===== nsd.conf ===== ''/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" 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é