Le DNS (Domain Name System) est un service essentiel qui traduit les noms de domaine lisibles par l'humain en adresses IP, permettant ainsi la communication sur Internet. Le protocole principal utilisé pour les requêtes DNS est traditionnellement UDP (User Datagram Protocol), mais TCP (Transmission Control Protocol) est également pris en charge. La RFC 5966 fournit des spécifications et des clarifications concernant l'utilisation de TCP dans le DNS, en complément d'UDP. Cet article explore la RFC 5966, en expliquant les processus de communication entre les clients et les serveurs DNS et la manière dont l'équilibrage de charge peut être mis en œuvre pour le trafic UDP et TCP.
UDP et TCP dans la communication DNS #
UDP pour DNS : l'approche par défaut #
Les requêtes DNS sont généralement envoyées via UDP sur le port 53. UDP est un protocole léger et sans connexion qui excelle dans l'envoi de petits paquets de données avec une surcharge minimale. Une requête DNS typique implique qu'un client envoie une requête à un serveur DNS et que le serveur répond avec l'adresse IP correspondante.
La raison pour laquelle UDP est la valeur par défaut pour DNS est son efficacité :
- Faible latence:UDP ne nécessite pas l'établissement d'une connexion avant la transmission des données, ce qui minimise le délai.
- Communication sans état:Chaque demande est indépendante, ce qui la rend rapide et simple.
- Petites charges utiles:Les requêtes DNS sont souvent très petites et UDP peut les gérer efficacement sans congestion.
Cependant, le protocole UDP présente des limites, notamment en termes de fiabilité. Des paquets peuvent être perdus ou arriver dans le désordre. De plus, les réponses DNS peuvent dépasser la limite de taille UDP habituelle (512 octets pour le DNS traditionnel, étendue à 4096 octets avec EDNS0), ce qui peut entraîner une troncature.
TCP pour DNS : une alternative fiable #
Contrairement à UDP, TCP est un protocole orienté connexion qui assure une transmission de données fiable en établissant une liaison et en garantissant la livraison séquentielle des paquets. Traditionnellement, DNS sur TCP était réservé aux transferts de zone entre serveurs DNS (opérations AXFR/IXFR) et aux scénarios de secours lorsqu'une réponse DNS était trop volumineuse pour UDP.
La RFC 5966 précise que les serveurs DNS doivent prendre en charge DNS sur TCP pour toutes les requêtes, et pas seulement dans des cas exceptionnels. Les principales raisons d'utiliser TCP dans DNS sont les suivantes :
- Réponses importantes:DNSSEC (DNS Security Extensions) et d'autres améliorations ont permis d'obtenir des messages DNS plus volumineux. Si une réponse dépasse la limite de taille UDP, le client bascule vers TCP pour récupérer la réponse complète.
- Fiabilité:TCP garantit que tous les paquets sont reçus dans le bon ordre, résolvant ainsi les problèmes de fiabilité rencontrés avec UDP.
Comment fonctionne la communication DNS via UDP et TCP #
Communication UDP #
- Le client envoie une requête DNS au serveur via UDP.
- Le serveur traite la requête et renvoie une réponse, généralement dans la limite de 512 octets.
- Si la réponse du serveur dépasse cette limite et qu'une troncature se produit, le client renvoie la requête via TCP.
Communication TCP #
- Le client initie une connexion TCP avec une négociation à trois.
- La requête est envoyée et le serveur répond avec la réponse DNS complète.
- La connexion est fermée après la communication, bien que des connexions persistantes puissent être maintenues pour plusieurs requêtes afin de réduire la surcharge.
Équilibrage de charge pour UDP et TCP dans DNS #
L'équilibrage de charge joue un rôle crucial pour garantir la fiabilité, la disponibilité et l'évolutivité des services DNS, en particulier dans les environnements à fort trafic. Il peut répartir les requêtes DNS sur plusieurs serveurs, optimiser l'utilisation des ressources et améliorer les temps de réponse. Pour le trafic DNS, l'équilibrage de charge UDP et TCP est important, mais les méthodes diffèrent légèrement.
Équilibrage de charge du trafic DNS UDP #
Étant donné que le protocole UDP est sans état, l'équilibrage de charge pour UDP implique l'équilibrage des requêtes individuelles sans suivre les états de connexion. Il existe plusieurs techniques d'équilibrage de charge UDP :
- DNS à tour de rôle:Le résolveur DNS distribue de manière aléatoire les requêtes sur plusieurs serveurs DNS, offrant ainsi un moyen simple de répartir le trafic.
- Routage Anycast:Avec Anycast, la même adresse IP est annoncée par plusieurs serveurs DNS situés à différents endroits. Le réseau achemine la requête du client vers le serveur le plus proche, réduisant ainsi la latence.
- Hachage IP:Certains équilibreurs de charge utilisent l'adresse IP source pour acheminer le trafic de manière cohérente vers le même serveur DNS. Cela garantit que le même client est acheminé vers le même serveur pendant une certaine période.
Équilibrage de charge du trafic DNS TCP #
Le protocole TCP étant orienté connexion, l'équilibreur de charge doit suivre l'état de chaque connexion pour garantir que tous les paquets d'une session sont acheminés vers le même serveur DNS. Les techniques d'équilibrage de charge TCP incluent :
- Persistance de la session: Également connue sous le nom de « sessions persistantes », cette méthode garantit que tous les paquets d'une même session TCP sont acheminés vers le même serveur. Cela est essentiel pour maintenir l'intégrité de la connexion TCP.
- Équilibrage de charge de couche 4:Les équilibreurs de charge de la couche 4 (couche de transport) répartissent le trafic en fonction des adresses IP et des numéros de port TCP/UDP, garantissant que chaque connexion ou session est gérée par le même serveur.
- Équilibrage de charge de couche 7:Au niveau de la couche 7 (couche application), l'équilibreur de charge peut inspecter la requête DNS elle-même et prendre des décisions de routage intelligentes en fonction du contenu de la requête, comme le nom de domaine demandé.
Avantages de la mise en œuvre de l'équilibrage de charge pour DNS #
- Redondance et basculement:L'équilibrage de charge garantit que si un serveur tombe en panne, d'autres peuvent prendre le relais de manière transparente, offrant ainsi une résolution DNS continue.
- Évolutivité:À mesure que la demande augmente, des serveurs supplémentaires peuvent être ajoutés derrière l’équilibreur de charge sans modifier les configurations côté client.
- Distribution géographique:Avec le routage Anycast, les serveurs DNS peuvent être répartis sur différents emplacements géographiques, permettant aux clients d'atteindre le serveur le plus proche pour une résolution plus rapide.
Configuration de l'équilibrage de charge DNS sur UDP et DNS sur TCP #
Pour équilibrer efficacement la charge du trafic DNS à l'aide de Relianoid Load Balancer, vous pouvez configurer deux batteries distinctes spécifiquement pour DNS sur UDP et DNS sur TCP, toutes deux sur le port 53. La batterie DNS sur UDP gère les requêtes DNS standard, qui sont généralement plus petites et sans connexion, optimisant la vitesse et une utilisation réduite des ressources. Parallèlement, la batterie DNS sur TCP est configurée pour les requêtes DNS qui dépassent la taille de paquet UDP typique (512 octets) ou nécessitent une livraison plus fiable, comme les transferts de zone. En segmentant ces batteries en fonction du protocole, vous garantissez une gestion efficace de chaque type de trafic sur le port 53, en tirant parti de la distribution de charge spécifique au protocole tout en améliorant la résilience et en réduisant les goulots d'étranglement.
Pour ce faire, créez les fermes dans la section LSLB > Fermes avec le profil L4xNAT et le mode NAT comme indiqué ci-dessous.

Conclusion #
La RFC 5966 souligne l'importance de la prise en charge du protocole TCP pour les requêtes DNS en plus des requêtes UDP traditionnelles. Bien que le protocole UDP reste le principal protocole en raison de son efficacité, le protocole TCP offre une fiabilité pour les réponses volumineuses et les requêtes DNSSEC. Pour que les services DNS soient évolutifs et résilients, en particulier en cas de trafic intense, la mise en œuvre de stratégies d'équilibrage de charge pour le trafic UDP et TCP est essentielle. Ces techniques d'équilibrage de charge garantissent que les services DNS restent réactifs, sécurisés et capables de gérer une demande croissante.
En comprenant et en exploitant les deux protocoles ainsi qu’un équilibrage de charge approprié, les administrateurs réseau peuvent créer des infrastructures DNS robustes qui répondent aux exigences modernes de l’Internet.