Suivant: , Précédent: , Monter: Services   [Table des matières][Index]


8.8.18 Services DNS

Le module (gnu services dns) fournit des services liés au système de noms de domaines (DNS). Il fournit un service de serveur pour héberger un serveur DNS faisant autorité pour plusieurs zones, en esclave ou en maître. Ce service utilise Knot DNS. Il fournit aussi un service de cache et de renvoie DNS pour le LAN, qui utilise dnsmasq.

Service Knot

Voici un exemple de configuration pour un serveur faisant autorité sur deux zone, un maître et un esclave :

(define-zone-entries example.org.zone
;; Name TTL Class Type Data
  ("@"  ""  "IN"  "A"  "127.0.0.1")
  ("@"  ""  "IN"  "NS" "ns")
  ("ns" ""  "IN"  "A"  "127.0.0.1"))

(define master-zone
  (knot-zone-configuration
    (domain "example.org")
    (zone (zone-file
            (origin "example.org")
            (entries example.org.zone)))))

(define slave-zone
  (knot-zone-configuration
    (domain "plop.org")
    (dnssec-policy "default")
    (master (list "plop-master"))))

(define plop-master
  (knot-remote-configuration
    (id "plop-master")
    (address (list "208.76.58.171"))))

(operating-system
  ;; ...
  (services (cons* (service knot-service-type
                     (knot-configuration
                       (remotes (list plop-master))
                       (zones (list master-zone slave-zone))))
                   ;; ...
                   %base-services)))
Variable Scheme : knot-service-type

C’est le type pour le serveur DNS Knot.

Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu’il peut servir plusieurs zones, c’est-à-dire des noms de domaines que vous achetez à un registrar. Ce serveur n’est pas un résolveur, ce qui signifie qu’il ne peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce serveur peut être configuré pour servir des zones comme un serveur maître ou comme un serveur esclave, en fonction des zones. Les zones esclaves récupèrent leurs données des maîtres, et seront servies comme faisant autorité. Du point de vue d’un résolveur, il n’y a pas de différence entre un maître et un esclave29.

Les types de données suivants sont utilisés pour configurer le serveur DNS Knot :

Type de données : knot-key-configuration

Type de données représentant une clef. Ce type a les paramètres suivants :

id (par défaut : "")

Un identifiant pour d’autres champs de configuration qui se réfèrent à cette clef. Les ID doivent être uniques et non vides.

algorithm (par défaut : #f)

L’algorithme à utiliser. Choisissez entre #f, 'hmac-md5, 'hmac-sha1, 'hmac-sha224, 'hmac-sha256, 'hmac-sha384 et 'hmac-sha512.

secret (par défaut : "")

La clef secrète elle-même.

Type de données : knot-acl-configuration

Type de données représentant une configuration de liste de contrôle d’accès (ACL). Ce type a les paramètres suivants :

id (par défaut : "")

Un identifiant pour d’autres champs de configuration qui se réfèrent à cette clef. Les ID doivent être uniques et non vides.

address (par défaut : '())

Une liste ordonnée d’adresses IP, de sous-réseaux ou d’intervalles de réseaux représentés par des chaînes de caractères. La requête doit correspondre à l’une d’entre elles. La valeur vide signifie que l’adresse n’a pas besoin de correspondre.

key (par défaut : '())

Une liste ordonnées de références à des clefs représentés par des chaînes. La chaîne doit correspondre à un ID définie dans un knot-key-configuration. Aucune clef signifie qu’une clef n’est pas nécessaire pour correspondre à l’ACL.

action (par défaut : '())

Une liste ordonnée d’actions permises ou interdites par cet ACL. Les valeurs possibles sont une liste de zéro ou plus d’éléments entre 'transfer, 'notify et 'update.

deny? (par défaut : #f)

Lorsque la valeur est vraie, l’ACL définie des restrictions. Les actions listées sont interdites. Lorsque la valeur est fausse, les actions listées sont autorisées.

Type de données : zone-entry

Data type representing a record entry in a zone file. This type has the following parameters:

name (par défaut : "@")

Le nom de l’enregistrement. "@" se réfère à l’origine de la zone. Les noms sont relatifs à l’origine de la zone. Par exemple, dans la zone example.org, "ns.example.org" se réfère en fait à ns.example.org.example.org. Les noms qui finissent par un point sont absolus, ce qui signifie que "ns.example.org." se réfère bien à ns.example.org.

ttl (par défaut : "")

La durée de vie (TTL) de cet enregistrement. S’il n’est pas indiqué, le TTL par défaut est utilisé.

class (par défaut : "IN")

La classe de l’enregistrement. Knot ne supporte actuellement que "IN" et partiellement "CH".

type (par défaut : "A")

Le type d’enregistrement. Les types usuels sont A (une adresse IPv4), NS (serveur de nom) et MX (serveur de courriel). Bien d’autres types sont définis.

data (par défaut : "")

Les données contenues dans l’enregistrement. Par exemple une adresse IP associée à un enregistrement A, ou un nom de domaine associé à un enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à l’origine à moins qu’ils ne finissent par un point.

Type de données : zone-file

Type données représentant le contenu d’un fichier de zone. Ce type a les paramètres suivants :

entries (par défaut : '())

La liste des entrées. On s’occupe de l’enregistrement SOA, donc vous n’avez pas besoin de l’ajouter dans la liste des entrées. Cette liste devrait contenir une entrée pour votre serveur DNS primaire faisant autorité. En plus d’utiliser une liste des entrées directement, vous pouvez utiliser define-zone-entries pour définir un objet contenant la liste des entrées plus facilement, que vous pouvez ensuite passer au champ entries de zone-file.

origin (par défaut : "")

Le nom de votre zone. Ce paramètre ne peut pas être vide.

ns (par défaut : "ns")

Le domaine de votre serveur DNS primaire faisant autorité. Le nom est relatif à l’origine, à moins qu’il finisse par un point. Il est nécessaire que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone et qu’il soit associé à une adresse IP dans la liste des entrées.

mail (par défaut : "hostmaster")

Une adresse de courriel pour vous contacter en tant que propriétaire de la zone. Cela se transforme en <mail>@<origin>.

serial (par défaut : 1)

Le numéro de série de la zone. Comme c’est utilisé pour vérifier les changements à la fois par les esclaves et par les résolveurs, il est nécessaire qu’il ne décroisse jamais. Incrémentez-le toujours quand vous faites un changement sur votre zone.

refresh (par défaut : (* 2 24 3600))

La fréquence à laquelle les esclaves demanderont un transfert de zone. Cette valeur est un nombre de secondes. On peut le calculer avec des multiplications ou avec (string->duration).

retry (par défaut : (* 15 60))

La période après laquelle un esclave essaiera de contacter son maître lorsqu’il échoue à le faire la première fois.

expiry (par défaut : (* 14 24 3600))

TTL par défaut des enregistrements. Les enregistrements existants sont considérés corrects pour au moins cette durée. Après cette période, les résolveurs invalideront leur cache et vérifieront de nouveau qu’ils existent toujours.

nx (par défaut : 3600)

TTL par défaut des enregistrement inexistants. Ce TTL est habituellement court parce que vous voulez que vous nouveaux domaines soient disponibles pour tout le monde le plus rapidement possible.

Type de données : knot-remote-configuration

Type de données représentant une configuration de serveurs distants. Ce type a les paramètres suivants :

id (par défaut : "")

Un identifiant pour que les autres champs de configuration se réfèrent à ce serveur distant. les ID doivent être uniques et non vides.

address (par défaut : '())

Une liste ordonnée d’adresses IP de destination. Ces adresses sont essayées en séquence. Un port facultatif peut être donné avec le séparateur @. Par exemple (list "1.2.3.4" "2.3.4.5@53"). Le port par défaut est le 53.

via (par défaut : '())

Une liste ordonnée d’adresses IP sources. Une liste vide fera choisir une IP source appropriée à Knot. Un port facultatif peut être donné avec le séparateur @. La valeur par défaut est de choisir aléatoirement.

key (par défaut : #f)

Une référence à une clef, c’est-à-dire une chaîne contenant l’identifiant d’une clef définie dans un champ knot-key-configuration.

Type de données : knot-keystore-configuration

Type de données représentant une base de clefs pour garder les clefs dnssec. Ce type a les paramètres suivants :

id (par défaut : "")

L’id de cette base de clefs. Il ne doit pas être vide.

backend (par défaut : 'pem)

Le moteur de stockage des clefs. Cela peut être 'pem ou 'pkcs11.

config (par défaut : "/var/lib/knot/keys/keys")

The configuration string of the backend. An example for the PKCS#11 is: "pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so". For the pem backend, the string represents a path in the file system.

Type de données : knot-policy-configuration

Type de données représentant une politique dnssec. Knot DNS est capable de signer automatiquement vos zones. Il peut soit générer et gérer vos clefs automatiquement ou utiliser des clefs que vous générez.

Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK doit être présente dans la zone parente (normalement un domaine de haut niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le hash de votre KSK pour qu’il puisse ajouter un enregistrement DS dans la zone parente. Ce n’est pas automatique et vous devrez le faire à chaque fois que vous changerez votre KSK.

La politique définie aussi la durée de vie des clefs. Habituellement, la ZSK peut être changée facilement et utilise des fonctions cryptographiques plus faibles (avec un paramètre plus faible) pour signer les enregistrements rapidement, donc elles sont changées très régulièrement. La KSK en revanche requiert une interaction manuelle avec le registrar, donc elle change moins souvent et utilise des paramètres plus robustes puisqu’elle ne signe qu’un seul enregistrement.

Ce type a les paramètres suivants :

id (par défaut : "")

L’id de la politique. Il ne doit pas être vide.

keystore (par défaut : "default")

Une référence à une base de clefs, c’est-à-dire une chaîne contenant l’identifiant d’une base de clefs définie dans un champ knot-keystore-configuration. L’identifiant "default" signifie la base par défaut (une base de données kasp initialisée par ce service).

manual? (par défaut : #f)

Indique si la clef est gérée manuellement ou automatiquement.

single-type-signing? (par défaut : #f)

Lorsque la valeur est #t, utilise le schéma de signature Single-Type.

algorithm (par défaut : "ecdsap256sha256")

Un algorithme de clef de signature et de signatures.

ksk-size (par défaut : 256)

La longueur de la KSK. Remarquez que cette valeur est correcte pour l’algorithme par défaut, mais ne serait pas sécurisée pour d’autres algorithmes.

zsk-size (par défaut : 256)

La longueur de la ZSK. Remarquez que cette valeur est correcte pour l’algorithme par défaut, mais ne serait pas sécurisée pour d’autres algorithmes.

dnskey-ttl (par défaut : 'default)

La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la zone. La valeur spéciale 'default signifie la même valeur que le TTL du SOA de la zone.

zsk-lifetime (par défaut : (* 30 24 3600))

La période entre la publication d’une ZSK et l’initialisation d’un nouveau changement.

propagation-delay (par défaut : (* 24 3600))

Un délai supplémentaire pour chaque étape du changement. Cette valeur devrait être assez grande pour couvrir le temps de propagation des données entre le serveur primaire et tous les secondaires.

rrsig-lifetime (par défaut : (* 14 24 3600))

Une période de validité des nouvelles signatures.

rrsig-refresh (par défaut : (* 7 24 3600))

Une période qui indique combien de temps avant l’expiration d’une signature elle sera rafraîchie.

nsec3? (par défaut : #f)

Lorsque la valeur est #t, on utilisera NSEC3 au lien de NSEC.

nsec3-iterations (par défaut : 5)

Le nombre de fois supplémentaires que le hash est effectué.

nsec3-salt-length (par défaut : 8)

La longueur du champ de sel en octets, ajouté au nom du propriétaire avant de hasher.

nsec3-salt-lifetime (par défaut : (* 30 24 3600))

La période de validité des nouveaux champs sel.

Type de données : knot-zone-configuration

Type de données représentant la zone servie par Knot. ce type a les paramètres suivants :

domain (par défaut : "")

Le domaine servi par cette configuration. Il ne doit pas être vide.

file (par défaut : "")

Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les zones maîtres. La valeur vide signifie l’emplacement par défaut qui dépend du nom de domaine.

zone (par défaut : (zone-file))

Le contenu du fichier de zone. Ce paramètre est ignoré par les zones esclaves. Il doit contenir un enregistrement zone-file.

master (par défaut : '())

Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette zone est un maître. Lorsque la valeur est indiquée, cette zone est un esclave. C’est al liste des identifiants des serveurs distants.

ddns-master (par défaut : #f)

Le maître principal. Lorsque la valeur est vide, la valeur par défaut est le premier maître de la liste des maîtres.

notify (par défaut : '())

Une liste d’identifiants de groupe de serveurs esclaves.

acl (par défaut : '())

Une liste d’identifiants d’ACL.

semantic-checks? (par défaut : #f)

Lorsque la valeur est indiquée, cela ajoute plus de vérifications sémantiques à la zone.

disable-any? (par défaut : #f)

Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.

zonefile-sync (par défaut : 0)

Le délai entre une modification en mémoire et sur le disque. 0 signifie une synchronisation immédiate.

zonefile-load (par défaut : #f)

La manière dont le contenu du fichier de zone influe sur le chargement de la zone. Les valeurs possibles sont :

  • #f pour utilise la valeur par défaut de Knot,
  • 'none pour ne pas utiliser le fichier de zone du tout,
  • 'difference pour calculer les différences entre le contenu déjà disponible et le contenu du fichier de zone et les appliquer au contenu actuel de la zone,
  • 'difference-no-serial pour la même chose que 'difference, mais en ignorant le serial du SOA du fichier de zone, pour que le serveur s’en charge automatiquement.
  • 'whole pour charger le contenu de la zone depuis le fichier de zone.
journal-content (par défaut : #f)

La manière dont le journal est utilisé pour stocker la zone et ses changements. Les valeurs possibles sont 'none pour ne pas l’utiliser du tout, 'changes pour stocker les changements et 'all pour stocker le contenu. #f ne met pas en place cette option et la valeur par défaut de Knot est utilisée.

max-journal-usage (par défaut : #f)

La taille maximale du journal sur le disque. #f ne met pas en place cette option et la valeur par défaut de Knot est utilisée.

max-journal-depth (par défaut : #f)

La taille maximale de l’historique. #f ne met pas en place cette option et la valeur par défaut de Knot est utilisée.

max-zone-size (par défaut : #f)

La taille maximale du fichier de zone. Cette limite est prise en charge pour les transferts entrants et les mises à jour. #f ne met pas en place cette option et la valeur par défaut de Knot est utilisée.

dnssec-policy (par défaut : #f)

Une référence à un enregistrement knot-policy-configuration, ou le nom spécial "default". Si la valeur est #f, cette zone n’est pas signée.

serial-policy (par défaut : 'increment)

Une politique entre 'increment et 'unixtime.

Type de données : knot-configuration

Type de données représentant la configuration de Knot. Ce type a les paramètres suivants :

knot (par défaut : knot)

Le paquet Knot.

run-directory (par défaut : "/var/run/knot")

Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et les sockets.

includes (par défaut : '())

Une liste plate de chaînes ou d’objets simili-fichiers qui seront inclus en haut du fichier de configuration.

Cela peut être utile pour gérer des secrets hors-bande. Par exemple, on peut stocker des clefs secrètes dans un fichier hors-bande qui n’est pas géré par Guix, et donc pas visible dans /gnu/store — p. ex. vous pouvez stocker la configuration des clefs secrètes dans /etc/knot/secrets.conf et ajouter ce fichier à la lite includes.

One can generate a secret tsig key (for nsupdate and zone transfers with the keymgr command from the knot package. Note that the package is not automatically installed by the service. The following example shows how to generate a new tsig key:

keymgr -t mysecret > /etc/knot/secrets.conf
chmod 600 /etc/knot/secrets.conf

Also note that the generated key will be named mysecret, so it is the name that needs to be used in the key field of the knot-acl-configuration record and in other places that need to refer to that key.

Cela peut aussi être utilisé pour ajouter des configurations qui ne sont pas prises en charge par cette interface.

listen-v4 (par défaut : "0.0.0.0")

Une adresse IP sur laquelle écouter.

listen-v6 (par défaut : "::")

Une adresse IP sur laquelle écouter.

listen-port (par défaut : 53)

Un port sur lequel écouter.

keys (par défaut : '())

La liste des knot-key-configuration utilisés par cette configuration.

acls (par défaut : '())

La liste des knot-acl-configuration utilisés par cette configuration.

remotes (par défaut : '())

La liste des knot-remote-configuration utilisés par cette configuration.

zones (par défaut : '())

La liste des knot-zone-configuration utilisés par cette configuration.

Knot Resolver Service

Scheme Variable : knot-resolver-service-type

This this the type of the knot resolver service, whose value should be an knot-resolver-configuration object as in this example:

(service knot-resolver-service-type
         (knot-resolver-configuration
           (kresd-config-file (plain-file "kresd.conf" "
net.listen('192.168.0.1', 5353)
user('knot-resolver', 'knot-resolver')
modules = { 'hints > iterate', 'stats', 'predict' }
cache.size = 100 * MB
"))))

For more information, refer its manual.

Data Type : knot-resolver-configuration

Data type representing the configuration of knot-resolver.

package (default: knot-resolver)

Package object of the knot DNS resolver.

kresd-config-file (default: %kresd.conf)

File-like object of the kresd configuration file to use, by default it will listen on 127.0.0.1 and ::1.

garbage-collection-interval (default: 1000)

Number of milliseconds for kres-cache-gc to periodically trim the cache.

Services Dnsmasq

Variable Scheme : dnsmasq-service-type

C’est le type du service dnsmasq, dont la valeur devrait être un objet dnsmasq-configuration comme dans cet exemple :

(service dnsmasq-service-type
         (dnsmasq-configuration
           (no-resolv? #t)
           (servers '("192.168.1.1"))))
Type de données : dnsmasq-configuration

Type de données qui représente la configuration de dnsmasq.

package (par défaut : dnsmasq)

L’objet de paquet du serveur dnsmasq.

no-hosts? (par défaut : #f)

Lorsque la valeur est vraie, ne pas lire les noms d’hôte dans /etc/hosts.

port (par défaut : 53)

Le port sur lequel écouter. Le mettre à zéro désactive complètement les réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.

local-service? (par défaut : #t)

Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le sous-réseau local, c.-à-d. sur un sous-réseau pour lequel une interface existe sur le serveur.

listen-addresses (par défaut : '())

Écoute sur le adresses IP données.

resolv-file (par défaut : "/etc/resolv.conf")

Le fichier où lire l’adresse IP des serveurs de noms en amont.

no-resolv? (par défaut : #f)

Lorsque la valeur est vraie, ne pas lire resolv-file.

servers (par défaut : '())

Spécifiez l’adresse IP des serveurs en amont directement.

cache-size (par défaut : 150)

Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.

negative-cache? (par défaut : #t)

Lorsque la valeur est fausse, désactive le cache des réponses négatives.

Service ddclient

Le service ddclient décrit plus bas lance le démon ddclient, qui prend en charge la mise à jour automatique des entrées DNS pour les fournisseurs de service comme Dyn.

L’exemple suivant montre comment instantier le service avec sa configuration par défaut :

(service ddclient-service-type)

Remarquez que ddclient a besoin d’accéder à des identifiants stockés dans un fichier de secrets, par défaut /etc/ddclient/secrets (voir secret-file plus bas). On s’attend à ce que vous créiez ce fichier manuellement, de manière externe à guix (vous pourriez ajouter ce fichier dans une partie de votre configuration, par exemple avec plain-file, mais il serait lisible pour tout le monde via /gnu/store). Vois les exemples dans le répertoire share/ddclient du paquet ddclient.

Les champs de ddclient-configuration disponibles sont :

paramètre de ddclient-configuration : package ddclient

Le paquet ddclient.

paramètre de ddclient-configuration : integer daemon

La période après laquelle ddclient réessaiera de vérifier l’IP et le nom de domaine.

La valeur par défaut est ‘300’.

paramètre de ddclient-configuration : boolean syslog

Utiliser syslog pour la sortie.

La valeur par défaut est ‘#t’.

paramètre de ddclient-configuration : string mail

Courriel de l’utilisateur.

La valeur par défaut est ‘"root"’.

paramètre de ddclient-configuration : string mail-failure

Courriel de l’utilisateur pour les échecs.

La valeur par défaut est ‘"root"’.

paramètre de ddclient-configuration : string pid

Le fichier de PID de ddclient.

La valeur par défaut est ‘"/var/run/ddclient/ddclient.pid"’.

paramètre de ddclient-configuration : boolean ssl

Activer le support de SSL.

La valeur par défaut est ‘#t’.

paramètre de ddclient-configuration : string user

Spécifie le nm d’utilisateur ou l’ID qui est utilisé pour lancer le programme ddclient.

La valeur par défaut est ‘"ddclient"’.

paramètre de ddclient-configuration : string group

Groupe de l’utilisateur qui lancera le programme ddclient.

La valeur par défaut est ‘"ddclient"’.

paramètre de ddclient-configuration : string secret-file

Fichier de secrets qui sera ajouté au fichier ddclient.conf. Ce fichier contient les paramètres d’authentification utilisés par ddclient. On s’attend à ce que vous le créiez manuellement.

La valeur par défaut est ‘"/etc/ddclient/secrets.conf"’.

paramètre de ddclient-configuration : list extra-options

Options supplémentaires qui seront ajoutées au fichier ddclient.conf.

La valeur par défaut est ‘()’.


Notes de bas de page

(29)

NdT : Voir la conférence en Français de Stéphane Bortzmeyer pour en apprendre plus sur le DNS : https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html


Suivant: , Précédent: , Monter: Services   [Table des matières][Index]