docs/src/dns.md

8.3 KiB

Le DNS

Le DNS (Domain Name System) est un système de distribution d'informations correspondant à des noms de domaines. Il est notamment utilisé pour obtenir des adresses IP à partir d'un nom de domaine, mais peut servir à obtenir n'importe quelle information suffisamment courte à partir d'un nom de domaine.

  1. Le client DNS demande l'adresse IPv6 de fr.wikipedia.org. à un résolveur DNS récursif
  2. Le résolveur DNS récursif demande l'adresse de fr.wikipedia.org. à ., l'un serveur racine.
  3. Le serveur racine ne connait pas cette information, mais il sait comment s'en rapprocher : il répond l'adresse du serveur qui gère org..
  4. Le résolveur DNS récursif demande l'adresse de fr.wikipedia.org. au serveur de org.
  5. Le serveur qui gère org. n'a pas cette information, mais sait comment s'en rapprocher et répond l'adresse du serveur qui gère wikipedia.org..
  6. Le résolveur DNS récursif demande l'adresse de fr.wikipedia.org. au serveur qui gère wikipedia.org..
  7. Cette information se trouve directement dans la zone servie par ce serveur, il lui répond donc l'adresse IPv6 de fr.wikipedia.org..
  8. Le résolveur DNS récusif répond finalement l'adresse IPv6 reçue au client DNS qui avait initié la demande.

Les enregistrements DNS

Un enregistrement DNS est composé de plusieurs parties :

<domaine> <classe> <type> <ttl> <contenu>
<domaine>
Le domaine concerné par l'enregistrement
<classe>
Toujours IN (pour Internet)
<type>
Le type de donnée contenue, voir description des types possible après dans la page
<ttl>
Temps pendant lequel l'enregistrement peut être gardé en cache
<contenu>
Dépends du type d'enregistrement

Le cache

En réalité, un résolveur DNS récursif correct ne fera pas toutes ces requêtes à chaque fois. Il garde les données reçu des serveurs ayant autorité pendant la période de validité indiquée par ceux-ci, cette période s'appelle le TTL (Time-To-Live, temps à vivre). Cela permet de ne pas surcharger les serveurs ayant autorité les plus haut placés, qui devraient sans le cache des résolveurs répondre à beaucoup plus de requêtes.

Ce mécanisme signifie toutefois que la modification d'un enregisrement n'est assurée d'être effective partout qu'une fois que la durée du TTL précédent a expiré.

Les enregistrements multiples

Il peut exister plusieurs valeurs pour un même type d'enregistrement et même domaine.

Ainsi, il est probable que le résolveur reçoivent plusieurs adresses de serveurs ayant autorité pour un domaine ou que le client recoive plusieurs adresses IPv6 pour le domaine demandé ; le résolveur ou le client n'utilisera alors généralement qu'une seule de ces adresses, choisie aléatoirement. Si jamais l'adresse ne fonctionne pas, l'une des autres adresses reçues sera essayée, ce qui permet une meilleure résistance aux pannes de serveurs.

DNSSEC

DNSSEC est un système permettant de signer les données du DNS afin de permettre la vérification de leur intégrité.

Toutes les enregistrements DNS sont signés par le serveur ayant autorité dans la zone, et sa clé publique est publiée dans la zone parente. Pour la clé publique du serveur racine, qui n'a pas de zone parente, elle est préchargée dans les client DNS qui valident DNSSEC.

Types d'enregistrements

NS

Un enregistrements NS indique le serveur de noms qui a autorité pour un domaine. Pour s'assurer de la disponibilité du DNS, on en utilise généralement plusieus hébergés à des endroits différents, afin de mitiger les pannes.

Doit pointer vers un domaine qui dispose d'un enregistrement A/AAAA.

domain.exemple. 10800 IN NS ns1.dnshost.exemple.
domain.exemple. 10800 IN NS ns2.dnshost.exemple.
domain.exemple. 10800 IN NS ns3.dnshost.exemple.

A et AAAA

Permet l'enregistrement d'une adresse au format IPv4 pour A et IPv6 pour AAAA

Il est recommandé d'indiquer les 2 si possible :

  • l'IPv4 pour être compatible avec les infrastructures internet vétustes qui sont encore nombreuses
  • l'IPv6 pour être compatible avec l'internet moderne qui offre plus de possibilités
host.exemple. 10800 IN AAAA 2001:db8::3
host.exemple. 10800 IN A    203.0.113.42

TXT

Contient du texte.

antopie.org. 172800 IN TXT "v=spf1 a mx -all"

CAA

Limiter les autorités de certification autorisées à émettre des certificats

antopie.org. 172800 IN CAA 0 issue "letsencrypt.org"
antopie.org. 172800 IN CAA 0 iodef "mailto:miraty+caa@antopie.org"

SRV

Indiquer l'adresse d'un service spécifique.

Note : pour des raisons historiques et malgré la meilleure flexibilité permise par les enregistrements SRV, le DNS utilise les enregistrements NS, SMTP utilise le plus souvent les enregistrements MX, et HTTP utilise le plus souvent directement les enregistrements A/AAAA.

Syntaxe

_<service>._<protocole>.exemple. 10800 IN SRV <malus> <poids> <port> <cible>
<service>
Nom arbitraire du service (exemples : submission, imap, imaps, http, mumble, xmpp-server, xmpp-client, matrix, ldap, stun, stuns, turn, turns...)
<protocole>
Protocole de transport sur IP, selon le service généralement tcp ou udp
<malus> [0-65535]
Les enregistrements avec la plus petite valeur seront utilisés d'abord Un enregistrement ne sera utilisé que si les enregistrements avec un malus moindre ne sont pas joignables.
<poids> [0-65535]
Pour des enregistrements avec le même malus, la probabilité d'être d'utilisé est proportionnelle à cette valeur
<port>
Port de l'hôte du service
<cible>
Domaine absolu de l'hôte du service

Exemples

_matrix._tcp.im.exemple. 86400 IN SRV 10 0 8448 a.im.exemple.
_matrix._tcp.im.exemple. 86400 IN SRV 5 50 1312 b.im.exemple.
_matrix._tcp.im.exemple. 86400 IN SRV 5 25 8448 c.im.exemple.

Signifie : Pour le service Matrix de im.exemple :

  1. Utiliser avec 1 chance sur 3 c.im.exemple:8448 et avec 2 chances sur 3 b.im.exemple:1312
  2. Si aucun de ces 2 serveur n'est joignable, utiliser a.im.exemple:8448
_xmpp-client._tcp.im.example. 86400 IN SRV 5 0 5222 xmpp.im.example.
_xmpp-server._tcp.im.example. 86400 IN SRV 5 0 5269 xmpp.im.example.

MX

Indiquer l'adresse du serveur recevant les courriels

example. 172800 IN MX 10 smtp.exemple.

SSHFP

Indiquer les empreintes des clés SSH

Algorithme

1
RSA
2
DSA
3
ECDSA
4
Ed25519
6
Ed448

Type

1
SHA-1
2
SHA-256

Exemples

ssh.example. SSHFP 4 2 7df9c981c9228fc9e4bff50e1d1ef8774a0f3496179f48fc8041ba746315c87a

TLSA

Mettre en place DANE, pour permettre l'authentification des entitées nommée par le DNS

Usage

0 (PKIX-TA)
Le certificat de l'entité doit être signé par ce certificat, ainsi que par une autorité de certification confiancée par le client
1 (PKIX-EE)
Le certificat de l'entité doit être le même, et doit être signé par une autorité de certification confiancée par le client
2 (DANE-TA)
Le certificat de l'entité doit être signé par ce certificat, et n'a pas à être signé par une autorité de certification
3 (DANE-EE)
Le certificat de l'entité doit être le même, et n'a pas à être signé par une autorité de certification

Selecteur

0
Certificat entier
1
Seulement la clé publique du certificat

Méthode de correspondance

0
Directe
1
SHA-256
2
SHA-512

Exemple

_443._tcp.host.example. 172800 IN TLSA 2 1 1 0B9FA5A59EED715C26C1020C711B4F6EC42D58B0015E14337A39DAD301C5AFC3

CNAME

Définir un domaine comme étant l'alias d'un autre

blog.example. 86400 IN CNAME host.example.
www.example.  86400 IN CNAME host.example.
play.example. 86400 IN CNAME host.example.
host.example. 10800 IN AAAA  2001:db8::3
host.example. 10800 IN A     203.0.113.42

DNAME

Définir les sous-domaines d'un domaine comme étant les alias des sous-domaines d'un autre domaine

LOC

Indiquer des coordonnées géographiques

d1 [m1 [s1]] "N"|"S" d2 [m2 [s2]] "E"|"W" alt["m"] [siz["m"] [hp["m"] [vp["m"]]]]

Avec :

d1 [0 .. 90]
Degrés en latitude
d2 [0 .. 180]
Degrés en longitude
m1, m2 [0 .. 59]
Minutes
s1, s2 [0 .. 59.999]:
Secondes
alt [-100000.00 .. 42849672.95]
Altitude en mètres
siz, hp, vp [0 .. 90000000.00]
(size/precision in meters)
exemple. 172800 IN LOC 49 0 0.000 N 2 0 0.000 W 0.00m 10m 0.00m 0.00m