L'enregistrement DNS de type SRV est utilisé pour les services spéciaux.
Qu'est-ce qu'un enregistrement DNS SRV ?
L'enregistrement SRV (Service Resource Record, ou Enregistrement de service) permet de déterminer et d’indiquer quels services sont proposés et disponibles pour un domaine (ou sous-domaine) donné, et de trouver l'hôte rendant un service (par exemple de messagerie instantanée avec XMPP), en ne connaissant que le nom de domaine délégué, par exemple example.org ou apple.example.
Les enregistrements SRV sont souvent utilisés pour les protocoles XMPP, SIP ou LDAP, ainsi que pour l’utilisation d’Office 365 par exemple.
L'enregistrement SRV spécifie un hôte et un port pour des services spécifiques, tels que par exemple la messagerie instantanée, ou encore la VoIP (voix sur IP), etc. La plupart des autres enregistrements DNS spécifient uniquement un hôte (serveur) ou une adresse IP, alors que les enregistrements SRV incluent également un port associé à cette adresse IP. Certains protocoles Internet notamment nécessitent l'utilisation d'enregistrements SRV pour fonctionner.
Quel est le format d'un enregistrement SRV ?
Format type d'un enregistrement SRV :
_service._proto.name. TTL Classe Type d'enregistrement Priorité Poids Port Cible.
Voici un exemple d'enregistrement SRV :
_sip._tcp.exemple.com. 86400 IN SRV 0 10 5060 serveursip.exemple.com.
Dans l'exemple ci-dessus, « _sip » indique le type de service concerné par cet enregistrement SRV (le protocole SIP) et « _tcp » indique le protocole de transport TCP : il s'agit d'une connexion SIP sur le port TCP numéro 5060 (le protocole SIP utilise toujours le port 5060 qui lui est attribué).
L'expression « exemple.com » fait référence à l'hôte (nom de domaine), « serveursip.exemple.com » est le serveur cible et « 5060 » indique le port sur ce serveur.
Les enregistrements SRV doivent obligatoirement pointer vers un enregistrement A (IPv4) ou un enregistrement AAAA (IPv6). Le nom du serveur de pointage ne peut pas être un CNAME. Donc ici le serveur cible « serveursip.exemple.com » doit diriger directement sur un enregistrement A ou AAAA sous le nom de domaine exemple.com.
Quelles informations contient un enregistrement SRV ?
Un enregistrement SRV contient les informations suivantes :
service | SIP |
proto | TCP |
nom | exemple.com |
TTL | 86400 |
classe | IN |
type | SRV |
priorité | 0 |
poids | 10 |
port | 5060 |
cible | serveursip.exemple.com |
Service : Le nom symbolique (commençant généralement par un tiret bas _ (underscore) du service concerné (par exemple _sip).
Proto : Abréviation de « Protocole », généralement c'est soit « _tcp » pour le protocole TCP, soit « _udp » pour UDP.
Nom : Nom de domaine de validité de l'enregistrement (FQDN ou local à la zone DNS en cours de définition pour la même autorité d'origine).
TTL : Champ standard DNS indiquant la durée de validité de l'enregistrement (Time-To-Live, ou durée de vie, en secondes).
Classe : Champ standard DNS indiquant la classe d'adressage (c'est toujours IN pour Internet).
Type : Type d'enregistrement DNS (ici toujours SRV pour un enregistrement de service).
Priorité : La priorité de l'enregistrement ou du serveur cible (valeur entière non négative ; plus la valeur est basse, plus le niveau de priorité de l’enregistrement est élevé − 0 étant la priorité la plus élevée). L’enregistrement qui possède le niveau de priorité le plus élevé est prioritaire. S'il y a plusieurs enregistrements SRV avec différentes priorités pour le même service et un même protocole, un seul enregistrement pour chacune des priorités sera renvoyé en réponse aux serveurs DNS récursifs ou clients DNS : les clients se connecteront en priorité au serveur ayant la valeur de priorité la plus basse parmi les enregistrements retournés, mais si cela échoue, ils pourront alors utiliser le serveur suivant de priorité plus élevée dans la liste des serveurs qui lui auront été retournés, et ainsi de suite. Les différentes priorités permettent de mettre en place des services de secours.
Poids : Le poids de l’enregistrement ; si deux enregistrements ont la même priorité, l’enregistrement ayant le poids le plus élevé est prioritaire. Poids relatif pour les enregistrements de même priorité : valeur entière de 0 à 65535 ; permet aux serveurs DNS autoritaires de retourner aléatoirement un des serveurs cibles avec la même priorité, selon une distribution correspondant au poids indiqué, relativement au poids total des autres enregistrements de même priorité (pour le même service). Le poids indiqué n'a aucune importance ni conséquence s'il n'y a qu'un seul serveur cible, ou s'il y a plusieurs serveurs cibles avec des priorités différentes, pour le même service et le même protocole.
Port : Le numéro de port (TCP ou UDP selon le protocole ci-dessus) où le service est disponible. Il s'agit d'un port de connexion réseau. Dans le domaine des réseaux, les ports sont des emplacements virtuels qui désignent les processus auxquels le trafic réseau est destiné dans une machine. Les ports permettent notamment aux machines de différencier facilement les différents types de trafic. Tout comme les adresses IP, un numéro est attribué à chaque port.
Cible : Le nom du serveur qui fournit le service concerné : doit être résolu en adresse IPv4 ou IPv6 par d'autres requêtes DNS sur les enregistrements A ou AAAA du nom de service cible, avec le protocole voulu et sur le port indiqué.
Comment utiliser la priorité et le poids dans un enregistrement SRV ?
La priorité et poids sont utilisés de façon combinée afin de fournir alternativement et.ou simultanément une répartition de charge et un service de secours.
Dans l'exemple ci-dessous, on utilise à la fois les champs priorité et poids, afin de fournir simultanément une répartition de charge et un service de secours.
_sip._tcp.exemple.com. 86400 IN SRV 10 60 5060 serveurprincipal.exemple.com.
_sip._tcp.exemple.com. 86400 IN SRV 10 20 5060 serveursecondaire1.exemple.com.
_sip._tcp.exemple.com. 86400 IN SRV 10 20 5060 serveursecondaire2.exemple.com. _sip._tcp.exemple.com. 86400 IN SRV 20 100 5060 serveurdesecours.exemple.com.
Les trois premiers enregistrements ont tous la même priorité de 10. Par conséquent, les clients vont devoir utiliser le champ poids afin de déterminer quel serveur doit être contacté de préférence ; pour ce champ, la somme des trois valeurs est de 100, donc « serveurprincipal.exemple.com » sera utilisé 60% du temps, et les deux autres « serveursecondaire1.exemple.com » et « serveursecondaire2.exemple.com » seront respectivement et aléatoirement utilisé 20% du temps. Dans le cas où le premier serveur « serveurprincipal.exemple.com » serait indisponible, les deux autres "serveurs secondaires" se partageraient alors la charge équitablement, puisqu'ils possèdent un poids identique.
Par ailleurs, si ces 3 serveurs de priorité 10 étaient simultanément indisponibles, l'enregistrement de priorité immédiatement supérieure serait alors choisi, dans notre exemple « serveurdesecours.exemple.com » avec la priorité 20.
Aller plus loin :
RFC 2782: A DNS RR for specifying the location of services (DNS SRV)
RFC 6186: Use of SRV Records for Locating Email Submission/Access services