Aller au contenu principal

9. DNS Discovery of a Server (Découverte DNS d'un serveur)

Cette section décrit une procédure optionnelle qu'un client STUN peut utiliser pour découvrir, à l'aide des procédures du système de noms de domaine (Domain Name System, DNS) [RFC1035], l'adresse IP et le port d'un serveur STUN.

Une utilisation doit (must) définir quand le client doit utiliser cette procédure. Par exemple, une utilisation pourrait définir que le nom du serveur peut être provisionné manuellement dans le client, ou elle pourrait définir que le client peut découvrir le nom par d'autres moyens, tels qu'un protocole de configuration.

Une fois qu'un client a déterminé le nom à résoudre, il effectue une requête d'enregistrement A ou AAAA pour ce nom. Cette requête renvoie une ou plusieurs adresses IP. Si l'utilisation STUN définit un port bien connu unique, le client devrait (SHOULD) utiliser ce port. Sinon, le client effectue une requête SRV pour le nom. La requête SRV produira une liste de noms DNS, ainsi que leurs priorités, poids et ports. Le client effectue ensuite une requête A ou AAAA sur chacun des noms DNS pour les convertir en adresses IP.

Une fois que le client a obtenu une liste d'adresses IP et de ports, il ordonne la liste selon les procédures décrites dans RFC 3484 [RFC3484]. Le client commence ensuite à contacter les serveurs en utilisant la liste ordonnée d'adresses IP et de ports, en commençant par l'adresse la plus préférée. Le client continue dans la liste jusqu'à ce qu'il trouve un serveur réactif ou épuise la liste.

Lorsque des enregistrements SRV sont utilisés pour obtenir l'adresse et le port du serveur, un client ne devrait pas (SHOULD NOT) utiliser un serveur dont le nom DNS ne correspond pas au nom que le client a interrogé. Par exemple, si le client a interrogé _stun._udp.example.com et que la réponse SRV contenait un nom DNS de server1.otherdomain.com, le client ne devrait pas (SHOULD NOT) envoyer à ce serveur. Cela permet d'empêcher un attaquant qui contrôle le DNS dans un domaine de rediriger les requêtes STUN vers un serveur dans un autre domaine.

Un client peut (MAY) mettre en cache les résultats d'une recherche DNS pendant la durée spécifiée par le temps de vie (Time to Live, TTL) du ou des enregistrements DNS. Si le client ne reçoit pas de réponse d'un serveur obtenu via un enregistrement DNS SRV dans un délai raisonnable (tel que défini par l'utilisation), le client devrait (SHOULD) réinterroger le DNS. Le client devrait (SHOULD) respecter les valeurs TTL DNS.

Si l'utilisation STUN définit un port pour un transport particulier, et que ce transport utilise SRV, alors l'utilisation doit (MUST) définir un nom symbolique pour ce service SRV. Le nom symbolique est le nom du service précédé d'un trait de soulignement, suivi d'un point, le nom du protocole précédé d'un trait de soulignement, suivi d'un point, puis le nom de domaine. Par exemple, si l'utilisation définit un transport basé sur UDP pour STUN sur le port 3478, et que le nom de domaine est example.com, le nom symbolique serait _stun._udp.example.com.